์น์ฌ์ดํธ ์ฑ๋ฅ ํฅ์์ ์ํด CSS๋ฅผ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์. ์ด ๊ฐ์ด๋์์๋ CSS ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ๋ ๋๋ง ์๋๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก, ๊ธฐ์ ๋ฐ ๋๊ตฌ๋ฅผ ๋ค๋ฃน๋๋ค.
CSS ์ต์ ํ ๊ท์น: ์ฑ๋ฅ ์ต์ ํ์ ๋ํ ์ข ํฉ ๊ฐ์ด๋
์ค๋๋ ์ ๋์งํธ ํ๊ฒฝ์์ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์น์ฌ์ดํธ๋ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํฌ ๋ฟ๋ง ์๋๋ผ ๊ฒ์ ์์ง ์์์ ์ ํ์จ๋ ๋์ ๋๋ค. ์๊ฐ์ ํํ์ ํ์์ ์ธ CSS(Cascading Style Sheets)๋ ์ฌ๋ฐ๋ฅด๊ฒ ์ต์ ํ๋์ง ์์ผ๋ฉด ์น์ฌ์ดํธ ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ด ๊ฐ์ด๋์์๋ ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ์น์ฌ์ดํธ๋ฅผ ๋ง๋๋ ๋ฐ ๋์์ด ๋๋ CSS ์ต์ ํ ๊ธฐ์ , ๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ๋๊ตฌ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
CSS๋ฅผ ์ต์ ํํด์ผ ํ๋ ์ด์
CSS ์ต์ ํ๋ ๋ช ๊ฐ์ง ์ฃผ์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ์น์ฌ์ดํธ ์๋ ํฅ์: CSS ํ์ผ ํฌ๊ธฐ๊ฐ ์์์๋ก ๋ค์ด๋ก๋ ๋ฐ ๊ตฌ๋ฌธ ๋ถ์ ์๋๊ฐ ๋นจ๋ผ์ ธ ํ์ด์ง ๋ก๋ ์๊ฐ์ด ๋จ์ถ๋ฉ๋๋ค.
- ํฅ์๋ ์ฌ์ฉ์ ๊ฒฝํ: ๋ ๋น ๋ฅด๊ฒ ๋ก๋๋๋ ์น์ฌ์ดํธ๋ ์ฌ์ฉ์์๊ฒ ๋ ๋ถ๋๋ฝ๊ณ ์ฆ๊ฑฐ์ด ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
- ํฅ์๋ ๊ฒ์ ์์ง ์ต์ ํ(SEO): ๊ฒ์ ์์ง์ ๋ก๋ฉ ์๊ฐ์ด ๋ ๋น ๋ฅธ ์น์ฌ์ดํธ๋ฅผ ์ฐ์ ์ํ์ฌ ์์๊ฐ ๋์์ง๋๋ค.
- ๋์ญํญ ์๋น ๊ฐ์: CSS ํ์ผ ํฌ๊ธฐ๊ฐ ์์์๋ก ๋์ญํญ ์๋น๊ฐ ์ค์ด๋ค์ด ์น์ฌ์ดํธ ์์ ์์ ์ฌ์ฉ์ ๋ชจ๋์๊ฒ ๋น์ฉ์ ์ ๊ฐํด์ค๋๋ค. ํนํ ์ธํฐ๋ท ์ ์์ด ์ ํ์ ์ด๊ฑฐ๋ ๋น์ผ ์ง์ญ์์ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
- ํฅ์๋ ๋ชจ๋ฐ์ผ ์ฑ๋ฅ: ์ต์ ํ๋ ๋์ญํญ๊ณผ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ์ ํ์ ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๋ชจ๋ฐ์ผ ์ฅ์น์ ํนํ ์ค์ํฉ๋๋ค.
CSS ์ต์ ํ์ ์ฃผ์ ์์ญ
CSS ์ต์ ํ๋ ๋ค์์ ํฌํจํ์ฌ CSS ์ฝ๋์ ๋ค์ํ ์ธก๋ฉด์ ํด๊ฒฐํ๋ ๊ฒ์ ๋๋ค.
- ํ์ผ ํฌ๊ธฐ: CSS ํ์ผ์ ์ ์ฒด ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค.
- ๋ ๋๋ง ์ฑ๋ฅ: ๋ธ๋ผ์ฐ์ ์์ CSS๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ ์ฉํ๋ ๋ฐฉ์์ ์ต์ ํํฉ๋๋ค.
- ์ฝ๋ ๊ตฌ์ฑ: ์ ์ง ๊ด๋ฆฌ ๋ฐ ํจ์จ์ฑ์ ์ํด CSS๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- ์ ํ์ ํจ์จ์ฑ: ๋ธ๋ผ์ฐ์ ์ฒ๋ฆฌ ์๊ฐ์ ์ต์ํํ๊ธฐ ์ํด CSS ์ ํ์๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
CSS ์ต์ ํ ๊ธฐ์
1. ์ถ์ ๋ฐ ์์ถ
์ถ์๋ CSS ์ฝ๋์์ ๊ณต๋ฐฑ, ์ฃผ์ ๋ฐ ์ค ๋ฐ๊ฟ๊ณผ ๊ฐ์ ๋ถํ์ํ ๋ฌธ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Gzip ๋๋ Brotli๋ฅผ ์ฌ์ฉํ์ฌ ์์ถํ๋ฉด ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ์ฌ ํ์ผ ํฌ๊ธฐ๋ฅผ ๋์ฑ ์ค์ผ ์ ์์ต๋๋ค.
์:
์๋ CSS:
/*
This is a comment
*/
body {
font-family: Arial, sans-serif;
font-size: 16px;
color: #333;
}
์ถ์๋ CSS:
body{font-family:Arial,sans-serif;font-size:16px;color:#333;}
๋๊ตฌ:
- ์จ๋ผ์ธ ์ถ์๊ธฐ: CSS Minifier, Minify Code
- ๋น๋ ๋๊ตฌ: Webpack, Parcel, Gulp, Grunt
- ํ ์คํธ ํธ์ง๊ธฐ/IDE: ๋ง์ ํ ์คํธ ํธ์ง๊ธฐ ๋ฐ IDE์์ ์ถ์ ๊ธฐ๋ฅ์ด๋ ํ๋ฌ๊ทธ์ธ์ ๋ด์ฅํ๊ณ ์์ต๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: ๋น๋ ํ๋ก์ธ์ค์ ์ถ์ ๋ฐ ์์ถ์ ํตํฉํ์ฌ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฐํฌํ ๋๋ง๋ค CSS ํ์ผ์ ์๋์ผ๋ก ์ต์ ํํฉ๋๋ค.
2. ์ฌ์ฉํ์ง ์๋ CSS ์ ๊ฑฐ
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ CSS ํ์ผ์ ํนํ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ์ฌ์ฉํ์ง ์๋ ์คํ์ผ์ ์ถ์ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ฌ์ฉํ์ง ์๋ ์คํ์ผ์ ์ ๊ฑฐํ๋ฉด ํ์ผ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
๋๊ตฌ:
- UnCSS: HTML์ ๋ถ์ํ๊ณ ์ฌ์ฉํ์ง ์๋ CSS ์ ํ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- PurifyCSS: UnCSS์ ์ ์ฌํ์ง๋ง JavaScript ํ๋ ์์ํฌ ๋ฐ ๋์ ์ฝํ ์ธ ์ ํจ๊ป ์๋ํฉ๋๋ค.
- Chrome DevTools Coverage: ๋ธ๋ผ์ฐ์ ์์ ์ง์ ์ฌ์ฉํ์ง ์๋ CSS ๊ท์น์ ์๋ณํฉ๋๋ค.
์: ์น์ฌ์ดํธ์์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๋ฒํผ์ ๋ํ CSS ๊ท์น์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
.old-button {
background-color: red;
color: white;
padding: 10px 20px;
}
UnCSS ๋๋ PurifyCSS๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ๊ท์น์ ์๋์ผ๋ก ์๋ณํ๊ณ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: CSS๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๊ฐ์ฌํ์ฌ ์ฌ์ฉํ์ง ์๋ ์คํ์ผ์ ์๋ณํ๊ณ ์ ๊ฑฐํฉ๋๋ค. UnCSS ๋๋ PurifyCSS์ ๊ฐ์ ์๋ํ๋ ๋๊ตฌ๋ฅผ ๊ตฌํํ์ฌ ์ด ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํฉ๋๋ค.
3. CSS ์ ํ์ ์ต์ ํ
CSS ์ ํ์๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ด ๋ ๋๋ง ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ ํ์๋ฅผ ์ฒ๋ฆฌํ๋ฏ๋ก ๋ณต์กํ๊ณ ๋นํจ์จ์ ์ธ ์ ํ์๋ ๋ ๋๋ง ์๋๋ฅผ ๋ฆ์ถ ์ ์์ต๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก:
- ์ ๋๋ฒ์ค ์ ํ์(*) ์ฌ์ฉ ๋ฐฉ์ง: ์ ๋๋ฒ์ค ์ ํ์๋ ๋ชจ๋ ์์์ ์ผ์นํ๋ฏ๋ก ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค.
- ํค ์ ํ์ ์ฌ์ฉ ๋ฐฉ์ง: ํนํ *๋ฅผ ์ฌ์ฉํ์ฌ ํค ์ ํ์๋ฅผ ์ฌ์ฉํ ๋๋ ํนํ ์ฃผ์ํ์ญ์์ค.
- ID ์ ํ์ ์ ์คํ๊ฒ ์ฌ์ฉ: ID ์ ํ์๋ ๋น ๋ฅด์ง๋ง ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ํน์ ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ CSS๋ฅผ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค.
- ์ ํ์ ํ์ ๋ฐฉ์ง: ํ๊ทธ ์ด๋ฆ๊ณผ ํด๋์ค ์ด๋ฆ์ ๊ฒฐํฉํ๋ ์ ํ์(์: `div.my-class`)๋ ํด๋์ค ์ด๋ฆ๋ง ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์ผ๋ฐ์ ์ผ๋ก ๋ ํจ์จ์ ์ ๋๋ค.
- ์ ํ์๋ฅผ ์งง๊ณ ๋จ์ํ๊ฒ ์ ์ง: ์งง๊ณ ๋ ๊ตฌ์ฒด์ ์ธ ์ ํ์๊ฐ ์ผ๋ฐ์ ์ผ๋ก ๋ ํจ์จ์ ์ ๋๋ค.
์:
๋นํจ์จ์ ์ธ ์ ํ์:
div#content p.article-text span {
color: #666;
}
ํจ์จ์ ์ธ ์ ํ์:
.article-text span {
color: #666;
}
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: CSS ์ ํ์๋ฅผ ๋ถ์ํ๊ณ ๊ฐ๋ฅํ ํ ์งง๊ณ ๊ตฌ์ฒด์ ์ผ๋ก ๋ฆฌํฉํฐ๋งํฉ๋๋ค. ๋ถํ์ํ ์ค์ฒฉ ๋ฐ ์ ํ์ ํ์ ์ ๋ฐฉ์งํฉ๋๋ค.
4. CSS ํน์ ์ฑ ์ค์ด๊ธฐ
CSS ํน์ ์ฑ์ ์ฌ๋ฌ ๊ท์น์ด ๋์ผํ ์์๋ฅผ ๋์์ผ๋ก ํ ๋ ์ด๋ค CSS ๊ท์น์ ์ ์ฉํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ํน์ ์ฑ์ด ๋์ผ๋ฉด CSS๋ฅผ ์ฌ์ ์ํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ๊ฐ ๋ ์ด๋ ค์์ง๊ณ ์ฑ๋ฅ์๋ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก:
- !important ์ฌ์ฉ ๋ฐฉ์ง: `!important`๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ํน์ ์ฑ ์ถฉ๋์ด ๋ฐ์ํ์ฌ CSS๋ฅผ ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค.
- ํน์ ์ฑ์ ํ๋ช ํ๊ฒ ์ฌ์ฉ: ํน์ ์ฑ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๊ณ ์ ๋ต์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
- CSS ๋ฐฉ๋ฒ๋ก ๋ฐ๋ฅด๊ธฐ: BEM(Block, Element, Modifier) ๋๋ OOCSS(Object-Oriented CSS)์ ๊ฐ์ ๋ฐฉ๋ฒ๋ก ์ ์ฌ์ฉํ์ฌ ๋ ๋ชจ๋ํ๋๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ CSS๋ฅผ ๋ง๋ญ๋๋ค.
์:
๋์ ํน์ ์ฑ:
body #container .article .article-title {
font-size: 24px !important;
}
๋ฎ์ ํน์ ์ฑ:
.article-title {
font-size: 24px;
}
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: CSS์ ํน์ ์ฑ์ ๋ฎ๊ฒ ์ ์งํ์ฌ ๋ ์ ์ฐํ๊ณ ์ฝ๊ฒ ์ฌ์ ์ํ ์ ์๋๋ก ํฉ๋๋ค. `!important`์ ๋ถํ์ํ ์ฌ์ฉ์ ํผํ์ญ์์ค.
5. CSS ์ ๊ณต ์ต์ ํ
CSS๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ์๋ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ผ๋ฐ์ ์ผ๋ก CSSOM(CSS Object Model)์ด ๊ตฌ์ฑ๋ ๋๊น์ง ๋ ๋๋ง์ ์ฐจ๋จํ๋ฏ๋ก CSS ์ ๊ณต์ ์ต์ ํํ๋ฉด ์ธ์๋ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก:
- ์ธ๋ถ ์คํ์ผ์ํธ: ๋ ๋์ ์บ์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ํด ์ธ๋ถ ์คํ์ผ์ํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ค์ํ CSS ์ธ๋ผ์ธ: ๋น ๋ฅด๊ฒ ๋ ๋๋งํ๊ธฐ ์ํด ์ต์์ ์ฝํ ์ธ ์ ํ์ํ CSS๋ฅผ ์ธ๋ผ์ธํฉ๋๋ค.
- ์ค์ํ์ง ์์ CSS ์ฐ๊ธฐ: `rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'"`์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ค์ํ์ง ์์ CSS์ ๋ก๋ฉ์ ์ฐ๊ธฐํฉ๋๋ค.
- HTTP/2: ๋ค์คํ ๋ฐ ํค๋ ์์ถ์ ์ํด HTTP/2๋ฅผ ํ์ฉํฉ๋๋ค.
์:
์ค์ํ CSS ์ธ๋ผ์ธ:
<style>
body { font-family: Arial, sans-serif; }
h1 { color: blue; }
</style>
์ค์ํ์ง ์์ CSS ์ฐ๊ธฐ:
<link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="styles.css"></noscript>
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: ์ด๊ธฐ ๋ ๋๋ง์ ํ์ํ ์ค์ํ CSS๋ฅผ ์๋ณํ๊ณ ์ธ๋ผ์ธํฉ๋๋ค. ์ค์ํ์ง ์์ CSS์ ๋ก๋ฉ์ ์ฐ๊ธฐํ์ฌ ์ธ์๋ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
6. CSS ๋จ์ถ ์์ฑ ์ฌ์ฉ
CSS ๋จ์ถ ์์ฑ์ ์ฌ์ฉํ๋ฉด ํ ์ค์ ์ฝ๋๋ก ์ฌ๋ฌ CSS ์์ฑ์ ์ค์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด CSS ํ์ผ์ ์ ์ฒด ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
์:
์ฅํ ์์ฑ:
margin-top: 10px;
margin-right: 20px;
margin-bottom: 10px;
margin-left: 20px;
๋จ์ถ ์์ฑ:
margin: 10px 20px;
์ผ๋ฐ์ ์ธ ๋จ์ถ ์์ฑ:
- margin: ํ ์ ์ธ๋ฌธ์์ ๋ชจ๋ ์ฌ๋ฐฑ ์์ฑ์ ์ค์ ํฉ๋๋ค.
- padding: ํ ์ ์ธ๋ฌธ์์ ๋ชจ๋ ์์ชฝ ์ฌ๋ฐฑ ์์ฑ์ ์ค์ ํฉ๋๋ค.
- border: ํ ์ ์ธ๋ฌธ์์ ๋ชจ๋ ํ ๋๋ฆฌ ์์ฑ์ ์ค์ ํฉ๋๋ค.
- font: ํ ์ ์ธ๋ฌธ์์ ๊ธ๊ผด ๊ด๋ จ ์์ฑ์ ์ค์ ํฉ๋๋ค.
- background: ํ ์ ์ธ๋ฌธ์์ ๋ฐฐ๊ฒฝ ๊ด๋ จ ์์ฑ์ ์ค์ ํฉ๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: CSS ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ฝ๋ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ๊ฐ๋ฅํ ๊ฒฝ์ฐ CSS ๋จ์ถ ์์ฑ์ ์ฌ์ฉํฉ๋๋ค.
7. CSS ํํ์ ๋ฐฉ์ง
CSS ํํ์(๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์)์ ์ฌ์ฉํ๋ฉด JavaScript๋ฅผ ์ฌ์ฉํ์ฌ CSS ์์ฑ ๊ฐ์ ๋์ ์ผ๋ก ์ค์ ํ ์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ฝ๋์์ CSS ํํ์ ์ฌ์ฉ์ ํผํ์ญ์์ค.
์:
/* This is an example of a CSS expression (avoid using) */
width: expression(document.body.clientWidth > 500 ? "500px" : "auto");
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: ์ฝ๋์์ CSS ํํ์์ ์ ๊ฑฐํ๊ณ JavaScript ๊ธฐ๋ฐ ์๋ฃจ์ ๋๋ CSS ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ก ๋ฐ๊ฟ๋๋ค.
8. CSS ์ ์ฒ๋ฆฌ๊ธฐ ์ฌ์ฉ
Sass, Less ๋ฐ Stylus์ ๊ฐ์ CSS ์ ์ฒ๋ฆฌ๊ธฐ๋ ๋ณ์, ์ค์ฒฉ, ๋ฏน์ค์ธ ๋ฐ ํจ์์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ CSS ์ฝ๋๋ฅผ ๋ ์ฒด๊ณ์ ์ด๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ๋ฉฐ ํจ์จ์ ์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
CSS ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ป์ ์ ์๋ ์ด์ :
- ์ฝ๋ ๊ตฌ์ฑ: ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด CSS ์ฝ๋๋ฅผ ๋ ๋ชจ๋์ ์ด๊ณ ์ฒด๊ณ์ ์ธ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
- ๋ณ์: ์์ ๋ฐ ๊ธ๊ผด๊ณผ ๊ฐ์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์ ์ ์ฅํ๋ ๋ฐ ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ค์ฒฉ: HTML ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ๋๋ก CSS ๊ท์น์ ์ค์ฒฉํฉ๋๋ค.
- ๋ฏน์ค์ธ: ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ CSS ์ฝ๋ ๋ธ๋ก์ ๋ง๋ญ๋๋ค.
- ํจ์: CSS ๊ฐ์ ๋ํ ๊ณ์ฐ ๋ฐ ์กฐ์์ ์ํํฉ๋๋ค.
์์(Sass):
$primary-color: #007bff;
.button {
background-color: $primary-color;
color: white;
padding: 10px 20px;
&:hover {
background-color: darken($primary-color, 10%);
}
}
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: CSS ์ฝ๋์ ๊ตฌ์ฑ, ์ ์ง ๊ด๋ฆฌ ๋ฐ ํจ์จ์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด CSS ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
9. CSS ๋ชจ๋ ๋๋ CSS-in-JS ๊ณ ๋ ค
๋ ํฌ๊ณ ๋ณต์กํ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ์ฝ๋ ๊ตฌ์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ฅผ ๋์ฑ ๊ฐ์ ํ๊ธฐ ์ํด CSS ๋ชจ๋ ๋๋ CSS-in-JS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ๊ตฌ์ฑ ์์ ์์ค ์คํ์ผ ์ง์ ๋ฐ ์๋ CSS ๋ฒ์ ์ง์ ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
CSS ๋ชจ๋: ๊ฐ CSS ๋ชจ๋์ ๊ณ ์ ํ ํด๋์ค ์ด๋ฆ์ ์์ฑํ์ฌ ์ด๋ฆ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ์ฝ๋ ๊ฒฉ๋ฆฌ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
CSS-in-JS: JavaScript ์ฝ๋์์ ์ง์ CSS๋ฅผ ์์ฑํ์ฌ ๋์ ์คํ์ผ ์ง์ ์ ํ์ฉํ๊ณ JavaScript ๊ตฌ์ฑ ์์์ ๋ ๋์ ํตํฉ์ ์ ๊ณตํฉ๋๋ค.
์์: Styled Components, Emotion
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: ๋์ ์์ค์ ์ฝ๋ ๊ตฌ์ฑ ๋ฐ ๊ตฌ์ฑ ์์ ์์ค ์คํ์ผ ์ง์ ์ ํ์๋ก ํ๋ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ CSS ๋ชจ๋ ๋๋ CSS-in-JS๋ฅผ ํ์ํ์ญ์์ค.
10. CSS์์ ์ฌ์ฉ๋๋ ์ด๋ฏธ์ง ์ต์ ํ
CSS๊ฐ ์ด๋ฏธ์ง(์: ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ์ด๋ฏธ์ง๋ฅผ ์ต์ ํํ๋ ๊ฒ๋ ์ ์ฒด์ ์ธ ์ฑ๋ฅ์ ์ค์ํฉ๋๋ค. ์ต์ ํ๋ ์ด๋ฏธ์ง ํ์(WebP, AVIF)์ ์ฌ์ฉํ๊ณ , ์ด๋ฏธ์ง๋ฅผ ์์ถํ๊ณ , CSS ์คํ๋ผ์ดํธ ๋๋ ์์ด์ฝ ๊ธ๊ผด์ ์ฌ์ฉํ์ฌ HTTP ์์ฒญ ์๋ฅผ ์ค์ ๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก:
- ์ต์ ํ๋ ์ด๋ฏธ์ง ํ์ ์ฌ์ฉ: WebP ๋ฐ AVIF๋ JPEG ๋ฐ PNG์ ๋นํด ๋ฐ์ด๋ ์์ถ์ ์ ๊ณตํฉ๋๋ค.
- ์ด๋ฏธ์ง ์์ถ: TinyPNG ๋๋ ImageOptim๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ง ์์ค ์์ด ์ด๋ฏธ์ง๋ฅผ ์์ถํฉ๋๋ค.
- CSS ์คํ๋ผ์ดํธ ์ฌ์ฉ: ์ฌ๋ฌ ์์ ์ด๋ฏธ์ง๋ฅผ ๋จ์ผ ์ด๋ฏธ์ง๋ก ๊ฒฐํฉํ๊ณ CSS `background-position`์ ์ฌ์ฉํ์ฌ ์ํ๋ ๋ถ๋ถ์ ํ์ํฉ๋๋ค.
- ์์ด์ฝ ๊ธ๊ผด ์ฌ์ฉ: Font Awesome ๋๋ Material Icons์ ๊ฐ์ ์์ด์ฝ ๊ธ๊ผด์ ์ฌ์ฉํ์ฌ ์์ด์ฝ์ ๋ฒกํฐ๋ก ํ์ํ์ฌ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ํ์ฅ์ฑ์ ํฅ์์ํต๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: CSS์์ ์ฌ์ฉ๋๋ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ์ต์ ํํ์ฌ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
CSS ์ต์ ํ๋ฅผ ์ํ ๋๊ตฌ
๋ช ๊ฐ์ง ๋๊ตฌ๊ฐ CSS ์ต์ ํ๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
- CSS ์ถ์๊ธฐ: CSS Minifier, Minify Code
- UnCSS: ์ฌ์ฉํ์ง ์๋ CSS๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- PurifyCSS: ์ฌ์ฉํ์ง ์๋ CSS๋ฅผ ์ ๊ฑฐํ๊ณ JavaScript ํ๋ ์์ํฌ์ ํจ๊ป ์๋ํฉ๋๋ค.
- Chrome DevTools Coverage: ์ฌ์ฉํ์ง ์๋ CSS ๊ท์น์ ์๋ณํฉ๋๋ค.
- CSS ์ ์ฒ๋ฆฌ๊ธฐ: Sass, Less, Stylus
- CSS ๋ชจ๋: ๊ตฌ์ฑ ์์ ์์ค ์คํ์ผ ์ง์ ์ ์ํ ๊ฒ์ ๋๋ค.
- CSS-in-JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ: Styled Components, Emotion
- ์จ๋ผ์ธ ์ด๋ฏธ์ง ์ต์ ํ๊ธฐ: TinyPNG, ImageOptim
- ์น์ฌ์ดํธ ์๋ ํ ์คํธ ๋๊ตฌ: Google PageSpeed Insights, WebPageTest, GTmetrix
ํ ์คํธ ๋ฐ ๋ชจ๋ํฐ๋ง
CSS ์ต์ ํ ๊ธฐ์ ์ ๊ตฌํํ ํ์๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ํ๋ ํจ๊ณผ๋ฅผ ๋ด๊ณ ์๋์ง ํ์ธํ๊ธฐ ์ํด ์น์ฌ์ดํธ์ ์ฑ๋ฅ์ ํ ์คํธํ๊ณ ๋ชจ๋ํฐ๋งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋๊ตฌ:
- Google PageSpeed Insights: ์น์ฌ์ดํธ ์๋ ๋ฐ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํ ๊ถ์ฅ ์ฌํญ์ ์ ๊ณตํฉ๋๋ค.
- WebPageTest: ์์ธํ ์ฑ๋ฅ ๋ถ์ ๋ฐ ์ํฐํด ์ฐจํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- GTmetrix: ํฌ๊ด์ ์ธ ์ฑ๋ฅ ๊ฐ์๋ฅผ ์ํด PageSpeed Insights ๋ฐ YSlow ์ ์๋ฅผ ๊ฒฐํฉํฉ๋๋ค.
- Lighthouse(Chrome DevTools): ์น์ฌ์ดํธ ์ฑ๋ฅ, ์ ๊ทผ์ฑ ๋ฐ SEO๋ฅผ ๊ฐ์ฌํฉ๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: ์ด๋ฌํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ์ ์ฑ๋ฅ์ ์ ๊ธฐ์ ์ผ๋ก ํ ์คํธํ๊ณ ๋ชจ๋ํฐ๋งํ์ฌ ๊ฐ์ ์์ญ์ ์๋ณํ๊ณ ์ต์ ํ ๋ ธ๋ ฅ์ด ๊ฒฐ์ค์ ๋งบ๋๋ก ํฉ๋๋ค.
๊ฒฐ๋ก
CSS ์ต์ ํ๋ ์ธ๋ถ ์ฌํญ์ ๋ํ ์ฃผ์์ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์ฝ์์ด ํ์ํ ์ง์์ ์ธ ํ๋ก์ธ์ค์ ๋๋ค. ์ด ๊ฐ์ด๋์ ์ค๋ช ๋ ๊ธฐ์ ๊ณผ ๋๊ตฌ๋ฅผ ๊ตฌํํ๋ฉด ์น์ฌ์ดํธ์ ์ฑ๋ฅ์ ํฌ๊ฒ ๊ฐ์ ํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๋ฉฐ ๊ฒ์ ์์ง ์์๋ฅผ ๋์ผ ์ ์์ต๋๋ค. CSS๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๊ฐ์ฌํ๊ณ , ๋ณ๊ฒฝ ์ฌํญ์ ํ ์คํธํ๊ณ , ์ต์ ์ต์ ํ ๊ธฐ์ ์ ์ต์ ์ํ๋ก ์ ์งํ์ฌ ์น์ฌ์ดํธ๊ฐ ๋น ๋ฅด๊ณ ํจ์จ์ ์ด๋ฉฐ ์ฌ์ฉ์ ์นํ์ ์ธ ์ํ๋ฅผ ์ ์งํ๋๋ก ํ์ญ์์ค.
ํ์ผ ํฌ๊ธฐ๋ฅผ ์ต์ํํ๊ณ , ์ ํ์๋ฅผ ์ต์ ํํ๊ณ , ์ ๊ณต์ ๊ฐ์ํํ๋ ๋ฐ ์ง์คํจ์ผ๋ก์จ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ํํ๊ณ ๋งค๋ ฅ์ ์ธ ๊ฒฝํ์ ์ ๊ณตํ๋ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ฌํ ์ฑ๋ฅ์ ๋ํ ์ฝ์์ ์ฌ์ฉ์ ๋ง์กฑ๋ ํฅ์, ์ ํ์จ ์ฆ๊ฐ ๋ฐ ๊ฐ๋ ฅํ ์จ๋ผ์ธ ์กด์ฌ๊ฐ๊ณผ ๊ฐ์ ๊ฐ์์ ์ธ ์ด์ ์ผ๋ก ์ด์ด์ง ๊ฒ์ ๋๋ค.