Untitled

๐Ÿ˜‰ ํ—ท๊ฐˆ๋ ธ๋˜ & ๋ชฐ๋ž๋˜ ๋ถ€๋ถ„๋“ค๋งŒ ์ •๋ฆฌํ•˜๋Š” ๋‚˜๋งŒ์˜ TIL
๐Ÿ˜ฏ ๋ชจ๋“  ๊ฐ•์˜ ๋‚ด์šฉ์€ ์ ์ง€ ์•Š์•„์š”!

์˜ค๋Š˜์˜ ์†Œ๊ฐ์€?
์•„๋‹ˆ์•„๋‹ˆ ์ž ์‹œ๋งŒ JavaScript ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์„ ๋‹ค์‹œ ๋ฐฐ์šฐ๋Š” ๋Š๋‚Œ์ด์—์š”.
SCSS ๋ญ์•ผ .. ์Šคํƒ€์ผ๊ฒŒ์˜ ํ˜๋ช…์ธ๋ฐ์š”?
์ด๊ฑธ ์ €๋งŒ ๋ชฐ๋ž๋‹ค๊ตฌ์š”???? ์ €๋งŒ ์ค‘์ฒฉ๋ฌธ ์•ˆ์“ฐ๊ณ  ์ผ์ผํžˆ ๋‹ค ์ž‘์„ฑํ•˜๊ณ  ์žˆ์—ˆ์–ด์š”??!!???!!!??
๋” ์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค..




[1] Sass(SCSS)

Sass(SCSS)๋Š” CSS Preprocessor์ž…๋‹ˆ๋‹ค.


Sass์™€ SCSS๋Š” ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‹จ๊ณผ ๊ฐ™์ด SCSS๋Š” ์ค‘๊ด„ํ˜ธ๋กœ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ, ์„ธ๋ฏธ์ฝœ๋ก  ์‚ฌ์šฉ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ

Sass๋Š” ์ค‘๊ด„ํ˜ธ์™€ ์„ธ๋ฏธ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋“ค์—ฌ์“ฐ๊ธฐ ๊ฐœ๋…์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

/* SCSS Syntex */
nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  li {
    display: inline-block;
  }

  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}
/* Sass Syntex */
nav
  ul
    margin: 0
    padding: 0
    list-style: none

  li
    display: inline-block

  a
    display: block
    padding: 6px 12px
    text-decoration: none


[1-1] ์ฃผ์„, ์ค‘์ฒฉ

SCSS๋Š” ๊ธฐ์กด์˜ CSS์™€ ์ฃผ์„ ํ˜•ํƒœ๊ฐ€ ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

// ํ˜•ํƒœ์˜ ์ฃผ์„์„ ํ•˜๋‚˜ ๋” ์ œ๊ณตํ•˜๋ฉฐ, ํ•ด๋‹น ์ฃผ์„์€ ์ปดํŒŒ์ผ ๋œ ๊ฒฐ๊ณผ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


[1] ์ฃผ์„

Untitled 1

Sass์˜ ๊ฒฝ์šฐ, ์—ฌ๋Ÿฌ ์ค„ ์ฃผ์„์„ ์‚ฌ์šฉํ•  ๋•Œ ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ์ƒ๋‹นํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Untitled 2


[2] ์ค‘์ฒฉ

SCSS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ์œ„ ์š”์†Œ์˜ ๋ฐ˜๋ณต์ ์ธ ์ž‘์„ฑ์„, ์ค‘์ฒฉ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Untitled 3

์ด๋•Œ &๋Š” ์ƒ์œ„ ์„ ํƒ์ž์˜ ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

Untitled 4

&๋ถ€๋ถ„์— ์ƒ์œ„ ์š”์†Œ๊ฐ€ ๊ธฐ์ž…๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋˜ํ•œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋Š” ์•ž์— $๊ธฐํ˜ธ๊ฐ€ ๋ถ™์Šต๋‹ˆ๋‹ค.

๋‹จ ๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Untitled 5

์Šค์ฝ”ํ”„ ๋‚ด์˜ ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ์š”์†Œ์— ์ƒ์œ„ ์„ ํƒ์ž๊ฐ€ ๋ถ™๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด @at-root ๋ผ๋Š” ๊ทœ์น™์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Untitled 6


๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋“ฏ, ์†์„ฑ์˜ ์ด๋ฆ„์ด ๊ฒน์น  ๊ฒฝ์šฐ์—๋„ ๋“ค์—ฌ์“ฐ๊ธฐ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Untitled 7

