๐ŸŽฉ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ•ํ™” Scss ๋ฏน์Šค์ธ! ๐ŸŽฉ ๊ฐœ๋… ์„ค๋ช…

2968 ๋‹จ์–ด javascriptsaasdiscusscss
๋‹ค์Œ ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” CSS @apply๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์—ฌ๊ธฐ์—์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๋‚ด์šฉ์„ ๊ฐ•ํ™”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ œ์•ˆ :(

์ „ํ†ต์ ์ธ ์›น ๊ฐœ๋ฐœ ํ๋ฆ„



์ „ํ†ต์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” 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 ๋ณ€์ˆ˜์˜ ๋ฃจํŠธ๋ฅผ ์Šคํฌ๋žฉํ•˜๊ณ  ์ด์ œ ์ด ์„ ํƒ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์ด ์‹œ๋ฆฌ์ฆˆ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ํ™•์ธํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์ฐจ์ด์ ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