header-img
Info :
728x90

 

CSS ์ „์ฒ˜๋ฆฌ๊ธฐ SCSS

SCSS ๋ž€?

Sassy CSS ์˜ ์ค„์ž„๋ง๋กœ (๋ฌธ๋ฒ•์ ์œผ๋กœ) ๋ฉ‹์ง„ CSS ๋ผ๋Š” ๋œป์ธ๋“ฏ.. 

์ •ํ™•ํžˆ๋Š” CSS์˜ ๋ฉ”ํƒ€์–ธ์–ด. (= CSS์— ๋Œ€ํ•ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•œ ์–ธ์–ด)

 

์ฝ”๋“œ์˜ ์žฌํ™œ์šฉ์„ฑ์„ ์˜ฌ๋ฆฌ๊ณ , ๊ฐ€๋…์„ฑ์„ ์˜ฌ๋ฆฌ๋Š” ๋“ฑ์˜ CSS์—์„œ ๋ณด์ด๋˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ณ , ๊ฐœ๋ฐœ์˜ ํšจ์œจ์„ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๊ฐœ๋….

์ „์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์œ„ํ•œ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•จ, ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์†Œ์š” ๋“ฑ์˜ ๋‹จ์ ์ด ์žˆ์ง€๋งŒ ๊ทธ ์™ธ์˜ ์žฅ์ ์ด ๋ช…ํ™•ํ•œ ํŽธ์ด์–ด์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋จ.

 

SASS ์™€ SCSS์˜ ์ฐจ์ด?

SASS(Syntactically Awesome Style Sheets) ๋ฌธ๋ฒ•์€ CSS์™€ ํ˜•ํƒœ๊ฐ€ ๋‹ฌ๋ผ ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ์กด์žฌ.

(๊ธฐ์กด CSS์™€๋Š” ๋‹ฌ๋ฆฌ ์ฝœ๋ก ์ด๋‚˜ ๊ด„ํ˜ธ ๋“ฑ์ด ์ƒ๋žต๋œ ๋ถ€๋ถ„์ด ๋งŽ์•„ ์ฒ˜์Œ ์ ‘ํ•˜๋ฉด ์ต์ˆ™ํ•ด์ง€๋Š” ๋ฐ์— ์‹œ๊ฐ„์ด ์†Œ์š”๋จ. ๊ธฐ์กด CSS ๋ฌธ๋ฒ•์„ ์ง€์›ํ•ด์ฃผ๋Š” ๊ฒƒ๋„ ์•„๋‹˜.)

SASS์˜ ๋ฌธ๋ฒ•์„ ๋ณด์™„ํ•˜๊ณ ์ž ๋‚˜์˜จ ๊ฒŒ SCSS.

CSS์˜ ์Šˆํผ์…‹(superset)์ด๊ธฐ ๋•Œ๋ฌธ์— CSS ๋ฌธ๋ฒ• ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด๋„ ์ ์šฉ์ด ์ž˜ ๋˜๊ณ , ๋ฌธ๋ฒ• ๋˜ํ•œ CSS์™€ ๋‹ค๋ฅด์ง€ ์•Š์Œ.

 

 

์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ

๋ณ€์ˆ˜(Variable) ํ• ๋‹น

/* CSS */
body {
  font: 100% Helvetica, sans-serif;
  color: #333;
}

/* SCSS */
$font-stack: Helvetica, sans-serif;
$primary-color: #333;

body {
  font: 100% $font-stack;
  color: $primary-color;
}

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ƒ‰์ด๋‚˜ ํฐํŠธ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•ด์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

 

์ค‘์ฒฉ(Nesting) ๊ตฌ๋ฌธ

/* CSS */
nav ul {
  margin: 0;
  padding: 0;
  list-style: none;
}
nav li {
  display: inline-block;
}

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

  li { display: inline-block; }
}

