Assets, Metadata, and CSS
설명
- Next.js 는 built-in CSS를 제공
Assets
- Next.js는 public 폴더 아래로 이미지 같은 정적 요소를 제어.
- public 폴더 아래의 파일들은 애플리케이션에서 참조된다.
Image
설명
- Next.js의 Image 태그는 최신 웹용으로 확장된 next/imageHTML img요소이다.
- 브라우저에서 지원하는 경우 JPEG보다 약 30 % 작은 WebP와 같은 최신 이미지 형식으로 이미지를 자동으로 제공한다.(필요에 따라 이미지 최적화)
- 뷰포트를 스크롤하는 동안 특정 임계 값에 도달 한 경우에만 페이지 내부의 이미지를 지연로드한다.
- 동적으로 사용할 다양한 및 사용자 정의 해상도에 대해 다른 이미지 크기를 지정할 수 있다.
- 사진의 품질을 75 %로 설정된 낮은 임계 값으로 자동 변경한다(각 호출에 대해 변경 가능)
Import
import Image from 'next/image'
사용
<Image
src="/images/profile.jpg"
height={144} width={144} alt="woogie"
/>
Metadata
Head
- 리액트에서는 head 태그 대신에 Head 태그를 사용
Import
import Head from 'next/head'
사용
<Head>
<title>First Post</title>
</Head>
CSS Styling
style jsx
style 태그
<style jsx>{`
...
`}</style>
CSS 파일 생성 및 import
- 반드시 이름을 파일명.module.css 로 생성
layout.module.css
.container {
max-width: 36rem;
padding: 0 1rem;
margin: 3rem auto 6rem;
}
layout.js
- className={styles.container}
- styles는 module.css 파일을 import할 때 지정한 이름
- container는 module.css 파일에서 정의한 클래스 명
import styles from './layout.module.css'
export default function Layout({ children }) {
return (
<div className={styles.container}>
{children}
</div>
)
}
first-post.js
- Layout 태그 사이의 요소들은 layout.js의 default함수를 거쳐 layout이 입힌 채로 나온다.
import Layout from '../../components/layout'
export default function FirstPost() {
return (
<Layout>
<Head>
<title>First Post</title>
</Head>
<h1>First Post</h1>
<Link href="/">
<a>Back to home</a>
</Link>
<Image
src="/images/profile.jpg"
height={144} width={144} alt="woogie"
/>
</Layout>
)
}
Global Styles
- 모든 페이지에 같은 CSS 파일이 로드되기 원한다면 사용
- index.js와 같은 폴더에 _app.js 생성(이름고정)
- 만든 후에는 반드시 서버를 내리고 다시 올려야함
_app.js
import '../styles/global.css'
export default function App({ Component, pageProps }) {
return <Component {...pageProps} />
}
global.css
html,
body {
padding: 0;
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu,
Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
line-height: 1.6;
font-size: 18px;
}
* {
box-sizing: border-box;
}
a {
color: #0070f3;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
img {
max-width: 100%;
display: block;
}