Sass(SCSS)
1. Sass ์ SCSS์ ์ฐจ์ด์
Sass์ 3๋ฒ์ ์ ์๋กญ๊ฒ ๋ฑ์ฅํ SCSS
SCSS๋ CSS๊ตฌ๋ฌธ๊ณผ ์์ ํ ํธํ๋๋๋ก ์๋ก์ด ๊ตฌ๋ฌธ์ ๋์ ํด ๋ง๋ Sass์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ CSS์ ์์์งํฉ.
์ฆ, SCSS๋ CSS์ ๊ฑฐ์ ๊ฐ์ ๋ฌธ๋ฒ์ผ๋ก Sass๊ธฐ๋ฅ์ ์ง์
2. ๊ฐ์
Sass(SCSS)๋ ์น์์ ์ง์ ๋์ X
์ต์ข ์๋ ํ์ค CSS๋ก ๋์ํด์ผํ๊ณ , ์ ์ฒ๋ฆฌ๊ธฐ๋ก ์์ฑ ํ, CSS ์ปดํ์ผํด์ผํ๋ค.
js ๊ฐ๋ฐํ๊ฒฝ์์ ์ถ์ฒํ๋ ๋ฐฉ๋ฒ
SassMeister(๊ฐ์์์ ์์ฃผ ์ฌ์ฉ)
node-sass, webpack, ....์ค Parcel ์ด์ฉ!
node js ์ฌ์ฉ์ ๊ธฐ์ค, ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฒ๋ค๋ฌ Parcel์ ์ฌ์ฉํ ๊ฒ
ํจํค์ง ๊ด๋ฆฌ(package.json)
npm init -y
Parcel์ ์ญ์ค์น
npm install -g parcel-bundler
dev dependencies์ ์ค์น
npm i -D parcel-bundler
Sass ์ปดํ์ผ๋ฌ์ค์น(node-sass)
npm install --save-dev node-sass
HTML์
<link>
๋ก Sass ํ์ผ ์ฐ๊ฒฐํ๊ธฐ<link rel="stylesheet" href="scss/main.scss">
ํ์ํ ๋ชจ๋ ์๋์ผ๋ก ์ค์น. parcel์ด ์ปดํ์ผํด์ scss๋ฅผ ์ฝ์์์๋๋กํด์ค.
npx parcel index.html
3. ๋ฌธ๋ฒ
3.1 ์ฃผ์
// : ์ปดํ์ผ ๋์ง ์๋ ์ฃผ์
/ /: ์ปดํ์ผ ๋๋ ์ฃผ์
Sass์ ๊ฒฝ์ฐ์๋ ์ค์ ๋ง์ถฐ * ์ ์ฌ์ฉํด์ผํ์ง๋ง,
SCSS๋ ๊ฐ ์ค์ * ์์ด๋ ํธํ ์ฝ๋ค.
3.2 ๋ฐ์ดํฐ ์ข
๋ฅ
๋ฐ์ดํฐ
์ค๋ช
์์
Numbers
์ซ์
1, .82, 20px, 2emโฆ
Strings
๋ฌธ์
bold, relative, "/images/a.png", "dotum"
Colors
์์ ํํ
red, blue, #FFFF00, rgba(255,0,0,.5)
Booleans
๋ ผ๋ฆฌ
true, false
Nulls
์๋ฌด๊ฒ๋ ์์
null
Lists
๊ณต๋ฐฑ์ด๋ ,๋ก ๊ตฌ๋ถ๋ ๊ฐ์ ๋ชฉ๋ก
(apple, orange, banana), apple orange
Maps
Lists์ ์ ์ฌํ๋ ๊ฐ์ด Key: Value ํํ
(apple: a, orange: o, banana: b)
(์ฐธ๊ณ ) ๋ชฉ์ฐจ
3.3 ์ค์ฒฉ
์์์ ํ์ ์ฐธ์กฐ (
&
) : ์์ ์ ํ์๋ฅผ ์ฌ์ฉํด์, ์ผ์น์ ํ์๋ฅผ ๋ง๋ค ์ ์์.์ค์ฒฉ ๋ฒ์ด๋๊ธฐ
@at-root
์ค์ฒฉ๋ ์์ฑ
๋์ผํ ๋ค์์คํ์ด์ค (margin-, font-, padding-..)๋ฅผ ์ฌ์ฉํ ๋
3.4 ๋ณ์
๋ฐ๋ณต ์ฌ์ฉ๋๋ ๊ฐ์ ๋ณ์๋ก ์ง์ (
$
)$๋ณ์์ด๋ฆ: ์์ฑ๊ฐ
๋ณ์ ์ ํจ๋ฒ์(Variable Scope)
์ ์ธ๋ ๋ธ๋ก
{}
๋ด์์๋ง ์ ํจ
๋ณ์ ์ฌ ํ ๋น
๋ณ์์ ๋ณ์๋ฅผ ํ ๋นํ ์ ์์
๋ณ์ ์ ์ญ์ค์
!global
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ, ์ ํจ๋ฒ์๋ฅผ ์ ์ญ(Global)๋ก ์ค์
๋ณ์ ์ด๊น๊ฐ ์ค์
!default
ํ๋๊ทธ๋ ํ ๋น๋์ง ์์ ๋ณ์์ ์ด๊น๊ฐ์ ์ค์ ํฉ๋๋ค.์ฆ, ํ ๋น๋์ด ์๋ ๋ณ์๊ฐ ์๋ค๋ฉด ๋ณ์๊ฐ ๊ธฐ์กด ํ ๋น๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
๊ธฐ์กด ๋ณ์๊ฐ ์์ ๊ฒฝ์ฐ, ํ์ฌ ์ค์ ํ๋ ๋ณ์์ ๊ฐ์ ์ฌ์ฉํ์ง ์๊ฒ ๋ค๋ ๋ป.
๊ธฐ์กด ์ฝ๋(์๋ณธ)์ Overwriteํ์ง ์๊ณ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ฌ์ฉ.
๋ฌธ์๋ณด๊ฐ(
#{}
)#{}
๋ฅผ ์ฌ์ฉํ์ฌ, ์ฝ๋์ ์ด๋๋ ์ง ๋ณ์๊ฐ์ ๋ฃ์ ์ ์๋ค.unquote()๋ ๋ฌธ์์์ ๋ฐ์ดํ ์ ๊ฑฐ
3.5 ๊ฐ์ ธ์ค๊ธฐ
@import๋ก ์ธ๋ถ์์ ๊ฐ์ ธ์จ Sass ํ์ผ์ ๋ชจ๋ ๋จ์ผ CSS์ถ๋ ฅ ํ์ผ๋ก ๋ณํฉ
Sass @import ๋ ๊ธฐ๋ณธ์ ์ผ๋ก Sassํ์ผ์ ๊ฐ์ ธ์ค๋๋ฐ, CSS @import ๊ท์น์ผ๋ก ์ปดํ์ผ๋๋ ๋ช๊ฐ์ง ์ํฉ์ด ์๋ค.
ํ์ผํ์ฅ์๊ฐ .css์ผ๋
ํ์ผ์ด๋ฆ์ด
http://
๋ก ์์ํ๋ ๊ฒฝ์ฐurl()์ด ๋ถ์์ ๊ฒฝ์ฐ
๋ฏธ๋์ด ์ฟผ๋ฆฌ๊ฐ ์๋๊ฒฝ์ฐ
์์ ๊ฒฝ์ฐ CSS @import ๊ท์น๋๋ก ์ปดํ์ผ๋ฉ๋๋ค.
์ฌ๋ฌ๊ฐ์ง ํ์ผ๊ฐ์ ธ์ค๊ธฐ
ํ์ผ ๋ถํ
ํ์ผ์ด๋ฆ ์์
_
๋ฅผ ๋ถ์ด๋ฉด ์ปดํ์ผ์~.css
ํ์ผ๋ก ์ปดํ์ผํ์ง ์๋๋ค.Webpack ์ด๋ Parcel, Gulp ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋น๋ํด์์๋ Partials ๊ธฐ๋ฅ์ ์ฌ์ฉํ ํ์ ์์ด, ์ค์ ๋ ๊ฐ์ ๋ฐ๋ผ ๋น๋ ๋๋ค. ํ์ง๋ง
_
๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅ.
3.6 ์ฐ์ฐ
์ฐ์ ์ฐ์ฐ์
๋น๊ต์ฐ์ฐ์
๋ ผ๋ฆฌ์ฐ์ฐ์(and, or, not)
์ซ์
์๋์ ๋จ์ ์ฐ์ฐ(%, em, vm๋ฑ)์ ์ฐ์ฐ์ ๊ฒฝ์ฐ CSS ์ calc()๋ก ์ฐ์ฐ
๋๋๊ธฐ ์ฐ์ฐ ์ฃผ์์ฌํญ
CSS๋ ์์ฑ ๊ฐ์ ์ซ์๋ฅผ ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก /๋ฅผ ํ์ฉํ๊ธฐ ๋๋ฌธ์, ์ฐ์ฐ์ด ์๋ ์๋ ์๋ค.
์๋ฅผ๋ค์ด
font:16px/22px serif;
๋font-size:16px; line-height:22px
์ ๋ปํ๊ธฐ ๋๋ฌธ.๋ฐ๋ผ์
/
๋ฅผ ๋๋๊ธฐ ์ฐ์ฐ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด ๋ค์ ์กฐ๊ฑด์ ์ถฉ์กฑํด์ผํ๋ค.๊ฐ ๋๋ ๊ทธ ์ผ๋ถ๊ฐ ๋ณ์์ ์ ์ฅ๋๊ฑฐ๋ ํจ์์ ์ํด ๋ฐํ๋๋ ๊ฒฝ์ฐ
๊ฐ์ด ()๋ก ๋ฌถ์ฌ์๋ ๊ฒฝ์ฐ
๊ฐ์ด ๋ค๋ฅธ ์ฐ์ ํํ์์ ์ผ๋ถ๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ
๋๋์ ์ฐ์ฐ์ ํ๋ ค๋ฉด
/
๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ์๋ ์ซ์๋ง ์ฐ์.
๋ฌธ์
๋ฌธ์์ฐ์ฐ์๋
+
์ฌ์ฉ๋ฌธ์์ฐ์ฐ์ผ ๊ฒฐ๊ณผ๋ ์ฒซ๋ฒ์งธ ํผ์ฐ์ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํจ.
์ฒซ๋ฒ์งธ ํผ์ฐ์ฐ์๊ฐ ๋ฐ์ดํ ์์๋ค๋ฉด, ๊ฒฐ๊ณผ๋ ๋ฐ์ดํ๋ก ๋ฌถ์ธ์ฑ๋ก ๋ฐํ
์ฒซ๋ฒ์งธ ํผ์ฐ์ฐ์์ ๋ฐ์ดํ ์๋๋ฌธ์์๋ค๋ฉด, ๊ฒฐ๊ณผ๋ ๋ฐ์ดํ ์์ด ๋ฐํ
์์
์์๋ ์ฐ์ฐํ ์ ์๋ค.
alpha channels ๊ฐ์ ์ฐ์ฐํ๊ณ ์ถ๋ค๋ฉด, opacify(), transparentize() ํจ์ ์ฌ์ฉ.
oacify(์ปฌ๋ฌ๋ณ์, .3) : ์ปฌ๋ฌ๋ณ์๋ฅผ 30% ๋ ๋ถํฌ๋ช ํ๊ฒ(+)
transparentize(์ปฌ๋ฌ๋ณ์, .3): ์ปฌ๋ฌ๋ณ์๋ฅผ 30% ๋ ํฌ๋ช ํ๊ฒ(-)
๋ ผ๋ฆฌ
@if
์กฐ๊ฑด๋ฌธ์์ ์ฌ์ฉ๋๋ ๋ ผ๋ฆฌ ์ฐ์ฐ
3.7 ์ฌํ์ฉ
Sass Mixins๋ ์คํ์ผ ์ํธ์ ์ฒด์์ ์ฌ์ฌ์ฉํ CSS ์ ์ธ ๊ทธ๋ฃน์ ์ ์ํ๋ ์์ฃผ ํ๋ฅญํ ๊ธฐ๋ฅ.
์ฝ๊ฐ์ Mixin(๋ฏน์ค์ธ)์ผ๋ก ๋ค์ํ ์คํ์ผ์ ๋ง๋ค์ด ๋ผ ์ ์๋ค.
๊ธฐ์ตํ ๊ฒ 2๊ฐ์ง
์ ์ธํ๊ธฐ
@Mixin
ํฌํจํ๊ธฐ
@include
์์ ์ฐธ์กฐ ์ฐ์ฐ ์ฌ์ฉ๊ฐ๋ฅ
ํค์๋์ธ์ ์ฌ์ฉ๊ฐ๋ฅ
๊ฐ๋ณ์ธ์(๋งค๊ฐ๋ณ์ ๋ค์ ...)๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅํ ์ธ์๊ฐฏ์๊ฐ ๋ถํ์คํ ๋ ์ฌ์ฉ.
3.8 ํ์ฅ
@extend ์ ํ์
๋ค์ค์ ํ์ ํ์์ผ๋ก ๋ค์ด๊ฐ์ง๋ค.
๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ ์๋, ๋๋๋ก mixin์ ๋์ฒด๊ธฐ๋ฅ์ผ๋ก ์ฌ์ฉ!
```CSS
.btn, .btn-danger {
padding: 10px;
margin: 10px;
background: blue;
}
.btn-danger { background: red; }
์ค์ ์ ์ฉ์์
if(ํจ์)
์กฐ๊ฑด์ ๊ฐ(true, false)์ ๋ฐ๋ผ ๋๊ฐ์ ํํ์์ค ํ๋๋ง ๋ฐํ
์ผํญ์ฐ์ฐ์์ ์ ์ฌ
3.10 ์กฐ๊ฑด๊ณผ ๋ฐ๋ณต
์กฐ๊ฑด
@if(์ง์์ด)
์กฐ๊ฑด์ ๋ฐ๋ฅธ ๋ถ๊ธฐ์ฒ๋ฆฌ ๊ฐ๋ฅ
if๋ฌธ๊ณผ ์ ์ฌ
๊ฐ์ด ์ฌ์ฉํ ์์๋ ์ง์์ด @else, @else if
(์ง์์ด) ์๋ต๊ฐ๋ฅ
์์ 1
์์ 2
๋ฐ๋ณต๋ฌธ 1. @for
๊ด๋ก์ ๋ณ์๋ก
$i
๋ง์ด ์ฌ์ฉ์ฌ์ฉ๋ฒ
์์
@each
List, Map ๋ฐ์ดํฐ ๋ฐ๋ณตํด์ผํ ๋ ์ฌ์ฉ
for in ๋ฌธ๊ณผ ์ ์ฌ
์ฌ์ฉ์์1(List)
์ฌ์ฉ์์2(Map)
@while
3.11 ๋ด์ฅํจ์
Last updated
Was this helpful?