--------------
하 진짜... 이름값 한다... 왜 안돼요./...
이번에 프로젝트 시작하면서 nextJs 를 사용해보려고 야심차게 깔고
어려워서 계속 헤맨다.
그냥 react 같았으면 폰트적용 뚝딱 했을텐데 이번엔 tailwindcss랑 같이 쓰다보니
더 헷갈려서 나중에 또 써먹을일 있을까봐 기록용으로 써둠.
일단 폰트들은 public/fonts에 담아둿음
뭐 블로그 찾아보니까 app 폴더에 fonts 폴더 넣어도 된다고는 하는디..그냥 찝찝해서 나는 퍼블릭에 넣엇음
app 안에있는 글로벌.css에 백날천날 폰트페이스, 폰트패밀리 적용해도 소용 1도 없다.... 우선순위 다 밀림.. 내가 봄.
next/font
next/font는 불필요한 외부 네트워크 요청을 없애고, 폰트를 자동적으로 최적화 해준다.
next/font/local을 활용하면 googlefonts가 아닌 src 내의 font 파일도 불러와 사용할 수 있따!
폰트 다운
pretendard 같은 경우에는 공홈에서 다운받을 수 있음
깃허브 가면 아예 라이브러리로 지원도 해줌.
폰트 파일형식이 여러개인데 그중에
PretendardVariable.woff2 파일을 사용하면 된다
Preloading
font function을 호출하는 위치에 따라, Preloading 범위를 지정할수 있다.
- page 내부에서 호출한경우, 해당 page에서만 preloading이 된다.
- layout에서 호출한 경우, 해당 layout에 의해 감싸진 모든 페이지에 preloading이 된다.
- Root layout에서 호출한 경우, 모든 루트에 대해 preloading 된다.
나는 전역적으로 pretendard 가 적용되면 좋겟어서 rootlayout에 호출해줬다.
import localFont from 'next/font/local';
const pretendard = localFont({
src: "../public/fonts/PretendardVariable.woff2",
display: "swap",
weight: "45 920",
variable: "--font-pretendard"
});
const didot = localFont({
src: "../public/fonts/Didot.otf",
display: "swap",
variable: "--font-didot"
})
export const metadata: Metadata = {
title: "Create Next App",
description: "Generated by create next app",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en" className={didot.variable}>
<body className={pretendard.className}>
<MSWComponent>
<Header />
{children}
</MSWComponent>
</body>
</html>
);
}
공식문서에 친절히 나와있지만. 나는 영어 못함이슈로 .... 얼마없는 14버전 폰트적용 블로그.. 싺싹 핥음
localFont 임포트 해주시고요
const pretendard = localFont({
src: "../public/fonts/PretendardVariable.woff2",
display: "swap",
weight: "45 920",
variable: "--font-pretendard"
});
const didot = localFont({
src: "../public/fonts/Didot.otf",
display: "swap",
variable: "--font-didot"
})
이런식으로 작성해주면되는데
나는 경로때문에 꽤나 .. 삽질함
아니 퍼블릭이면 당연히 /fonts/어쩌구 아니냐고..
심지어 기본설정 @ 이걸로 적용해놔서
@/fonts -> x
기타 등등
할수있는거 다해봄
하지만 안됐음
결국 ../public 이엿음..
허허,,, 왜 적용이 안되는거죠
아무튼 이런식으로 설정해뒀으면
리턴 부분에도 만들어둔 상수 선언을 해줘야한다
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en" className={didot.variable}>
<body className={pretendard.className}>
<MSWComponent>
<Header />
{children}
</MSWComponent>
</body>
</html>
);
}
didot 폰트는 포인트로 줄거라 variable로 줬고 pretendard는 전역으로 쓸거라 className으로 해줬음 근데 그냥 html 태그안에서 다 설정해줘도 될것같다.
나 왜저렇게 해놨지 싶지만 이미. 디벨롭에 머지해서 돌릴수없다.
TailwindCSS 적용
이제ㅔ 저렇게 해줬으면 테일윈드에서 사용할수있게 설정을 해줘야한다.
tailwindCss.config.ts 파일에가서
import type { Config } from "tailwindcss";
const config: Config = {
content: [
"./pages/**/*.{js,ts,jsx,tsx,mdx}",
"./components/**/*.{js,ts,jsx,tsx,mdx}",
"./app/**/*.{js,ts,jsx,tsx,mdx}",
],
theme: {
extend: {
colors: {
mainBlack: "#131213",
mainWhite: "#FDFCF7",
footerOrange:"#FF5634"
},
fontFamily:{
didot: ["var(--font-didot)"],
pretendard : ["var(--font-pretendard)"]
}
},
},
plugins: [require('@tailwindcss/forms')],
};
export default config;
이런식으로 설정해주면 끝~
사용
이런식으로 선언해서 사용해주면 된다.
참고블로그
'Next JS' 카테고리의 다른 글
next js 14 + tailwindCSS폰트적용하기 2 (1) | 2024.11.04 |
---|---|
Next Js에서 msw 사용하기 (1) | 2024.05.07 |
1일차 Next js (0) | 2024.02.27 |
댓글