๋“ค์—ฌ์“ฐ๊ธฐ์™€ ์ƒ์œ„ ์†์„ฑ์ด ํ•ฉ์ณ์ ธ ํ•˜๋‚˜์˜ ์™„์„ฑ๋œ ์†์„ฑ๋“ค์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์—ฌ๋Ÿฌ ์„ ํƒ์ž๋ฅผ ํ•œ๋ฒˆ์— ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Untitled 8

์ž๋™์œผ๋กœ ul์˜ ํ•˜์œ„ ์š”์†Œ๋“ค, ol์˜ ํ•˜์œ„ ์š”์†Œ๋“ค๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


[1-2] ๋ณ€์ˆ˜, ๋ฐ์ดํ„ฐ, ์—ฐ์‚ฐ์ž

[1] ๋ณ€์ˆ˜

์œ„์—์„œ๋„ ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ดค๋“ฏ์ด, $๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€์ˆ˜๋Š” ์žฌํ• ๋‹น์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

.box-a {
  $h: 200px; // ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋Š” ์ž์‹ ์ด ์„ ์–ธ๋œ ๋ธ”๋ก ์•ˆ์—์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.
  width: $w;
  height: $h;
  margin: $w;
}


  • !global

!global์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„๋ฅผ ์ „์—ญ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์žฌํ• ๋‹น ๋ณ€์ˆ˜๋ฅผ !global์œผ๋กœ ์ง€์ •ํ•  ๊ฒฝ์šฐ, ํ•˜์œ„ ๋ถ€๋ถ„์—์„œ๋Š” ์ „๋ถ€ ํ•ด๋‹น ๊ฐ’์œผ๋กœ ๋ฎ์—ฌ์”Œ์›Œ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

.box-a {
  $h: 200px !global;
  width: $w;
  height: $h;
  margin: $w;
}
.box-b {
  height: $h;
}
.box-a {
  width: 100px;
  height: 200px;
  margin: 100px;
}

.box-b {
  height: 200px; /* ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์š”์†Œ ๋ฐ–์˜ ๋‹ค๋ฅธ ์š”์†Œ์—์„œ๋„ $h๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. */
}


  • !default

์žฌํ• ๋‹น ์‹œ, ํ•ด๋‹น ์ „์—ญ ๊ฐ’์„ ์œ ์ง€์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ !default๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$primary: blue;

.box {
  $primary: orange !default; // ๋งŒ์•ฝ default๊ฐ’์ด ์—†์œผ๋ฉด orange๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
  background-color: $primary;
}
.box {
  background-color: blue;
}


  • ๋ณด๊ฐ„

๋ณด๊ฐ„์€ ๋ณ€์ˆ˜ ํ• ๋‹น๊ณผ ๋น„์Šทํ•˜๋ฉฐ #{๋ณ€์ˆ˜๋ช…}์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์š”์†Œ ์ด๋ฆ„ ์ฆ‰ ์ผ๋ฐ˜์ ์ธ ๋ชจ๋“  ๋ฌธ์ž์—ด์— ๋„ฃ์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Untitled 9


[2] ๋ฐ์ดํ„ฐ

SCSS์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ(๋ณ€์ˆ˜)์—๋Š” ์—ฌ๋Ÿฌ ํ˜•์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

// Numbers
$number1: 1;
$number2: 0.82;
$number3: 20px;
$number4: 2fr;

// Strings
$string1: bold;
$string2: absolute;
$string3: "assets/images/";

// Colors
$color1: blue;
$color2: yellowgreen;
$color3: rgba(255, 0, 0, 0.5);
$color4: #ffff00;

// Booleans
$boolean1: true;
$boolean2: false;

// Null
$null: null;

// Lists
$list1: (10px, 20px, 30px);
$list2: 10px, 20px, 30px;
$list3: 10px 20px 30px;
$list4: apple banana cherry;

// Maps
$map1: (
  key: value,
);
$map2: (
  a: apple,
  b: banana,
  c: cherry,
);


[3] ์—ฐ์‚ฐ์ž

  • ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž

SCSS์—์„œ๋Š” ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž(+, -, *, /, %)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ /์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๋ณดํ†ต CSS์—์„œ๋Š” background, font์™€ ๊ฐ™์ด ๋‘ ๊ฐœ ์ด์ƒ์˜ ์†์„ฑ ๊ฐ’์„ ํ•œ๋ฒˆ์— ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

