
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ํฌ๋ก์ค๋ธ๋ผ์ฐ์ง ์ด์๋ ํผํ ์ ์์ต๋๋ค.
::-webkit-input-placeholder์ ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ณ ํ๋ฆฌํฝ์ค(-webkit-, -moz-, -ms- ๋ฑ)๋ฅผ ์ผ์ผ์ด ์ถ๊ฐํ๋ ๊ฑด ๊ต์ฅํ ๋ฒ๊ฑฐ๋ก์ด ์์ ์ด์์.
์ฌ์ค ํ์ ์์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ด๋ฌํ ํ๋ฆฌํฝ์ค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๋งค์ฐ ๊ณค๋ํ ์ผ์ ๋๋ค.
(์ ๋ ๊ด๋ จ๋ ๋ํ๋ฅผ ๋๋๋ค ์๊ฒ๋์ด์!)
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฒ๋ค๋ฌ๋ฅผ ํตํด ์๋์ผ๋ก ํ๋ฆฌํฝ์ค๋ฅผ ์ถ๊ฐํด์ฃผ๋ ๋ฐฉ๋ฒ์ธ Autoprefixer๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
PostCSS๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๋ฉด, ํน์ CSS๋ก ๋ณํํ ํ postcss-loader๊ฐ ์ฒ๋ฆฌํ๊ฒ ํ๋ค๋ฉด ๊ฐ๋ฐ์๊ฐ ๊ฐ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ๋ง๊ฒ ์คํ์ผ์ ๋ฐ๋ก ์์ฑํ์ง ์์๋ Autoprefixer๊ฐ ์นํท ํ๋ฆฌํฝ์ค์ ๊ฐ์ ๊ฒ์ ์๋์ผ๋ก ๋ถ์ฌ์ค๋๋ค.
์ด๋ฒ ํฌ์คํธ์์๋ PostCSS์ Autoprefixer๋ฅผ ํ์ฉํด ํด๋น ISSUE๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ค์ ํ๋ก์ ํธ ๊ฒฝํ์ ๋ฐํ์ผ๋ก ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค!
PostCSS์ Autoprefixer๋?
PostCSS
- JavaScript ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํด CSS๋ฅผ ๋ณํํ๋ ๋๊ตฌ
- "Post-processor"๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ ์ด์ ๋ CSS๋ฅผ ์์ฑํ ํ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ
- CSS ๊ตฌ๋ฌธ ๋ถ์์ ์ต์ ํ๋ ํ์๋ฅผ ์ฌ์ฉํด ๋์ ์ฑ๋ฅ์ ๋ณด์
- CSS ์ ์ฒ๋ฆฌ๊ธฐ(Sass)๋ ํ์ฒ๋ฆฌ๊ธฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅ (์ด ๋ถ๋ถ์ ์ ๊ฐ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์ด๋ผ ์๋ ์ถ๊ฐ์ค๋ช
์ ๋ฃ์์ด์!)
- CSS ์ ์ฒ๋ฆฌ๊ธฐ(SASS):
CSS ๊ธฐ๋ฅ์ ํ์ฅํ ์ธ์ด ์ ๋๋ค. ๋ณ์, ์ค์ฒฉ ๊ท์น, ๋ฏน์ค์ธ ๋ฑ์ ์ง์ํ๊ณ , PostCSS๋ Sass๋ก ์์ฑํ ์ฝ๋๋ฅผ ์ฒ๋ฆฌํ ์ ์์ง๋ง, PostCSS ์์ฒด๋ Sass ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ง ์์์. - CSS ํ์ฒ๋ฆฌ๊ธฐ:
PostCSS๋ CSS์ฝ๋๊ฐ ์์ฑ๋ ํ์ ์ถ๊ฐ์ ์ธ ๋ณํ ์์ ์ ์ํํ๋ ๋๊ตฌ๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ ๊ฐ ์ง๊ธ ์์ฑํ๋ Autoprefixer ๊ฐ์ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํด์ ์๋์ผ๋ก ๋ธ๋ผ์ฐ์ ํ๋ฆฌํฝ์ค๋ฅผ ์ถ๊ฐํ ์ ์๋ ๊ฒ์ฒ๋ผ์!
- CSS ์ ์ฒ๋ฆฌ๊ธฐ(SASS):
- 200๊ฐ ์ด์์ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ค์ํ ๊ธฐ๋ฅ ์ ๊ณต (์ํ๊ณ๊ฐ ํฝ๋๋ค!)
- ๋ชจ๋ํ๋ ๊ตฌ์กฐ๋ก ํ์ํ ๊ธฐ๋ฅ๋ง ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ ํ์ ์ถ๊ฐ ๊ฐ๋ฅ
Autoprefixer
- PostCSS์ ๋ํ์ ์ธ ํ๋ฌ๊ทธ์ธ
- ๋ธ๋ผ์ฐ์ ํ๋ฆฌํฝ์ค๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํด์ฃผ๋ ๋๊ตฌ
- Browserslist ์ค์ ์ ํตํด ์ง์ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ง์ ๊ฐ๋ฅ
Create React App๊ณผ Vite์ ๊ธฐ๋ณธ ์ง์
ํด๋น ๋ถ๋ถ์ Webpack์ ์ง์ ์ค์ ํ์ง ์์ ๋ ์ด๋ป๊ฒ ๋๋ ๊ฑด์ง, ๊ธฐ๋ณธ ์ค์ ์ด ๋์ด ์๋์ง ๋ฑ์ด ๊ถ๊ธํด ์ฐพ์๋ณด๊ฒ ๋์ต๋๋ค.
Create React App (CRA)
- PostCSS์ Autoprefixer๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ๋์ด ์์
- ๋ณ๋ ์ค์ ์์ด ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- browserslist ์ค์ ๋ ๊ธฐ๋ณธ ์ ๊ณต
CRA์ package.json์ ๋ณด์๋ฉด ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ํ์ธํ์ค ์ ์์ต๋๋ค.
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
Vite
- PostCSS๋ ๊ธฐ๋ณธ ์ง์
- Autoprefixer๋ ๋ณ๋ ์ค์น ํ์
yarn add -D autoprefixer
// vite.config.js
import autoprefixer from 'autoprefixer'
export default {
css: {
postcss: {
plugins: [
autoprefixer()
]
}
}
}
ํ์ฌ ํ๋ก์ ํธ์ Custom Webpack ์ค์ ํ๊ธฐ
์ปค์คํ Webpack ์ค์ ์์๋ ์๋์ผ๋ก PostCSS์ Autoprefixer๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
ํ์ํ ํจํค์ง ์ค์น
yarn add -D postcss postcss-loader autoprefixer
์นํฉ ์ค์ ์์
module.exports = {
module: {
rules: [
{
test: /\.module\.scss$/,
use: [
"style-loader",
{
loader: "css-loader",
options: {
modules: {
localIdentName: "[name]__[local]--[hash:base64:5]",
},
importLoaders: 2,
},
},
{
loader: "postcss-loader",
options: {
postcssOptions: {
plugins: [
["autoprefixer"]
],
},
},
},
"sass-loader",
],
},
{
test: /\.(scss|css)$/,
exclude: /\.module\.scss$/,
use: [
"style-loader",
{
loader: "css-loader",
options: {
importLoaders: 2,
},
},
{
loader: "postcss-loader",
options: {
postcssOptions: {
plugins: [
["autoprefixer"]
],
},
},
},
"sass-loader",
],
},
],
},
// ... ๊ธฐํ ์นํฉ ์ค์
};
์ถ๊ฐ์ ์ผ๋ก ์ ๋ ์ค์ ํ์ง ์์์ง๋ง ๋ค๋ฅธ ๋ธ๋ก๊ทธ ๊ธ์ ๋ณด์๋ฉด ๊ฐํน postcss-scss์ ๋ํ ์ถ๊ฐ๊ฐ ๋ณด์ด์ จ์ ํ ๋ฐ, ์ด๊ฑด ๋ฌด์จ ์ญํ ์ผ๊น์?!
postcss-scss๋?
- ์ผ๋ฐ์ ์ผ๋ก ํ์ํ์ง ์์ต๋๋ค
- sass-loader๊ฐ SCSS๋ฅผ CSS๋ก ๋ณํํ ํ postcss-loader๊ฐ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ
- postcss-scss๋ SCSS ๊ตฌ๋ฌธ์ ์ง์ PostCSS ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋๋ง ํ์
์ค์ํ๋ ๋ถ๋ถ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ
package.json์ ์์ฑ๋ผ์ผ ํ๋ json ๋ฌธ๋ฒ์. browserslistrc ํ์ผ์ ์ ์ฉํด ๋ฒ๋ ธ์ด์. ๊ณต์ ๋ฌธ์๋ฅผ ์ฝ๋ค ์๊ฐ์ ์ผ๋ก ์ฐฉ๊ฐํ์ต๋๋ค. ๋๋ฌด ๊ฐ๋จํ์ง๋ง ์ ๊ธฐ์ค์์ ์น๋ช ์ ์ธ ์ค์๋ ์๊ฐ์ด ๋ค์ด ๊ธฐ๋กํด๋๋ ค ํฉ๋๋ค!
Browserslist ์ค์ ์ค๋ฅ
Error [BrowserslistError]: Unknown browser query `{`. Maybe you are using old Browserslist or made typo in query.
.browserslistrc ํ์ผ ์ฌ์ฉ (๊ถ์ฅ)
์ ๋ ์ต์ข ์ ์ผ๋ก ์๋์ ์ฝ๋๋ก ์์ ํ์ต๋๋ค!
# ํ๋ก๋์
ํ๊ฒฝ
[production]
>0.2% # ์ ์ธ๊ณ ์ฌ์ฉ๋ฅ 0.2% ์ด์์ธ ๋ธ๋ผ์ฐ์
not dead # ๊ณต์ ์ง์์ด ์ค๋จ๋์ง ์์ ๋ธ๋ผ์ฐ์
not op_mini all # Opera Mini ๋ธ๋ผ์ฐ์ ์ ์ธ
# ๊ฐ๋ฐ ํ๊ฒฝ
[development]
last 1 chrome version # ์ต์ ํฌ๋กฌ ๋ฒ์
last 1 firefox version # ์ต์ ํ์ด์ดํญ์ค ๋ฒ์
last 1 safari version # ์ต์ ์ฌํ๋ฆฌ ๋ฒ์
ํด๊ฒฐ๋ฐฉ๋ฒ 2: package.json์ ์ค์
{
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
Browserslist ์ค์ ๊ฐ์ด๋
์ฃผ์ ์ฟผ๋ฆฌ ์ค๋ช
- >0.2%: ์ ์ธ๊ณ ์ฌ์ฉ๋ฅ 0.2% ์ด์์ธ ๋ธ๋ผ์ฐ์
- not dead: ๊ณต์ ์ง์์ด ์ค๋จ๋์ง ์์ ๋ธ๋ผ์ฐ์
- not op_mini all: Opera Mini ๋ธ๋ผ์ฐ์ ์ ์ธ
- last 1 chrome version: ์ต์ ํฌ๋กฌ ๋ฒ์
- last 2 versions: ๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ต์ 2๊ฐ ๋ฒ์
- > 1%: ์ ์ธ๊ณ ์ ์ ์จ 1% ์ด์
- IE 11: IE 11 ์ง์
์ค์ ํ ์คํธ
- browserslist.dev์์ ์ค์ ์ ํ ์คํธํ ์ ์์
- ์ด๋ค ๋ธ๋ผ์ฐ์ ๊ฐ ํฌํจ๋๋์ง ์ค์๊ฐ์ผ๋ก ํ์ธ ๊ฐ๋ฅ
์ค์ ๋์ ์์
๋ณํ ์ CSS
.example {
display: flex;
user-select: none;
}
๋ณํ ํ CSS
.example {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
์ฃผ์์ฌํญ๊ณผ ํ!
- ๋ก๋ ์์: PostCSS ๋ก๋๋ Sass ๋ก๋ ์ดํ, CSS ๋ก๋ ์ด์ ์ ์์นํด์ผ ํฉ๋๋ค.
- sass-loader (SCSS -> CSS ๋ณํ)
- postcss-loader (์๋ ํ๋ฆฌํฝ์ค ์ถ๊ฐ)
- css-loader (CSS -> JS ๋ณํ)
- style-loader (JS -> style ํ๊ทธ ์ฝ์ )
- ์ฑ๋ฅ ์ต์ ํ: development ํ๊ฒฝ์์๋ source map์ ํ์ฑํํ๊ณ , production์์๋ ๋นํ์ฑํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ์ง์ ๋ฒ์: browserslist ์ค์ ์ ํตํด ์ง์ํ ๋ธ๋ผ์ฐ์ ๋ฒ์๋ฅผ ์ ์ ํ ์กฐ์ ํด์ผ ํฉ๋๋ค.
์ฃผ์์ฌํญ๊ณผ ํ์์์ Development ํ๊ฒฝ์์ source map ํ์ฑํํ๋ ์ด์ & Production ํ๊ฒฝ์์ ๋นํ์ฑํ ํ๋ ์ด์ ์ ๋ํด์๋ง ์ข ๋ ์์ธํ ์์๋ณผ๊ฒ์!
Development ํ๊ฒฝ์์ source map ํ์ฑํํ๋ ์ด์ :
- ๋๋ฒ๊น
์ฉ์ด์ฑ
- ๊ฐ๋ฐ ์ค์๋ ์๋ณธ ์์ค ์ฝ๋์ ๋ณํ๋ ์ฝ๋๋ฅผ ๋งคํํ์ฌ ์ฝ๊ฒ ๋๋ฒ๊น ํ ์ ์์ต๋๋ค
- ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ์์ ์ค์ ์์ฑํ CSS ํ์ผ์ ์์น์ ๋ผ์ธ์ ์ ํํ ํ์ธ ๊ฐ๋ฅ
- PostCSS๋ก ๋ณํ๋ ์ฝ๋๊ฐ ์๋ ์๋ณธ ์ฝ๋๋ฅผ ์ง์ ํ์ธํ๋ฉฐ ์์ ๊ฐ๋ฅ
- ๊ฐ๋ฐ ํจ์จ์ฑ
- ์ฝ๋ ์์ ์ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ ํ์ธ ๊ฐ๋ฅ
- CSS ๋ฌธ์ ๋ฐ์ ์ ์ ํํ ์์น ์ถ์ ์ด ๊ฐ๋ฅํ์ฌ ์์ ์๊ฐ ๋จ์ถ
- ๋ณต์กํ ์คํ์ผ ๊ตฌ์กฐ์์๋ ์๋ณธ ์ฝ๋ ์์น๋ฅผ ์ฝ๊ฒ ํ์ !
Production ํ๊ฒฝ์์ source map ๋นํ์ฑํํ๋ ์ด์ :
- ํ์ผ ํฌ๊ธฐ ์ต์ ํ
- source map ํ์ผ์ ์๋ณธ ์ฝ๋์ ๋ณํ๋ ์ฝ๋์ ๋งคํ ์ ๋ณด๋ฅผ ํฌํจํ๋ฏ๋ก ์๋นํ ํฌ๊ธฐ๋ฅผ ์ฐจ์ง
- ํ๋ก๋์ ํ๊ฒฝ์์๋ ๋ถํ์ํ ๋ฐ์ดํฐ ์ ์ก์ ์ค์ฌ ๋ก๋ฉ ์๋ ํฅ์
- ์ผ๋ฐ์ ์ผ๋ก source map ํ์ผ์ ์๋ณธ ํ์ผ ํฌ๊ธฐ์ ์ ๋ฐ ์ด์์ ์ฐจ์งํ ์ ์์
- ๋ณด์ ๊ฐํ
- source map์ด ๋ ธ์ถ๋๋ฉด ์๋ณธ ์ฝ๋ ๊ตฌ์กฐ๊ฐ ๋๋ฌ๋ ์ ์์
- ์ ์์ ๋ฅผ ๊ฐ์ง ์ฌ์ฉ์๊ฐ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ๋ ๊ฒ์ ๋ฐฉ์ง
- ๊ธฐ์ ์ proprietary ์ฝ๋ ๋ณดํธ!!
- ์ฑ๋ฅ ์ต์ ํ
- ๋ธ๋ผ์ฐ์ ๊ฐ source map์ ์ฒ๋ฆฌํ๋ ์ถ๊ฐ์ ์ธ ์์ ์ ๊ฑฐ
- ์ด๊ธฐ ํ์ด์ง ๋ก๋ฉ ์๊ฐ ๋จ์ถ
- ์๋ฒ ๋์ญํญ ์ฌ์ฉ๋ ๊ฐ์
์ค์ ์ค์ ์์! (ํ๋ก์ ํธ ์ฝ๋๋ณด๋ค ๊ฐ๋ตํ)
// webpack.config.js
module.exports = {
mode: process.env.NODE_ENV,
module: {
rules: [{
test: /\.css$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
sourceMap: process.env.NODE_ENV === 'development'
}
},
{
loader: 'postcss-loader',
options: {
sourceMap: process.env.NODE_ENV === 'development'
}
}
]
}]
}
};
๊ฒฐ๋ก
PostCSS์ Autoprefixer๋ฅผ ์ฌ์ฉํ๋ฉด ํฌ๋ก์ค๋ธ๋ผ์ฐ์ง์ ์ํ ์๋ ์์ ์ ์๋ํํ ์ ์์ต๋๋ค.
CRA๋ Create Vite๊ฐ์ ๊ฒฝ์ฐ ์ด๋ฏธ ์ด๋ฌํ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๊ณ ์์ผ๋ฉฐ, ์ปค์คํ ์นํฉ ์ค์ ์์๋ ๊ฐ๋จํ ์ค์ ๋ง์ผ๋ก ๋์ผํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํนํ Browserslist ์ค์ ์ ํตํด ํ๋ก์ ํธ์ ๋ธ๋ผ์ฐ์ ์ง์ ๋ฒ์๋ฅผ ๋ช ํํ ํ๊ณ , ํ์ํ ํ๋ฆฌํฝ์ค๋ง ์ถ๊ฐํจ์ผ๋ก์จ ์ต์ ํ๋ CSS๋ฅผ ์์ฑํ ์ ์๊ฒ ์ฃ ?!
.browserslistrc ํ์ผ์ ์ฌ์ฉํ๋ฉด ์ค์ ๊ด๋ฆฌ๊ฐ ๋์ฑ ์ฉ์ดํด์ง๋ฉฐ, ๋ค๋ฅธ ๋๊ตฌ๋ค๊ณผ๋ ์ค์ ์ ๊ณต์ ํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ "๋ค๋ฅธ ๋๊ตฌ๋ค"์ ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ CSS ๋๋ JavaScript ๋๊ตฌ๋ค์ ์๋ฏธํฉ๋๋ค!
- Autoprefixer: CSS์ ํ์ํ ๋ธ๋ผ์ฐ์ ํ๋ฆฌํฝ์ค๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํด์ฃผ๋ ๋๊ตฌ๋ก, Browserslist ์ค์ ์ ํตํด ์ด๋ค ํ๋ฆฌํฝ์ค๋ฅผ ์ถ๊ฐํ ์ง ๊ฒฐ์ (์ง๊ธ๊น์ง ์ค๋ช ๋๋ฆฐ ๋ด์ฉ์ด์ฃ ?!)
- Babel: ์ต์ JavaScript ์ฝ๋๋ฅผ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์๋ ์๋ํ ์ ์๊ฒ ๋ณํํด์ฃผ๋ ๋๊ตฌ๋ก, Browserslist ์ค์ ์ ํตํด ์ง์ํ ๋ธ๋ผ์ฐ์ ์ ์ ๊ฐ๋ฅ
- ESLint: JavaScript ์ฝ๋์ ํ์ง์ ๊ด๋ฆฌํ๋ ๋๊ตฌ๋ก, Browserslist์ ํจ๊ป ์ฌ์ฉํด ํน์ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ๋ง๋ ์ฝ๋ ์คํ์ผ ์ ์ฉ ๊ฐ๋ฅ
- Stylelint: CSS ์คํ์ผ์ ๊ฒ์ฌํ๋ ๋๊ตฌ๋ก, Browserslist ์ค์ ์ ์ฐธ๊ณ ํ์ฌ ๋ธ๋ผ์ฐ์ ํธํ์ฑ ๊ด๋ จ ๊ท์น ์ ์ฉ ๊ฐ๋ฅ
์ฆ, .browserslistrc ํ์ผ์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๋ค์ํ ๋๊ตฌ๋ค์ด ๋์ผํ ๋ธ๋ผ์ฐ์ ์ง์ ๋ฒ์๋ฅผ ๊ณต์ ํ๊ฒ ๋์ด, ๊ฐ๋ฐ ๋ฐ ์ ์ง๋ณด์ ๊ณผ์ ์์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค!
| ๐ ์ฐธ๊ณ ๋ฌธํ |
| PostCSS ๊ณต์ ๋ฌธ์ |
| Autoprefixer GitHub |
| Browserslist |
| Create React App PostCSS ์ค์ |
| Vite CSS ์ค์ |
| Webpack 5 postcss-loader |
| Browserslist ๊ด๋ จ ๊ฐ์ธ ๋ธ๋ก๊ทธ |
'Side Project > Allini - ๋ฐ๋ ค๊ฒฌ ์์ ๊ด๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋์์ด๋์ ๊ฑฐ๋ฆฌ๊ฐ ์ขํ๊ธฐ! (6) | 2025.08.01 |
|---|---|
| ์๋ฆฌ๋ ํ๋ก์ ํธ์ ์ ์ญ์ํ๊ด๋ฆฌ ์ถ๊ฐํ๊ธฐ (1) | 2024.11.13 |
| express-openapi-validator PR ์ฌ์ ๊ธฐ! HTTP ์ธ์ฆ ๋ก์ง ๊ฐ์ ํ๊ธฐ ๐ (11) | 2024.10.27 |
| React ์๋ฒ ์ปดํฌ๋ํธ ์ฌ์ธต ๋ถ์! (7) | 2024.10.22 |
| Virtual Scroll: ์ด๋ค ์ํฉ์์ ์จ์ผํ ๊น? (8) | 2024.10.13 |