๐ฉ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐํ Scss ๋ฏน์ค์ธ! ๐ฉ ๊ฐ๋ ์ค๋ช
2968 ๋จ์ด javascriptsaasdiscusscss
์ ํต์ ์ธ ์น ๊ฐ๋ฐ ํ๋ฆ
์ ํต์ ์ผ๋ก ์ฐ๋ฆฌ๋ css๋ฅผ ์ฌ์ฉํ์ฌ ์น ํ์ด์ง์ ์คํ์ผ์ ์ง์ ํ๊ณ ๋์ค์ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋ง์ ์คํ์ผ์ ์ถ๊ฐํฉ๋๋ค. ์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์์์ ํด๋์ค๋ฅผ ์ค๊ฐ์๋ก ์ถ๊ฐํ์ฌ ์๋ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์คํ์ผ ์ธ์๋ JavaScript ๋ด์์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ธฐํ ์ฌ๋ฌ ๊ฐ์ง๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ฐ๋ ค์ ๋ถ๋ฆฌ๋ JavaScript๊ฐ ์ค์ ๋ก ์์ฉ ํ๋ก๊ทธ๋จ์ ์คํ์ผ์ ์ง์ ํ๋ค๋ ์ฌ์ค์ ๋ํ ์ผ์ข ์ ์ผ๋ฒ๋ฌด๋ฆผ์ด๋ฉฐ ์์ ์ ์๋ css ๋ฐ css๋ง์ ์ํ ๊ฒ์ด์์ต๋๋ค.
css๋ ํ์คํ ์ด๋ ์ ๋ JavaScript๋งํผ ์ข์ ์ ์๋ ๋ฏธ์น ํ์ ๊ฐ์ง๊ณ ์์ง๋ง(์ ๋ง ์๋ฆฌํ ์์ ์๋ ์ ์ฒ๋ฆฌ๊ธฐ๊ฐ ํ์ํจ) ์ผ๋ฐ์ ์ผ๋ก JavaScript์๋ css๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ ๊ฐ๋ ฅํ API๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํจ์ฌ ๋.
์ ํต์ ์ธ ๋ชจ๋ธ์ ์ด๋ ๊ฒ ์๊ฒผ์ต๋๋ค.
Houdini
CSS๋ dom๊ณผ ๋ํํ๊ณ , JavaScript๋ dom๊ณผ ๋ํํ๊ณ , JavaScript๋ ๋ ๋ง์ ํด๋์ค๋ ์คํ์ผ์ ์ถ๊ฐํ๊ณ , CSS๋ ๋ฏธ๋ ์์ ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์์ฑ๋์๊ธฐ ๋๋ฌธ์ ์ํ ๋ณ๊ฒฝ์ ์ฒ๋ฆฌํ ์ค๋น๊ฐ ๋์ด ์์ง๋ง ์ค์ ๋ก ์ผ์ด๋๋ ๋ชจ๋ ์ผ์ JS๊ฐ dom์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ค. ์ฝ๊ฐ ๋นํจ์จ์ ์ ๋๋ค. ์๊ฐํด ๋ณด๋ฉด ์ฌ์ฉ์๊ฐ ์ ๋ ์ํธ ์์ฉํ์ง ์์ ์ ์๋ CSS์ ๋ชจ๋ ์ ์ฌ์ ์ํ์ ๋๋ค.
์น ์ ๋๋ฉ์ด์ API ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐํ Sass
๊ทธ๋์ ์ด ๊ธฐ์ ์๋ ์ด๋ฆ์ด ์์ต๋๋ค. (Jess, JavaScript ๊ฐํ ์คํ์ผ์ํธ) ์ฌ์ค ์ด๊ฒ์ ํจํด์ด๊ณ ์ค์ ๋ก sass์ ์ฐ๊ฒฐ๋์ด ์์ง๋ ์์ง๋ง ๋ชจ๋ ์ ์ฒ๋ฆฌ๊ธฐ์์ ์ํ๋ ์ ์์ผ๋ฉฐ ์๋ก์ด ๋๊ตฌ๊ฐ ์์ฑ๋์ด์ผ ํ ์๋ ์์ต๋๋ค. , ์ด๊ฒ์ ํจ๋ฌ๋ค์ ์ ํ์ ๋๋ค. ๊ทธ๋์ ํฅ๋ถ๋ฉ๋๋ค.
CSS ๋ณ์/์ฌ์ฉ์ ์ง์ ์์ฑ์ ์ด๋ฏธ ๊ฝค ๋ฐ์ด๋ ๊ธฐ๋ฅ์ ๋๋ค. ๋๋ sass๋ฅผ ์ฌ์ฉํ๊ณ CSS ๋ณ์๊ฐ ํ์ํ์ง ์๋ค๊ณ ์๊ฐํ์ง๋ง ๋งค์ฐ ๋ค๋ฅธ ๊ฒ์ ๋๋ค. ๊ทธ๋ ๊ฒ ์๊ฐํ๋ค๋ฉด ๋จธ๋ฆฌ์์ ๊บผ๋ด์ญ์์ค. CSS ๋ณ์๋ devtools์์ ๋ณ๊ฒฝํ๊ณ ํ UI๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ๋ณผ ๋์ ๊ฐ์ด ๋ผ์ด๋ธ์ ๋๋ค. ์ฌ์ค์ ๋ ์ด์ ์์์ ํด๋์ค์ ์คํ์ผ์ ์ง์ ํ๋ ๊ฒ์ด ์๋๋ผ ํ๋์ ๋ณ์์ ๋ถ๊ณผํฉ๋๋ค. ํ์ง๋ง ํ ๊ฑธ์ ๋ ๋์๊ฐ ์ ์์๊น์?
๋ฌผ๋ก ๋๋ต์ ์์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ค์ ๋ก JavaScript ๋ด์์ ์ง์ CSS ๋ณ์๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ค์ ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ช ๊ฐ์ง๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฒซ์งธ, CSS๋ ๋ ์ด์ ๋ฏธ๋์ ์์ ์ํ ๋ณ๊ฒฝ์ ์ฒ๋ฆฌํ์ง ์์ต๋๋ค. ์ค์๊ฐ์ ๋๋ค. JavaScript ์ด๋ฒคํธ์ ์ํด ํธ๋ฆฌ๊ฑฐ๋๋ฉฐ CSS ๊ฐ์ ์๋ฅผ ๋ค์ด ์คํฌ๋กค ์์น๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค. ๋๋ฐ! ์ด์ JavaScript๋ CSS์ Dom์ ๋ํ ์์ ํ ๊ถํ์ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์ JavaScript ๊ธฐ๋ฅ์ผ๋ก CSS๋ฅผ ํฅ์์ํฌ ์ ์๋ ํจํด์ด ์๋ค๋ฉด ์ด๋จ๊น์? CSS๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ์คํ์ผ ๋ก์ง์ ๋๋ฌด ํฌ๋ช ํ๊ฒ ์ ์ดํ์ฌ ๊ด์ฌ์ฌ๋ฅผ ๋ช ํํ๊ฒ ๊ตฌ๋ถํ ์ ์๋ค๋ฉด ์ด๋จ๊น์?
CSS๊ฐ JavaScript๋ฅผ ํธ์ถํ๊ณ dom์ ์คํ์ผ๋ฆฌ์ํ๊ฒ ์ํฅ์ ๋ฏธ์น ์ ์๋๋ก(๋๋ ์์์ ์ธ๊ธํ ๋ ๊ฐ๋ ฅํ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํฌํจํ์ฌ JavaScript์์ ๋ฌด์์ด๋ ํ ์ ์๋๋ก) ํ๋ฆ์ ๋ฐ๋๋ก ํ๋ ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค.
button {
// Allows only focus outline on keys
@include fucus(no-click);
}
๊ทธ๋ฐ ๋ค์ ๋ฏน์ค์ธ์ JavaScript๋ก ํธ๋์คํํฉ๋๋ค ๐งโโ๏ธ
Match media - aka media queries for JavaScript
๊ฐ๋จํ scss ๋ฏน์ค์ธ์ ํ์ผ๋ก ์ด๋ฏธ ํธ๋ฆฌํ๊ฒ ๊ฐ๋ฅํฉ๋๋ค. ์์ด๋์ด๋ ๊ฐ๋จํฉ๋๋ค. ์ฌ์ฉ๋ ์ ํ๊ธฐ๋ฅผ ์บก์ฒํ๋ ๋ฏน์ค์ธ์ ์์ฑํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ์ ํ๊ธฐ๋ ์์ฑ๋ CSS ๋ณ์
--#{key}: .my-selector;
์ ๊ณต๊ธ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ํค๋ ๊ณ ์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ์ ํธ์ถ๋ ๋ฏน์ค์ธ์ ์ค์๋ก ์ฌ์ ์ํ์ง ์๊ณ :root
์ ๋ ๋ง์ ๋ณ์๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. mixin์ ๋ ๋ฒ ์ด์ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค. scss guid๋ random(9*9*9*9)
์ ์ฌ์ฉํ์ฌ ์์ฑ๋์ด ๋ณต์ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋ฎ์ ๋งค์ฐ ํฐ ์๋ฅผ ๋ง๋ญ๋๋ค. ์ด์ ๋ฏน์ค์ธ ํธ์ถ์์ ์ ํ์ ๊ฐ์ด ํฌํจ๋ :root
์ ์์์ GUID๊ฐ ์์ต๋๋ค. ๋ค์์ผ๋ก ์ฐ๋ฆฌ๋ guid๋ฅผ ์ฌ์ฉํ์ฌ CSS ๋ณ์์ ๋ฃจํธ๋ฅผ ์คํฌ๋ฉํ๊ณ ์ด์ ์ด ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์๋ฅผ ๋ฐ๋ณตํ๊ณ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.์ด๊ฒ์ด ์๋ํ๋ ๊ฒ์ ๋ณด๊ณ ์ถ๋ค๋ฉด ์ด ์๋ฆฌ์ฆ์ ๋๋จธ์ง ๋ถ๋ถ์ ํ์ธํ๊ณ ์ฝ๋๋ฅผ ์ดํด๋ณด๊ณ ์ฐจ์ด์ ์ ํ์ธํ์ญ์์ค.
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฉ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐํ Scss ๋ฏน์ค์ธ! ๐ฉ ๊ฐ๋ ์ค๋ช ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/adam_cyclones/javascript-enhanced-scss-mixins-concepts-explained-3mpoํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค