IT/CSS

SCSS ๊ธฐ๋ณธ ์ •๋ฆฌ - SCSS, CSS, Sass 1

๋€จ๋ฟŒ๋€จ๋ฟŒ 2024. 2. 14. 16:22

๐Ÿ“Œ SCSS

  • SCSS๋Š” Sass3 ๋ฒ„์ „๋ถ€ํ„ฐ ์ƒˆ๋กญ๊ฒŒ ๋“ฑ์žฅ
  • SCSS๋Š” Sass์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” Superset
  • SCSS๋Š” CSS์™€ ๊ฑฐ์˜ ๋น„์Šทํ•œ ๋ฌธ๋ฒ•์œผ๋กœ Sass์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ํŽธ๋ฆฌํ•จ

๐Ÿ“š CSS์˜ ๋‹จ์ 

CSS๋Š” ๋ณต์žกํ•œ ์–ธ์–ด๋Š” ์•„๋‹ˆ์ง€๋งŒ ์ž‘์—…์ด ์ปค์ง€๊ฑฐ๋‚˜ ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋ถˆํŽธํ•จ์ด ์ƒ๊น€
-> ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ

  • ์„ ํƒ์ž(Selector)๋ฅผ ๋งŒ๋“ค๋•Œ ๋งค๋ฒˆ ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ชจ์š”์†Œ ์„ ํƒ์ž๋ฅผ ์ ์–ด์•ผ ํ•จ
  • funtion๊ฐ™์€๊ฒŒ ์—†์œผ๋‹ˆ, ๊ทœ๋ชจ๊ฐ€ ํฐ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ์ž๋™ํ™”ํ•˜๊ธฐ ์–ด๋ ต๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•จ
  • ๊ฒฐ๊ตญ์—๋Š” ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„ ์ฝ”๋“œ ์ค„์ˆ˜๊ฐ€ ๊ธธ์–ด์ ธ ์œ ์ง€๋ณด์ˆ˜์— ๋งˆ์ด๋„ˆ์Šค์ ์ธ ์š”์†Œ๊ฐ€ ๋จ

๐Ÿ“š SASS(Synthetically Awesome StyleSheets)

  • Sass๋Š” ์ฝ”๋“œ์˜ ์žฌํ™œ์šฉ์„ฑ์„ ์˜ฌ๋ฆฌ๊ณ , ๊ฐ€๋…์„ฑ์„ ์˜ฌ๋ฆฌ๋Š” ๋“ฑ CSS์—์„œ ๋ณด์ด๋˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ณ , ๊ฐœ๋ฐœ์˜ ํšจ์œจ์„ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ CSS ์ „์ฒ˜๋ฆฌ๊ธฐ ์–ธ์–ด์ž„
  • CSS๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉฐ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๋˜ํ•œ ์žˆ๋Š” ํ™•์žฅํŒ ์ŠคํŠธ๋ฆฝํŠธ ์–ธ์–ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ
CSS ์ „์ฒ˜๋ฆฌ๊ธฐ(Preprocessor) ์–ธ์–ด ๋ž€?
- Sass, Less, stylus ์ด๊ฒƒ๋“ค์ด ๋ฐ”๋กœ CSS ์ „์ฒ˜๋ฆฌ๊ธฐ
- ์ „์ฒ˜๋ฆฌ๊ธฐ ์–ธ์–ด๋Š” CSS ๋ฌธ๋ฒ•๊ณผ ๊ต‰์žฅํžˆ ์œ ์‚ฌํ•˜์ง€๋งŒ ์„ ํƒ์ž ์ค‘์ฒฉ(Nesting)์ด๋‚˜ ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ๋‹ค์–‘ํ•œ ๋‹จ์œ„(Unit)์˜ ์—ฐ์‚ฐ ๋“ฑ ํ‘œ์ค€ CSS ๋ณด๋‹ค ํ›จ์”ฌ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ.
=> ์ฝ”๋“œ ์ž‘์„œ์— ๋“œ๋Š” ์‹œ๊ฐ„์„ ์ค„์—ฌ์ฃผ๊ณ , ์ฝ”๋“œ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ๋„์›€์ด ๋จ
โ“์‚ฌ์šฉ๋ฒ•
- Sass, Less, Styleus ์™€ ๊ฐ™์€ ์ „์ฒ˜๋ฆฌ๊ธฐ ์–ธ์–ด๋Š” ์ง์ ‘ ๋™์ž‘์‹œํ‚ค๋Š”๊ฒŒ ์•„๋‹˜
  => why? ์›น์€ CSS๋ฐ–์— ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ
- ์šฐ์„  ์ „์ฒ˜๋ฆฌ๊ธฐ ์–ธ์–ด ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑ(์ฝ”๋”ฉ)ํ•˜๊ณ , CSS๋กœ ์ปดํŒŒ์ผํ•ด์„œ ์›น์œผ๋กœ ๋™์ž‘์‹œํ‚ค๋Š” ๊ฒƒ
   => ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ด€๊ณ„๋ผ๊ณ  ๋ด๋„ ๋ฌด๋ฐฉํ•จ

โœ… ์ „์ฒ˜๋ฆฌ๊ธฐ ์–ธ์–ด ์ฆ‰, Sass๋Š” CSS์˜ ๋Œ€์ฒด ์–ธ์–ด๊ฐ€ ์•„๋‹˜!!
     Sass๋Š” CSS์˜ ํ™•์žฅ ์ „์ฒ˜๋ฆฌ๊ธฐ ์–ธ์–ด์ด๊ณ , ์ด๋Š” ๊ฒฐ๊ตญ CSS ์ฝ”๋“œ๋ฅผ ์ƒ์‚ฐํ•ด๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ผ์ข…์˜ ๋„๊ตฌ์ธ ์…ˆ
     Sass๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฌธ๋ฒ•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๋‹ค์Œ, ์ด๋ฅผ ์ปดํŒŒ์ผํ•ด CSS ํŒŒ์ผ์„ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด Sass๋ฅผ ํ†ตํ•ด ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ๋งŒ๋“ฆ

โ—๏ธSass(SCSS)์˜ ์žฅ์ 

  • CSS๋ณด๋‹ค ์‹ฌํ”Œํ•œ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ CSS๋ฅผ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ํ‘œํ˜„ํ•  ์ˆ˜ ์ž‡์Œ
    -> ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์—ฌ์ฃผ์–ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง€๊ฒŒ ๋จ
  • ์Šคํ‚ฌ ๋ ˆ๋ฒจ์ด ๋‹ค๋ฅธ ํŒ€์›๋“ค๊ณผ์˜ ์ž‘์—… ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ์˜ ์ˆ˜์ค€ ์ฐจ์ด๋ฅผ ํ‰์ค€ํ™”ํ•  ์ˆ˜ ์žˆ์Œ
  • CSS์˜ ํ•œ๊ณ„๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด Sass๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ๊ณผ ์œ ์šฉํ•œ ๋„๊ตฌ๋“ค์„ ์ œ๊ณตํ•จ
    • ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ
    • ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ
    • Import (๋ชจ๋“ˆํ™”)
    • Nesting(์„ ํƒ์ž ๋ฐ˜๋ณต ์ž‘์„ฑ ์ค„์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ)
    • Mixin(ํ•จ์ˆ˜ ๊ฐœ๋…)
    • Extend / Inheritance(ํ™•์žฅ/์ƒ์†)
  • ์„ ํƒ์ž์˜ ์ค‘์ฒฉ(Nesting)์„ ํ†ตํ•ด ๋ฐ˜๋ณต๋˜๋Š” ๋ถ€๋ชจ์š”์†Œ ์„ ํƒ์ž ์‚ฌ์šฉ์„ ์ค„์ผ์ˆ˜ ์žˆ์Œ
  • ๋ณ€์ˆ˜(Variable)์„ ์‚ฌ์šฉํ•ด์„œ CSS ์†์„ฑ๊ฐ’์„ ํ†ต์ผํ•ด์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๋™์ ์œผ๋กœ CSS ๊ณค๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•จ
  • ์ƒ์†๋˜๋Š” ์„ ํƒ์ž๋ฅผ ๊ณ„์ธต์ ์œผ๋กœ ๋ช…์‹œํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต์  ์‚ฌ์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

โ—๏ธSass(SCSS)์˜ ๋‹จ์ 

  • ์ „์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์œ„ํ•œ ๋„๊ตฌ ํ•„์š”
  • ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์†Œ์š”

๐Ÿ“š Sass ์™€ SCSS์˜ ์ฐจ์ด์ 

  • Sass : ์ค‘๊ด„ํ˜ธ๊ฐ€ ์•„๋‹Œ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•จ
  • SCSS : CSS์ฒ˜๋Ÿผ {} ์™€ ;์„ ์‚ฌ์šฉํ•จ
/* SASS */
$color: red
$color2: pink

a
  color: $color
  &:hover
  	color: $color2

/* SCSS */
$color: red;
$color2: pink;

a {
  color: $color;
  &:hover {
  	color: $color2;
  }
}