/* background-position: 100px 100px;
background-size: 200px 200px; */
background: 100px 100px / 200px 200px;
/* font-size: 10px;
line-height: 32px; */
font: 16px / 32px serif;

์ด๋•Œ๋„ ๊ตฌ๋ถ„์ž๋กœ /๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ๋”ฐ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค.

/* 1. ์†Œ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ๊ธฐ (๊ถŒ์žฅ) */
top: (20px / 2);

/* 2. ๋ณ€์ˆ˜ ์‚ฌ์šฉ */
$a: 20px;
top: $a / 2;

/* 3. ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž์™€ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉ */
top: 20px / 2 + 0px;


  • calc()

๋‹จ์œ„๊ฐ€ ๋‹ค๋ฅธ ๊ฐ’๋“ค์˜ ์—ฐ์‚ฐ์ž ์ด์šฉ์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

left: calc(
  100% - 50px
); // 100%์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์—์„œ 50px ๋บ€ ๊ฐ’์ด left์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.


  • ๋น„๊ต ์—ฐ์‚ฐ์ž

SCSS์—์„œ ๋น„๊ต ์—ฐ์‚ฐ์ž(==, โ‰ , <, >, โ‰ค, โ‰ฅ)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์กฐ๊ฑด๋ฌธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

.box {
  $w: 100px;
  @if ($w == 100px) {
    width: $w;
  } @else {
    width: 200px;
  }
}


  • ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž

SCSS์—์„œ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž(and, or, not)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

.box {
  $w: 100px;
  $h: 200px;
  $b: false;
  @if (not $b and $h >= 100px) {
    width: $w;
    height: $h;
  }
}


[1-3] @mixin

@mixin๊ณผ @include๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฌํ™œ์šฉ ํ•  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Untitled 10

large-text์•ˆ์˜ ๋ชจ๋“  ์Šคํƒ€์ผ์ด box-a์— ์ ์šฉ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋˜ํ•œ ๋งˆ์น˜ JS์˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ, ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

box-a์˜ ํฐํŠธ ์‚ฌ์ด์ฆˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ 20px, box-b๋Š” 40px์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Untitled 11

์ด๋•Œ ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mixin large-text($size: 30px) {
  font-size: $size;
  font-weight: bold;
  font-family: sans-serif;
  color: tomato;
}

.box-a {
  width: 100px;
  height: 100px;
  @include large-text; // ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ $size์˜ ๊ธฐ๋ณธ๊ฐ’์ธ 30px๊ฐ€ ์ง€์ •
}

@mixin์œผ๋กœ ์ž‘์„ฑ๋œ ์žฌํ™œ์šฉ ์ฝ”๋“œ๋Š” ์ค‘์ฒฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

@mixin reset-margin {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

@mixin section {
  font-size: 20px;
  line-height: 1.4;
  color: blue;
  h1 {
    font-size: 40px;
    font-weight: bold;
    @include reset-margin;
    // mixin์œผ๋กœ ์ž‘์„ฑ๋œ ์žฌํ™œ์šฉ ์ฝ”๋“œ ์•ˆ์—์„œ, ๋‹ค๋ฅธ ์žฌํ™œ์šฉ ์ฝ”๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    &::after {
      content: "!!";
    }
  }
}


[1] ๊ฐ€๋ณ€ ์ธ์ˆ˜

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜ฌ ๊ฐ’์˜ ๊ฐฏ์ˆ˜๋ฅผ ์˜ˆ์ธกํ•˜์ง€ ๋ชปํ•  ๋•Œ, ๊ฐ€๋ณ€ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mixin bg($w, $h, $b...) {
  // ...๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  width: $w;
  height: $h;
  background: $b;
}

.box {
  @include bg(
    100px,
    200px,
    url("/images/a.png") no-repeat center,
    url("/images/b.png") repeat x,
    url("/images/c.png") repeat-y center / contain
  );
}

๋˜ํ•œ JS์˜ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์˜ ๊ฐœ๋…์ฒ˜๋Ÿผ, ํ•ด๋‹น ๊ฐ€๋ณ€ ์ธ์ˆ˜์˜ ๊ฐ’๋“ค์„ ํ•˜๋‚˜์”ฉ ํ• ๋‹น๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mixin spread($t, $r, $b, $l) {
  margin-top: $t;
  margin-right: $r;
  margin-bottom: $b;
  margin-left: $l;
}

.box {
  $m: 10px 20px 30px 40px;
  @include spread($m...); // ...๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
}

