-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[TASK-39] style: 전역적으로 사용될 폰트, 색상 토큰 적용 / Navbar, Footer 생성 및 반응형 적용 #7
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
리뷰 완료했습니다 코멘트 한번 확인 부탁드립니다!
spacing: { | ||
'4.5': '18px', | ||
'7.5': '30px', | ||
'15': '60px', | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
spacing은 gap에 활용되는 프리셋일까요??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
iconSizes 파일에서 아이콘 사이즈 정의 시 사용해요!
Tailwind CSS에서는 spacing
키워드를 통해 정의된 값을 margin
, padding
, width
, height
등의 유틸리티 클래스에서 활용해서 spacing
키워드로 작성해뒀어요!
tailwind.config.ts
Outdated
background: { | ||
base: '#101010', | ||
title: '#FFFFFF', | ||
subtitle: '#F5F5F5', | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
피그마와 비교하면서 리뷰진행하고 있는데, 재가 생각하기에 title 색상과 background는 구분되어도 될 것 같다는 생각이 들어서 의견 남깁니다..!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@@ -1,3 +1,98 @@ | |||
@tailwind base; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
typography에서 title 요소는 없어보이는데 빠진 이유가 있을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
어 어제까지 없었는데 갑자기 생겨있네요??
전달 받은 게 없어서 몰랐습니다,, TITLE/L 추가할게요!
} | ||
|
||
h1 { | ||
font-size: 1.75rem; /* 28px */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
주석까지... 감사합니다 ㅎㅎ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
히히 추후에 최종 확인 및 수정 후, 필요 없어지면 주석 한꺼번에 지울게요!
src/app/layout/AppShell.tsx
Outdated
@@ -0,0 +1,14 @@ | |||
import Footer from '@/components/Footer/Footer'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 특정 페이지를 구성하기 위해 활용되는 요소들은 모두 컴포넌트 쪽으로 뺴는 경향이 있어서 AppShell이 컴포넌트에 에 있는 건 어떨까 의견드립니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
import ReactQueryProvider from './ReactQueryProvider'; | ||
|
||
import AppShell from './layout/AppShell'; | ||
|
||
const PretendardRegular = localFont({ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
globalcss로 적용하는 거랑 localfont로 className으로 넘겨주는건 무슨 차이가 있나요? 궁금해서 질문드립니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Next.js에서 제공하는 next/font
를 사용하면 폰트를 최적으로 로드할 수 있어요. 모든 폰트 파일을 자동으로 최적화하고 성능을 개선해줘요.
next/font/local
은 웹 폰트 다운로드 시간을 절약하고, 오프라인 사용 가능성을 제공해요. 자세한 내용은 Next.js의 공식 문서 내용 중 Font Optimization (https://nextjs.org/docs/pages/building-your-application/optimizing/fonts) 에서 확인하실 수 있어요 :)
src/app/page.tsx
Outdated
@@ -1,3 +1,90 @@ | |||
'use client'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 페이지에 대한 변경 사항은 pr에서 빠져도 될 것 같습니다!
작업 해주신 내용을 한눈에 확인할 수 있어서 편하긴 했습니다 ㅎㅎ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네! 감사해여
파일 지우면 해당 컴포넌트 내에 작성하신 다른 댓글도 지워질 것 같아서 댓글 확인하시면 src/app/page.tsx
는 PR에서 제외할게요!
src/components/Footer/Footer.tsx
Outdated
@@ -0,0 +1,29 @@ | |||
import Image from 'next/image'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
src/app/page.tsx
Outdated
</div> | ||
))} | ||
|
||
<h1 className='text-gray-50 text-4xl'>타이틀 텍스트</h1> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
title, subtitle이런 요소들도 프리셋으로 만들어두는 것은 어떤가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
프리셋으로 만들어두자고 하시는 게 className
에 넣어서 사용할 수 있게끔 만드는 걸 의미하는 게 맞을까요? title은 <h_>
태그로 사용 가능하고, subtitle은 따로 태그 생성이 불가능해 className
에 넣어서 사용 가능하게 처리해뒀어요! 처리한 내용은 globals.css
파일에서 확인 가능하세요 :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 요소에 h1 태그와 텍스트 사이즈 조절 클래스가 같이 사용되고 있어서 따로 설정값을 만들지 않으신 걸로 오해했습니다..! 말씀해주신 내용 global.css 에서 확인했습니다! 따로 수정할 필요는 없을 것 같습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
다현님 추가 커밋에 대한 리뷰 완료했습니다! 수고 많으셨어요! 일부 개인적인 생각이 포함된 리뷰도 있어서 제가 잘못 알고 있는 부분이 있을 수 있습니다!
'custom-dark': { | ||
extend: 'dark', // 다크 모드 기본값 상속받음 | ||
colors: { | ||
background: '#101010', // 다크 모드 배경색 | ||
foreground: '#FFFFFF', // 텍스트 기본 색상 | ||
}, | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
배경색이 중복 되는 것 같아 다음과 같이 color 변수화 해놓은 부분을 위로 빼서 공통으로 사용할 수 있게 하는 방식은 어떨까 제안드립니다!
import { nextui } from '@nextui-org/react';
const colors = {
main: '#6304FF',
system: {
error: '#FF2828',
success: '#3D6EFF',
},
black: '#111111',
white: '#FFFFFF',
gray: {
900: '#222222',
800: '#2B2B2B',
700: '#616161',
600: '#757575',
500: '#9E9E9E',
400: '#B5B5B5',
300: '#E0E0E0',
200: '#EEEEEE',
100: '#F5F5F5',
50: '#FAFAFA',
},
title: '#FFFFFF',
subtitle: '#F5F5F5',
background: {
base: '#101010',
},
};
export default {
content: [
'./app/**/*.{js,ts,jsx,tsx,mdx}',
'./pages/**/*.{js,ts,jsx,tsx,mdx}',
'./components/**/*.{js,ts,jsx,tsx,mdx}',
'./src/**/*.{js,ts,jsx,tsx,mdx}',
'./node_modules/@nextui-org/theme/dist/**/*.{js,ts,jsx,tsx}',
],
theme: {
extend: {
fontFamily: {
sans: ['var(--font-geist-sans)'],
},
colors, // 테마 색상 재활용
spacing: {
'4.5': '18px',
'7.5': '30px',
'15': '60px',
},
},
},
plugins: [
nextui({
themes: {
'custom-dark': {
extend: 'dark',
colors: {
background: colors.background.base, // 재활용
foreground: colors.white, // 재활용
},
},
},
}),
],
};
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
감사합니다 이것도 다음 PR에서 반영할게요!
} | ||
}; | ||
|
||
const isInvalid = React.useMemo(() => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
useMemo만 Import 해오는게 좋을 것 같습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
넵 React.
빼는 걸 잊었어서 아까 빼서 다시 커밋했습니다!
밀린 커밋이 많아서 이건 다음 PR에 반영할게요!
const isInvalid = React.useMemo(() => { | ||
if (value === '') return false; | ||
|
||
return !validateEmail(value); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
별도 함수로 분리하신 이유가 있을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
useMemo 때문에 따로 뺐는데 의미가 없어져서 합치도록 하겠습니다~!
src/components/Input/EmailInput.tsx
Outdated
} else { | ||
setMessage(''); | ||
} | ||
}, [value, isInvalid]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
inValid의 useMemo랑 useEffect 둘다 value에 의존하고 있는 것으로 보입니다. 제가 이해하기로는 useEffect가 동작할때 useMemo가 캐싱값을 버리고 다시 연산에 들어갈 것 같아 굳이 useMemo를 사용할 필요가 없어보입니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
넵 이것도 반영해두겠습니다
@@ -43,7 +54,7 @@ const EmailInput = () => { | |||
} else { | |||
setMessage(''); | |||
} | |||
}, [value, isInvalid]); | |||
}, [value, isInvalid, mode]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mode가 의존성 배열에 포함되는 이유가 있을까요? 현재 컴포넌트 내에서 별도 조작이 있지않아보이고, props기 때문에 변할 염려가 없어 보입니다..!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
앗 ㅠ 네 잘못 넣었네요. 빼도록 할게요!
📝 작업 내용
2-1. 폰트, 행간/자간, 색상 토큰을 전역적으로 적용
2-2. 아이콘을 쉽고 효율적으로 적용할 수 있도록 시스템 형성 (+ 아이콘 파일, 사이즈 등 따로 관리)
2-3. 반응형이 적용된 Navbar, Footer 구축 (Navbar는 스크롤을 내려도 보이도록 화면 상단에 고정)
📸 스크린샷 (선택)
💬 리뷰 요구사항 (선택)