normalize.css(์ด์์ ์ผ๋ก๋ NPM์์)๋ฅผ ์ฑ๋ฅ์ ์ผ๋ก ๋ก๋ํ๋ ์ด์์ ์ธ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ์ ์ ์์ฐ์ผ๋ก ๋ก๋ํ๋ ๊ฒ์ ํผํ๊ณ ์ฝ๊ฐ์ CSS์ ๋ํ ํค๋ ์์ฒญ์ ๋์ ํ๊ณ ์ถ์ต๋๋ค.
Glamour์๋ glamor/reset
์ถ๊ฐ ๊ธฐ๋ฅ์ด ์์ง๋ง normalize๋ณด๋ค ํจ์ฌ ๊ฐ๋จํ๋ฉฐ ์ ๊ฐ ์ํ๋ ๊ฒ์ด ์๋๋๋ค(์ด์จ๋ ๋ค์๋ถํฐ Glamour์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค).
next/head
๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@nkzawa next/head
๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ถ ๊ธ๋ก๋ฒ syles๋ฅผ ๋ก๋ํ์ง๋ง ํ๋ก์ ํธ์ css-loader
๊ฐ ์์ผ๋ฉด $#$2 node_modules
#$์์ CSS ํ์ผ์ ์ด๋ป๊ฒ ์๊ตฌํ ์ ์์ต๋๊น? ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ฌ์ฉ์ ์ธก์์ ์บ์ํ ์ ์์ต๋๊น? ์๋๋ฉด ๋ชจ๋ ํค๋ ์์ฒญ์ ํ์ด๋ก๋๋ฅผ ๋ถํ๋ ค ์ค๋๊น?
๋ค์๊ณผ ๊ฐ์ด style
๋ฅผ next/head
์ ํ
์คํธ๋ก ์ ์ํ๊ณ ์ถ์ต๋๋ค.
<Head>
<style>{`
body {
margin: 0;
}
`}</style>
</Head>
normalize.css
์ .json
๋ก ๋๋ ๊ตฌ์ฑ์์๋ฅผ require
๋ก ๋ณํํด์ผ ํ์ง๋ง ์ด๊ฒ์ด ํ์ฌ IMO์ ๊ฐ์ฅ ์ ํฉํ ๋ฐฉ๋ฒ์
๋๋ค. ๋ชจ๋ ํ์ด์ง์ ํ์ผ์ด ํ์ํ ๊ฒฝ์ฐ ์ฒญํฌ๋ก ๋ฒ๋ค๋๊ณ ํ์ด๋ก๋๊ฐ ๋ถํ๋ ค์ง์ง ์๋๋ก ํ ๋ฒ๋ง ๋ก๋๋ฉ๋๋ค.
https://github.com/zeit/next.js/pull/222 ๊ฐ ์ถ์๋์์ ๋ css-loader
๋ ์ฌ์ฉํ ์ ์์์ต๋๋ค.
๊ฐ์ฌ ํด์. ์ด๊ฒ์ด ๋ด๊ฐ ์๊ฐํ ๊ฒ์ด์์ง๋ง ํ์ฌ ๋ ์๋์ผ๋ก ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ด ์๋์ง ๋ชฐ๋์ต๋๋ค. Webpack ๋๋ Gulp๋ฅผ ๋ก์ปฌ์์ ์คํํ์ฌ ๋ค์์ ํํธํ๊ธฐ ์ ์ ๋ณํํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ next๊ฐ ๊ณตํต ์ฒญํน์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋๋ ์ง๊ธ ๋จธ๋ฆฌ์ ๋ฌผ๊ฑด์ ๋ฐ์ด ๋ฃ๋ ๊ฒ์ ๋ํด ๊ธฐ๋ถ์ด ์ข์ต๋๋ค. ๋ด ์ง๋ฌธ์ ๋ต๋ณํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
2016๋ 12์ 9์ผ 01:11์ Naoyuki Kanezawa [email protected] ์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ๋ค์/ํค๋์ ํ ์คํธ๋ก ์คํ์ผ์ ์ ์ํ๊ณ ์ถ์ต๋๋ค.
normalize.css๋ฅผ .json ๋๋ ํ์ํ ๊ตฌ์ฑ ์์๋ก ๋ณํํด์ผ ํ์ง๋ง ์ด๊ฒ์ด ํ์ฌ IMO์ ๊ฐ์ฅ ์ ํฉํ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ชจ๋ ํ์ด์ง์ ํ์ผ์ด ํ์ํ ๊ฒฝ์ฐ ์ฒญํฌ๋ก ๋ฒ๋ค๋๊ณ ํ์ด๋ก๋๊ฐ ๋ถํ๋ ค์ง์ง ์๋๋ก ํ ๋ฒ๋ง ๋ก๋๋ฉ๋๋ค.#222๊ฐ ์ถ์๋์์ ๋ css-loader๋ ์ฌ์ฉํ ์ ์์์ต๋๋ค.
โ
์ค๋ ๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ๋ณด๊ฑฐ๋ ์ค๋ ๋๋ฅผ ์์๊ฑฐํ์ธ์.
glamour๋ v3.0.2์ ์ค๋๋ ๋ฒ์ ์ด๊ธฐ๋ ํ์ง๋ง ์ค์ ๋ก normalize.css
๋ฅผ ์ฌ์ฉํ๋ค๋ ์ ์ ์ง์ ํ๊ณ ์ถ์ต๋๋ค.
https://github.com/threepointone/glamor/blob/master/src/reset.js
ํ ๋ฆฌํ์คํธ๋ฅผ ํ๋ค
https://github.com/threepointone/glamor/pull/154
import 'glamor/reset'
๊ฐ์ ธ์ค๊ธฐ๋ง ํ๋ฉด ์ ์๋ํฉ๋๋ค.
5.0์ด ํ์ํ๊ฑฐ๋ pull ์์ฒญ์ด ๋ณํฉ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ฉด ์ธ์ ๋ ์ง ๋ด ํฌํฌ๋ฅผ ์ฌ์ฉํ์ธ์. :)
@FrancosLab ํ ๊ฐ์ฌํฉ๋๋ค! glamor/reset
๋ฅผ ๋ง๋ฌ์ง๋ง normalize๊ฐ ๊ทธ ์ผ๋ถ๋ผ๋ ๊ฒ์ ์์ง ๋ชปํ์ต๋๋ค. Glamour์ README์ ์ธ๊ธ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ํ๋ณด ๊ฐ์ฌํฉ๋๋ค!
[email protected]
์ ๋ํด ์ง๊ธ ์ด ์์
์ ์ํํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น? ๋๋ ์ด์ด ์์ด with-global-stylesheet
์์ ๋ก ์ํ๋ ์์
์ ์๋ฎฌ๋ ์ดํธํ๋ ค๊ณ ์ฌ๋ฌ ์๊ฐ์ ๋ณด๋์ต๋๋ค.
normalize.css
๋ ํจํค์ง์ด๊ธฐ ๋๋ฌธ์ ๋จ์ํ ํ์ผ์ ๋ณต์ฌํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค(Node์ require resolution์ package.main
์ฌ์ฉ). ๊ฒ๋ค๊ฐ emit-file-loader
(๊ทธ๋ฆฌ๊ณ file-loader
๋ ๋ง์ฐฌ๊ฐ์ง)๋ ์์ ์ ์ฅ์์ ๋ค๋ฅด๊ฒ ๋์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. name=dist/[path][name].[ext]
์ต์
์ ๋ก๋์ ์ ๋ฌํ ๋ path
๋ ํญ์ -
๋ก ์์ํ์ฌ ํ์ผ์ด .next/dist/-/node_modules/normalize.css/normalize.css
์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ด ๋ฌธ์ ์
๋๋ค. .
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฒด normalize.css
ํ์ผ์ static
ํด๋์ ๋ณต์ฌํ๊ฑฐ๋ ์ ์ฒด๋ฅผ style
ํ๊ทธ์ ์ธ๋ผ์ธํ๋ ๊ฒ์
๋๋ค. ์คํ์ผ๋ง์ ์ํด).
webpack-copy-plugin
๋ฅผ ์ฌ์ฉํด ๋ณด์์ง๋ง static
ํด๋๊ฐ .next
์์ ์ ๊ณต๋์ง ์๊ณ ์ค์ ๋ก๋ ๋ฃจํธ ํด๋ ์์ฒด <root-folder>/static
(์ฌ๊ธฐ์ pages
์ํ) ๊ทธ๋์ ๊ทธ๊ฒ๋ ์๋ํ์ง ์์์ต๋๋ค.
์ด์ Next.js๋ Glamour์ ์์กดํ์ง ์์ต๋๋ค. ์์ผ๋ก ๋์๊ฐ๊ธฐ ์ํ ํ์ด ์์ต๋๊น?
ํธ์ง: ๊ด๋ จ: https://github.com/zeit/styled-jsx/issues/83 , https://github.com/zeit/styled-jsx/pull/100 , https://github.com/zeit/ next.js/issues/544
with-global-stylesheet
์์ ๊ฐ ์ฌ๊ธฐ์์ ์
๋ฐ์ดํธ๋์์ต๋๋ค: #1327!
import 'normalize.css'
์ ๊ฐ์ ๊ฐ๋จํ ์์
์์๋ ์ฌ์ ํ ์๋ํ์ง ์์ต๋๋ค. ์ฃผ์ ๋ฌธ์ ๋ Webpack์ด ์๋ฒ์์ ์คํ๋์ง ์๊ธฐ ๋๋ฌธ์ ์๋ฒ์์ ์คํ๋๋ ๋ชจ๋ ํ์ผ์์ non-js ํ์ผ์ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ๊ฒ์
๋๋ค.@migueller ๋ v2.0 ์ดํ ๋ฒ์ฉ Webpack์ผ๋ก ์ ํํ ์ ์์ต๋๋ค...: https://github.com/zeit/next.js/issues/1245
@sedubois , ๊ฐ์ ํ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค! ๐
๊ฑฐ๊ธฐ์ ํฌํ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค ๐
์ฌ๋ฌ๋ถ, ๋ฐฉ๊ธ ๋ณํฉ๋ includePaths
์์ด๋ sass-loader
normalize
๋ฅผ ์ ๊ฐ์ ธ์์ต๋๋ค. normalize-scss ( normalize.css
์ Sass ํฌํธ)๋ฅผ ์ค์นํ๊ณ ์ต์์ ๋ ๋ฒจ(custom _document
, ๋ ์ด์์ ๋๋ ํ์ด์ง)์ <strong i="10">@import</strong> '~normalize-scss';
๋ฅผ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. with-global-stylesheet
๋ฐฉ์์ผ๋ก $ scss
์คํ์ผ์ํธ๋ฅผ ํฌํจํฉ๋๋ค.
์ด์ ์๋ณธ์ ๊ฐ์ ธ์ค๋ ๋์ babel-plugin-module-resolver
#$๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ์นญ์ node_modules
๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์์ ์์ styles
๋ฅผ ์ฌ์ฉํ ๋ค์ js๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. + <style dangerouslySetInnerHTML={{ __html: normalize }} />
.
@orlin , Webpack์ ๊ฑฐ์น์ง ์๊ธฐ ๋๋ฌธ์ ์๋ฒ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ JS๋ก ๊ฐ๋จํ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
@migueller , with-global-stylesteet
์์ ์ js
์์ scss
๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ๋๋ก ์๋ํด์ผ ํฉ๋๋ค. css
๋ฐ scss
๋ชจ๋ next.config.js
์์ Webpack ๋ก๋์ ์ํด ์ฒ๋ฆฌ๋๊ณ js๋ก ๋ณํ๋ฉ๋๋ค. normalize.css
๋ฅผ ์ค์นํ๊ณ babel-plugin-module-resolver
๋ณ์นญ์ ์ค์ ํ์ฌ ์๋ํ๋ ...
๊ฒฝ๋ก๋ฅผ ์ ๊ณตํด์ผ ํ๋ฏ๋ก import normalize from '...'
๋ฅผ ์ ๊ณตํ์ง ์์์ต๋๋ค.
@orlin ,
์์ ๋ฅผ ๋ณต์ ํ๊ณ normalize.css
๋ฅผ ์ถ๊ฐํ๊ณ ์กฐ๊ธ ๊ฐ์ง๊ณ ๋์์ต๋๋ค. ๋น์ ๋ง์ด ๋ง์, ๊ทธ๊ฒ์ด ์๋ํ๊ฒ ๋ง๋๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค!
๊ทธ๋ฌ๋ package.json
๋ฅผ ๋ณต์ฌํ์ง ์์ผ๋ฉด Node์ require
๋ฅผ ๋ณต์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐฉ์ถ๋ ํ์ผ์ ์ถ๋ ฅ ์ด๋ฆ์ด dist/[path]index.js
์ธ ์ฌ์ฉ์ ์ง์ ๊ตฌ์ฑ์ ๋ง๋ค์ด์ผ ํ์ต๋๋ค. require
์(๋) ์ฐพ์ง ์์ต๋๋ค. ๋ค๋ฅธ ์คํ์ผ( node_modules
์ด ์๋ ์์ค ์ฝ๋์ ์๋)์ ๋ํด ์ด ๋์์ ์ํ์ง ์๊ธฐ ๋๋ฌธ์ normalize.css(๋ฐ ์ฌ์ฉ ์ค์ธ ๋ค๋ฅธ ํจํค์ง ํฌํจ)์ ๋ํด์๋ง Webpack ๊ท์น์ ์ค์ ํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ ๋จ๊ธฐ ์์ ์ผ๋ก ์๋ํ์ง๋ง #1245 ๋ฐ https://github.com/zeit/styled-jsx/pull/100#issuecomment ์์ ๋ ผ์๋๋ ๊ฒ์ฒ๋ผ ์ฆ์ ์๋ํ๋ ๊ฒ์ ๊ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค. -277133969
@rauchg , node_modules
์ ์กด์ฌํ๋ ํจํค์ง์ ๋ํ ์์ ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ข์ ์์ด๋์ด๋ผ๊ณ ์๊ฐํ์ญ๋๊น? ๋๋ ์๋ก์ด ์๋ฅผ ๋ง๋ค๊ฑฐ๋ with-global-stylesheet
ํ๋๋ฅผ ํ์ฅํ๋ ๊ฒ์ ์ ๊ฒฝ ์ฐ์ง ์์ ๊ฒ์
๋๋ค.
@migueller ๋ฅผ ๋์ผํ ์์ ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์๋ง๋ ๋ฐ๋์งํ ๊ฒ์ ๋๋ค.
@migueller ์ด ์์
์ ์ํํ๋ ๋งค์ฐ ๊นจ๋ํ "๋ชจ๋ฒ ์ฌ๋ก" ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค. with-global-stylesheet
์ ๋ํ PR์ ํ ๊ฒ์
๋๋ค ... ํดํน์ ๋๋ฌด ๋ง์ ์๊ฐ์ ์๋นํ์ง ์์์ผ๋ฉด ํฉ๋๋ค.
์ฌ์ค์ ๋๋ ์ ๊ทํ๋ฅผ ํฌํจํ ์ ์ญ ์คํ์ผ์ ์ด์จ๋ ์ํฐ ํจํด์ ๋๋ค. ๊ตฌ์ฑ ์์๋ ๊ณ ์ ํ ์คํ์ผ์ ์ ์ดํด์ผ ํฉ๋๋ค. Normalize๋ CSS์ jQuery์ ๋๋ค.
@jaydenseric Normalize.css๊ฐ CSS์ jQuery๋ผ๋ ๊ฒ์ด ๋ง์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ ํ HTML ์์์ ๊ธฐ๋ณธ ์คํ์ผ์์ ์๋นํ ์ผ๊ด์ฑ์ด ์์ต๋๋ค. Normalize.css๋ ์ด ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. Normalize.css๋ ์ต์ ํ๋ก์ ํธ์ ๋ํ ๋ ๊ฑฐ์ ๋ธ๋ผ์ฐ์ ์ง์์ ํ์ํฉ๋๋ค.
๋ด๊ฐ ์ฌ์ฉํ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. (https://github.com/zeit/next.js/#custom-document)
// ./pages/_document.js
import Document, { Head, Main, NextScript } from 'next/document'
import flush from 'styled-jsx/server'
export default class MyDocument extends Document {
static getInitialProps({ renderPage }) {
const { html, head, errorHtml, chunks } = renderPage()
const styles = flush()
return { html, head, errorHtml, chunks, styles }
}
render() {
return (
<html>
<Head>
<title>My page</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css" />
</Head>
<body className="custom_class">
{this.props.customValue}
<Main />
<NextScript />
</body>
</html>
)
}
}
@vinzcelavi ์ ์คํ์ผ์ ํ๋ฌ์ํฉ๋๊น?
@sospedra ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค ๐ฌ ๋์์ด ๋ ์ ์์ต๋๋ค : https://github.com/zeit/styled-jsx#styled -jsxserver
์๋ง๋ ๊ทธ๋ ๊ฒ ํ๊ณ ์ถ์ง ์์ ๊ฒ์
๋๋ค. ๋์ ์
๋ฐ์ดํธ๋ ๋ฌธ์์ ๋ฐ๋ผ Document.getInitialProps
๋ฅผ ํธ์ถํ์ญ์์ค: https://github.com/zeit/next.js/#custom -document
Head
๋ด๋ถ์ CDN URL๊ณผ ํจ๊ป link
ํ๊ทธ๋ฅผ ๋ฐฐ์นํ๋ ๊ฒ์ด ์ ์ข์ง ์์ต๋๊น? ๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ์ผํ์ต๋๋ค.
@janoist1 ์ฌ๊ธฐ์ ๋ฌธ์ ๋ ์ธ๋ถ CDN์ ์์กดํ๊ธฐ๋ณด๋ค ๋ค์๋ถํฐ ์ ๊ทํ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ ์ถ๋ค๋ ๊ฒ์ ๋๋ค. ๊ฐ๋ฐ ๋จ๊ณ์์๋ ๋ฌธ์ ๊ฐ ์์ง๋ง ํ๋ก๋์ ํ๊ฒฝ์์๋ ์ธ๋ถ์ ์์กดํ๊ณ ์ถ์ง ์์ต๋๋ค.
๋ค์์ next-css
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ต์
์ด ์๋ ๊ฒฝ์ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์
๋๋ค.
๋จผ์ normalize.css
Head
link
๋ฅผ ํฌํจ์ํจ ๋ค์ <style type='text/css'>{globalStyles}</style>
๋ฅผ ํตํด ์ผ๋ถ ์ฌ์ฉ์ ์ ์ ์ ์ญ ์คํ์ผ์ ์ ์ฉํฉ๋๋ค.
import React from 'react'
import Document, { Head, Main, NextScript } from 'next/document'
const globalStyles = `
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
`
export default class MyDocument extends Document {
render () {
return (
<html>
<Head>
<meta name='viewport' content='width=device-width, initial-scale=1' />
<meta charSet='utf-8' />
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css' />
<style type='text/css'>{globalStyles}</style>
</Head>
<body>
<Main />
<NextScript />
</body>
</html>
)
}
}
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@jaydenseric Normalize.css๊ฐ CSS์ jQuery๋ผ๋ ๊ฒ์ด ๋ง์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ ํ HTML ์์์ ๊ธฐ๋ณธ ์คํ์ผ์์ ์๋นํ ์ผ๊ด์ฑ์ด ์์ต๋๋ค. Normalize.css๋ ์ด ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. Normalize.css๋ ์ต์ ํ๋ก์ ํธ์ ๋ํ ๋ ๊ฑฐ์ ๋ธ๋ผ์ฐ์ ์ง์์ ํ์ํฉ๋๋ค.