/* CSS */
a {
  color: red;
}
  a:hover {
  	color: pink;
  }
  • ํ™•์žฅ์ž
    - *.scss / *.sass ํ™•์žฅ์ž์— ๋”ฐ๋ผ Sass ๋ฌธ๋ฒ•์œผ๋กœ ํ• ์ง€ SCSS๋กœ ํ• ์ง€ ๋‹ฌ๋ผ์ง
  • ๋ฏน์Šค์ธ(mixin)๋ฌธ๋ฒ•
    minxin(์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹)์ด ใ…‡ใ…†์Œ
    • Sass์˜ ๊ฒฝ์šฐ = ๋กœ ์„ ์–ธํ•˜๊ณ  + ๋กœ ์ ์šฉ์‹œํ‚ด
    • SCSS์˜ ๊ฒฝ์šฐ @mixin์œผ๋กœ ์„ ์–ธํ•˜๊ณ  @include๋กœ ์ ์šฉ์‹œํ‚ด
/* SASS */
@main-font: "..."

=title($font)
  font-size:30px
  font-family: $font
  
#header
  +title($main-font)

/* SCSS */
@main-font: "..."

@mixin title($font){
  font-size:30px;
  font-family: $font;
}

#header{
  @include title($main-font)
}

๐Ÿ“Œ  Sass ๋Œ€์‹  SCSS์“ฐ๋Š” ์ด์œ 

  • SCSS 2010๋…„ 5์›” ํฌ๋กฌ๋ฒ„์ „3๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด์„œ ๊ฐ–์ถฐ์ง„ ์ƒˆ๋กœ์šด ๋ฌธ๋ฒ• ์ฒด๊ณ„
  • CSS ๋ฌธ๋ฒ•์„ SCSS ๋ฌธ๋ฒ• ์•ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, CSS ํ•ต๊ณผ IE์˜ filter์™€ ๊ฐ™์€ ํŠน์ • ๋ธŒ๋ผ์šฐ์ € ๋ฒค๋”์šฉ ๋ฌธ๋ฒ•๋„ ํฌํ•จํ•˜์—ฌ CSS๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ๋ฌธ๋ฒ•๊ณผ ๊ธฐ๋Šฅ์„ SCSS์—์„œ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ์ด๋Ÿฌํ•œ ํ˜ธํ™˜์„ฑ ๋•์— ๋ชจ๋“  CSS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์ด์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๊ธฐ์กด CSS๋ฅผ SCSS๋กœ ์ „ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ

=> ์ „ ์„ธ๊ณ„์ ์œผ๋กœ SCSS ์‚ฌ์šฉ์ž ์ˆ˜, SCSS๋ฅผ ํ™œ์šฉํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ&ํ”„๋ ˆ์ž„์›Œํฌ ์ˆ˜๊ฐ€ SASS๋ณด๋‹ค ๋งŽ์Œ

  • ๊ณต์‹ ๋ฌธ๋ฒ•
    ๊ณต์‹ ๋ ˆํผ๋Ÿฐ์Šค๋Š” SCSS ๋ฌธ๋ฒ•์„ ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋“  ๋ฌธ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ณ  ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์คŒ
  • ๋” ๋„“์€ ์‚ฌ์šฉ์ž 
    ๋‹ค์ˆ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ SCSS๋ฌธ๋ฒ•์„ ํ™œ์šฉํ•˜๋Š” ๋“ฑ ์ƒˆ๋กœ์šด ๋ฌธ๋ฒ•์ด ๋”์šฑ ๋„๋ฆฌ ์“ฐ์ž„
  • CSS ํ˜ธํ™˜์„ฑ
    ์นœ๊ทผํ•œ CSS ๋ฌธ๋ฒ•์€ Sass์™€ CSS ์‚ฌ์ด์˜ ํ‹ˆ์„ ์ค„์—ฌ์ฃผ๊ณ , ๊ธฐ๋Šฅ์ ์œผ๋กœ๋„ ํ™•์ •์„ฑ์„ ๋†’์ž„
  • ์—ฌ๋Ÿฌ ์ค„ ์“ฐ๊ธฐ ์ง€์›
    Sass ๋ฌธ๋ฒ•์€ ๋“ค์—ฌ์“ฐ๊ธฐ์™€ ์ค„ ๋ฐ”๊ฟˆ์ด ๋ฌธ๋ฒ•์˜ ์ค‘์š”ํ•œ ์š”์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ์ค„ ์“ฐ๊ธฐ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Œ
โ—๏ธโ—๏ธbut, ์™„์ „ํžˆ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋Š ๊ฒƒ์„ ์‚ฌ์šฉํ• ์ง€๋Š” ํŒŒ์ด์ฌ ๊ตฌ๋ฌธ ์Šคํƒ€์ผ์— ์ต์ˆ™ํ•˜๋ฉด Sass๋ฅผ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ตฌ๋ฌธ ์Šคํƒ€์ผ์— ์ต์ˆ™ํ•˜๋ฉด SCSS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋จ

'IT > CSS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

::before, ::after ๊ฐ€์ƒ ์š”์†Œ(Pseudo-elements)  (0) 2024.01.31