๐ค SCSS, ๊ทธ๊ฒ ๋ญ๋ฐ?
CSS์ ๋จ์ |
CSS ๋ HTML ํ๊ทธ์ ๋์์ธ์ ๋ฃ์ด์ค ๋ ์ฌ์ฉํฉ๋๋ค.
ํ์ง๋ง ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ปค์ง์๋ก ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ค๊ฑฐ๋ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ ์ผ์ด ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ CSS์ ๋จ์ ์ ๋ณด์ํ์ฌ ์ฝ๋์ ์ฌํ์ฉ์ฑ๊ณผ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด ๋์จ ๊ฐ๋ ์ด SCSS๋ผ๊ณ ํฉ๋๋ค.
Variables(๋ณ์)
๋ณ์๋ฅผ ์ง์ ํด๋๊ณ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ค์ฐจ ๋ฒ์๋ฅผ ์ค์ฌ์ฃผ๋ฉฐ, ๋์์ธ ์ปจ์ ์ด ๋ณ๊ฒฝ๋๊ฑฐ๋ ๋ณ๊ฒฝ์ฌํญ์ด ์๊ฒผ์๋๋ ์ ์ง๋ณด์๊ฐ ๊ฐํธํฉ๋๋ค.
$font-stack: Helvetica, sans-serif;
$primary-color: #333;
body {
font: 100% $font-stack;
color: $primary-color;
}
CSS ํ์ธํ๊ธฐ
body {
font: 100% Helvetica, sans-serif;
color: #333;
}
Nesting(์ค์ฒฉ)
CSS์์๋ nav ul / mav li / nav a ์ด๋ ๊ฒ ํ๊ทธ๋ณ๋ก ๋๋ ์ ์์ ์ ํด์คฌ๋ค๋ฉด, SCSS๋ ์ค์ฒฉ๊ธฐ๋ฅ์ด ๊ฐ๋ฅํ์ฌ ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ์ข์์ง๋๋ค.
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li { display: inline-block; }
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
CSS ํ์ธํ๊ธฐ
nav ul {
margin: 0;
padding: 0;
list-style: none;
}
nav li {
display: inline-block;
}
nav a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
Modules(๋ชจ๋)
ํ ํ์ผ์ ๋ชจ๋ SCSS๋ฅผ ์์ฑํ์ง ์๊ณ ๋ค๋ฅธ SCSS ํ์ผ์ ๋ชจ๋๋ก ๋ก๋ํ ์ ์์ต๋๋ค.
// _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;
}
CSS ํ์ธํ๊ธฐ
body {
font: 100% Helvetica, sans-serif;
color: #333;
}
.inverse {
background-color: #333;
color: white;
}
Mixins(์ฌํ์ฉ)
@mixin ์ง์๋ฌธ์ ๋ง๋ค์ด ์ฌ์ฌ์ฉํ๋ ค๋ CSS๋ผ๋ฆฌ ๋ฌถ์ด ๊ทธ๋ฃน์ ๋ง๋ค์ด์ค๋๋ค.
@mixin theme($theme: ๋ฏน์ค์ธ ์ด๋ฆ) {}
"@include ๋ฏน์ค์ธ์ด๋ฆ" ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
@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);
}
// styles.scss
@use 'base';
.inverse {
background-color: base.$primary-color;
color: white;
}
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;
}
Operators(์ฐ์ฐ์)
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;
}
CSS ํ์ธํ๊ธฐ
.container {
display: flex;
}
article[role="main"] {
width: 62.5%;
}
aside[role="complementary"] {
width: 31.25%;
margin-left: auto;
}
'CSS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CSS | ์ด๋ฏธ์ง ์คํ๋ผ์ดํธ(image sprite) / ir ํจ๊ณผ์ background ํํ๊น์ง (4) | 2022.08.20 |
---|---|
CSS | ์์ง์ด๋ ๊ฐ์์ง ๋ง๋ค๊ธฐ (8) | 2022.08.18 |
CSS | ๋ฏธ๋์ด์ฟผ๋ฆฌ(media query) (4) | 2022.08.15 |
CSS | ๊ธฐ๋ณธ ๋ฌธ๋ฒ (4) | 2022.08.15 |
CSS | ๋ฒกํฐ(Vector)์ ๋นํธ๋งต(Bitmap) (10) | 2022.08.10 |
๋๊ธ