์ค‘์ฒฉ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฌ์šด ๊ตฌ์„ฑ๊ณผ ๋†’์€ ๊ฐ€๋…์„ฑ์„ ๊ฐ€์ง€๊ณ  ๊ฐˆ ์ˆ˜ ์žˆ์Œ.

 

๋ชจ๋“ˆํ™”(Modularity)

/* CSS */
body {
  font: 100% Helvetica, sans-serif;
  color: #333;
}

.inverse {
  background-color: #333;
  color: white;
}

/* -------------------------------------------------- */

/* _base.scss */
$font-stack: Helvetica, sans-serif;
$primary-color: #333;

body {
  font: 100% $font-stack;
  color: $primary-color;
}

/* styles.scss */
@use 'base';

.inverse {
  background-color: base.$primary-color;
  color: white;
}

@use ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ๋ถ„ํ• ํ•˜๊ณ  ๋ชจ๋“ˆํ™” ํ•  ์ˆ˜ ์žˆ์Œ.

 

๋ฏน์Šค์ธ(Mixin)

/* CSS */
.info {
  background: DarkGray;
  box-shadow: 0 0 1px rgba(169, 169, 169, 0.25);
  color: #fff;
}

.alert {
  background: DarkRed;
  box-shadow: 0 0 1px rgba(139, 0, 0, 0.25);
  color: #fff;
}

.success {
  background: DarkGreen;
  box-shadow: 0 0 1px rgba(0, 100, 0, 0.25);
  color: #fff;
}


/* SCSS */
@mixin theme($theme: DarkGray) {
  background: $theme;
  box-shadow: 0 0 1px rgba($theme, .25);
  color: #fff;
}

.info {
  @include theme;
}
.alert {
  @include theme($theme: DarkRed);
}
.success {
  @include theme($theme: DarkGreen);
}

ํ•จ์ˆ˜์ฒ˜๋Ÿผ default parameter๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ณ , parameter๋ฅผ ๋ฐ›์•„์„œ ์†์„ฑ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Œ.

(์žฌ์‚ฌ์šฉ์„ฑ ํ™•์žฅ)

 

ํ™•์žฅ&์ƒ์†(Extend&Inheritance)

/* CSS */
/* This CSS will print because %message-shared is extended. */
.message, .success, .error, .warning {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}

.success {
  border-color: green;
}

.error {
  border-color: red;
}

.warning {
  border-color: yellow;
}

/* ------------------------------------------------ */

/* SCSS */
/* This CSS will print because %message-shared is extended. */
%message-shared {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}

/* This CSS won't print because %equal-heights is never extended. */
%equal-heights {
  display: flex;
  flex-wrap: wrap;
}

.message {
  @extend %message-shared;
}

.success {
  @extend %message-shared;
  border-color: green;
}

.error {
  @extend %message-shared;
  border-color: red;
}

.warning {
  @extend %message-shared;
  border-color: yellow;
}

@extend ์‚ฌ์šฉ ์‹œ css ์†์„ฑ ์ง‘ํ•ฉ์„ ์ƒ์† ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

์—ฐ์‚ฐ์ž(Operators)

/* CSS */
.container {
  display: flex;
}

article[role="main"] {
  width: 62.5%;
}

aside[role="complementary"] {
  width: 31.25%;
  margin-left: auto;
}

/* ----------------------------------- */

/* SCSS */
@use "sass:math";

.container {
  display: flex;
}

article[role="main"] {
  width: math.div(600px, 960px) * 100%;
}

aside[role="complementary"] {
  width: math.div(300px, 960px) * 100%;
  margin-left: auto;
}

math.div(๋‚˜๋ˆ„๊ธฐ) ์™ธ์—๋„ sin, cos, tan, rendom, max, min ๋“ฑ๋“ฑ์˜ ์ˆ˜ํ•™์  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

 

 

 

 

 

728x90
๋”๋ณด๊ธฐ
FRONTEND