๋”ฐ๋ผ์„œ JS์˜ ์ „๊ฐœ ์—ฐ์‚ฐ์ž์ฒ˜๋Ÿผ ...์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


[2] ํ‚ค์›Œ๋“œ ์ธ์ˆ˜

mixin๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ํŠน์ • ๋งค๊ฐœ๋ณ€์ˆ˜์—๋งŒ ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์œผ๋ฉด ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mixin pos($p, $t: null, $r: null, $b: null, $l: null) {
  position: $p;
  top: $t;
  right: $r;
  bottom: $b;
  left: $l;
}

.absolute {
  width: 100px;
  height: 100px;
  @include pos(absolute, $t: 100px, $l: 50px);
}


[3] @content

mixin์„ ์‚ฌ์šฉํ•  ๋•Œ, ๋’ค์ชฝ์— ์ ์€ ์ค‘๊ด„ํ˜ธ ์‚ฌ์ด์˜ ์ถ”๊ฐ€์ ์ธ ์Šคํƒ€์ผ๋“ค์„ @content๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŠน์ • ์œ„์น˜์— ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mixin icon($url) {
  &::after {
    content: url($url);
    @content; // ์ด๊ณณ์— ์‚ฝ์ž…
  }
}

.box {
  @include icon("/images/icon.png") {
    // ์ถ”๊ฐ€์ ์ธ ์Šคํƒ€์ผ ๋ช…์‹œ
    position: absolute;
    top: 0;
    left: 50px;
  }
}

๋ฐ˜๋Œ€๋กœ ๊ฐ’์„ ๊บผ๋‚ด์˜ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

... @media all and (max-width: map.get($breakpoints, $name)) {
  @content (777); // 777์„ ์ „๋‹ฌํ•ด์ค๋‹ˆ๋‹ค.
}
...

// using ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ $c์— ํ•ด๋‹น @content์—์„œ ์ „๋‹ฌ๋œ ๋ณ€์ˆ˜๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
@include media(lg) using($c) {
  width: 300px;
  height: 300px;
  _debug: $c;
}

Untitled 12


  • โ€œsass:mapโ€ module

๋‹ค์Œ ์‹œ๊ฐ„์— ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณผ ๋ถ€๋ถ„์ด์ง€๋งŒ, ๊ฐ„๋žตํ•˜๊ฒŒ map์œผ๋กœ ์ž‘์„ฑ๋œ SCSS map๋“ค์˜ ๊ฐ value๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

map.get(map ๊ฐ์ฒด, ํ‚ค๊ฐ’)๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@use "sass:map";

@mixin media($name) {
  $breakpoints: (
    sm: 576px,
    md: 992px,
    lg: 1400px,
  );
  @media all and (max-width: map.get($breakpoints, $name)) {
    @content; // ์ถ”๊ฐ€์ ์œผ๋กœ ์ž…๋ ฅํ•œ ์Šคํƒ€์ผ ๋ธ”๋ก์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  }
}

.box {
  width: 400px;
  height: 400px;

  @include media(lg) {
    width: 300px;
    height: 300px;
  }
  @include media(md) {
    width: 200px;
    height: 200px;
  }
  @include media(sm) {
    width: 100px;
    height: 100px;
  }
}
.box {
  width: 400px;
  height: 400px;
}
@media all and (max-width: 1400px) {
  .box {
    width: 300px;
    height: 300px;
  }
}
@media all and (max-width: 992px) {
  .box {
    width: 200px;
    height: 200px;
  }
}
@media all and (max-width: 576px) {
  .box {
    width: 100px;
    height: 100px;
  }
}

@media all and (max-width: 992px) {
  .section {
    width: 450px;
  }
}

๊ฐ ์š”์†Œ ์•ˆ์— ์ถ”๊ฐ€๋กœ ์ž…๋ ฅํ•œ ์Šคํƒ€์ผ ๋ธ”๋ก์ด ์ž˜ ์ ์šฉ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


[1-4] Sass @include, @mixin

Sass์—์„œ์˜ @include๋Š” +๊ธฐํ˜ธ์ด๋ฉฐ @mixin์€ =๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@mixin icon($url) {
  &::after {
    content: url($url);
  }
}

.box {
  @include icon("/images/icon.png");
}
=icon($url)
  &::after
    content: url($url)

.box
  +icon("/images/icon.png")





์ถœ์ฒ˜

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

sass-lang document

์นดํ…Œ๊ณ ๋ฆฌ: ,

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