{ ํ์ด๋ณด๋ Sass๐ ๐ป }
๐ ๐ป Sass๋?
Sass๋ ํน์ ํ ํํ์ ์คํ์ผ์ํธ๋ฅผ css์คํ์ผ๋ก ๋ณ๊ฒฝํด์ฃผ๋ ๋ณํ ์์ง ์ปดํ์ผ๋ฌ์ด๋ฉฐ CSS ์ ์ฒ๋ฆฌ๊ธฐ์ ํ๋์ด๋ค. ๊ฐ๋ฐ์ Sass๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ํ, CSS๋ก exportํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ Sassํ์ผ์ ์ง์ ์ฝ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ CSS๋ก ์ปดํ์ผํด์ผ ํ๋ค.
Sass๋ SCSS ์ฐ๋ ์ด์
- ํ๋ก์ ํธ๊ฐ ์์ฑ๋์ด ๊ฐ์๋ก css๊ฐ ์ ์ ๋ณต์กํด์ง๊ณ ์ ์ง ๋ณด์๊ฐ ์ด๋ ค์์ง๊ณ ์๋ค. css ์ฝ๋ ๋ด์์๋ ๋ฐ๋ณต์ ์ธ ์ฝ๋๊ฐ ์กด์ฌํ๋ค. ์ด๋ป๊ฒ ํ๋ฉด ์๋ํํ ์ ์์๊น ์ด๋ฐ ๊ณ ๋ฏผ์์ ์ถ๋ฐ์ ํ๊ฒ ๋๊ฑฐ๋ค.
- Sass์์๋ ๋ณ์, ๋ค์ด์คํ , ๋ฏน์ค์ธ, ๊ฐ์ ธ์ค๊ธฐ, ์์, ๋ด์ฅ๊ธฐ๋ฅ ๋ฑ css์๋ ์๋ ํธ์ ๊ธฐ๋ฅ๋ค์ด ์์ด ์๊ฐ ์ ์ฝํ ์๊ฐ ์๋ค.
- ์ฝ๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
Sass ๊ธฐ์ ๋ฐฉ์
Sass
$base-font: 20px p font-size: $base-font line-height: 1.5
Sass๋ ์ธ๋ฏธํด๋ก ๊ณผ ์ค๊ดํธ๊ฐ ์๋ค.
๐จ SCSS
$base-font: 20px; p { font-size: $base-font; line-height: 1.5; }
SCSS๋ ์ธ๋ฏธํด๋ก ๊ณผ ์ค๊ดํธ๊ฐ ์๋ค. SCSS๋ CSS์ ๋์ผํ๊ฒ ์ค๊ดํธ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ SCSS๋ฅผ ์ฌ์ฉํ๋ค.
ํ์ผ ๋ถ๋ฆฌ
๊ฐ ํ๋ ์๋ณ(_header.scss, _main.css, _mixin.scss, _variables.scss)๋ก ๋ถ๋ฆฌํ๋ค. style.scss์ ๋ถ๋ฆฌํ๋ ํ์ผ๋ค์ @import
ํ๋ค.
- ์คํ์ผ๋ณ๋ก ๊ธฐ๋ฅ๋ณ๋ก ๋ถ๋ฆฌํ์ฌ ์ฌ์ฉํ ์ ์๊ณ ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ ํธํด์ง๋ค.
ํ์ผ๋ช ์์ _(์ธ๋๋ฐ)๋ฅผ ๋ถ์ธ ์ด์
Sass์๊ฒ _
(์ธ๋๋ฐ)๋ถ์ธ ํ์ผ์ด mainํ์ผ์ ์ผ๋ถ๋ถ์์ ์๋ ค์ค์ _
(์ธ๋๋ฐ)๋ถ์ธ ํ์ผ๋ค์ CSSํ์ผ๋ก ์ปดํ์ผ๋์ง ์๊ณ ๋ด๋ถ์์ @import
ํํ๋ก ์๋ํ๊ฒ ๋๋ค.
Nesting
<nav> <ul> <li>one</li> <li>two</li> <li>three</li> <li>four</li> </ul> </nav>
nav{ background-color: lightcoral; padding: 10px; height: 50px;; ul{ display: flex; justify-content: flex-end; list-style: none; li{ color: white; margin-right: 10px; } } }
Nesting(์ค์ฒฉ)์ ์ฌ์ฉํ๋ฉด HTML
์ ์๊ฐ์ ๊ณ์ธต ๋ฐฉ์๊ณผ ๋์ผํ๊ฒ CSS๋ฅผ ์ค์ฒฉํ์ฌ ์์ฑํ ์ ์๋ค. CSS์ฝ๋๊ฐ ๊ตฌ์กฐํ ๋์ด ๊ฐ๋
์ฑ์ด ๋์์ง๋ฉฐ ์ ์ง ๋ณด์ํ๊ธฐ ํธ๋ฆฌํด์ง๋ค.
์ค์ฒฉ์ ํ๋ ์ด์
// CSS // info-list์ ์๋ ์์๊ณผ ์์์๊ฒ ์คํ์ผ์ ์ ์ฉํ๋ ค๊ณ ํ ๋ ๋ง๋ค ๋ถ๋ชจ ์ ํ์๋ฅผ ์ ์ด์ค๋ค. info-list div { display: flex; font-size: 14px; color: #4f4f4f; } info-list div dt { font-weight: 700; margin-right: 7px; }
// SCSS // ์ค์ฒฉ์ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ์ ํ์๋ฅผ ํ๋ฒ๋ง ์ฌ์ฉํ๋ค. // lifo-list div ์์ dt๊ฐ ๋ค์ด์์์ ํ ๋์ ์ ์ ์๋ค. info-list { div { display: flex; font-size: 14px; color: #4f4f4f; dt { font-weight: 700; margin-right: 7px; } } }
๊ธฐ์กด CSS๋ ๋ถ๋ชจ์๊ฒ ์์๋ ์์ ์์์ ์คํ์ผ์ ์ ์ฉํ๋ ค๊ณ ํ ๋๋ง๋ค ์ต์์ ์ ํ์๋ฅผ ๊ณ์ ๋ฐ๋ณตํด์ ์ ์ธํด์ผ ๋๋ค. ์ค์ฒฉ์ ์ฌ์ฉํ๋ฉด ์ต์์ ์ ํ์๋ฅผ ํ๋ฒ๋ง ์ ์ธํ์ฌ๋ ์์ ์ ํ์์๊ฒ ์คํ์ผ์ ์ ์ฉํ ์ ์๊ฒ ๋์ด ์ฝ๋ ๋ฐ๋ณต์ ์ค์ด๊ฒ ๋๋ค.
โ ์ง๋์น ์ค์ฒฉ๋ ์ฝ๋๋ ์ผ๊ฐํด์ผํ๋ค. ๊น์ด ์ค์ฒฉ๋๋ฉด ์ฝ๋๋ฅผ ๋ณด๋ ๊ฒ ๋ถํธํ๊ณ ์ปดํ์ผ ํ์ ๊ฒฝ์ฐ ๋ถํ์ํ ์ ํ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
Nesting ์์ฑ
// SCSS .backgroud-img{ width: 100%; height: auto; background: { image: url("/example/cat.png"); position: center; repeat: no-repeat; }; }
// CSS .backgroud-img { width: 100%; height: auto; background-image: url("/example/cat.png"); background-position: center; background-repeat: no-repeat; }
์ค์ฒฉ์ ์ ํ์๋ฟ๋ง ์๋๋ผ ์คํ์ผ ์์ฑ๋ค๋ ๊ฐ๋ฅํ๋ค. ์์ฑ์ ์ค์ฒฉ ํ ๋๋ :
์ ์ฌ์ฉํ๋ค. SCSS๋ ์์ฑ์ด ์ค์ฒฉ๋์์์ ์ธ์งํ๊ณ css ์์ฑ๋ค๋ก ๋ณํํ๋ค.
Ampersand
์์ ๋ถ๋ชจ์ ํ์๋ฅผ ์ ํํ ๊ฒฝ์ฐ
// SCSS .box{ width: 300px; height: 300px; background-color: lightcoral; transition: all 1s; &:hover{ background-color: wheat; } }
// CSS .box { width: 300px; height: 300px; background-color: lightcoral; -webkit-transition: all 1s; transition: all 1s; } .box:hover { background-color: wheat; }
๊ณตํต ํด๋์ค๋ช ์ ๊ฐ์ง ์ ํ์๋ค์ ์ค์ฒฉ์ํฌ ๊ฒฝ์ฐ
//Scss .box { &-yellow { background: #ffc92c; } &-red { background: #ff4949; } &-green { background: #0066ff; } }
.box-yellow { background: #ffc92c; } .box-red { background: #ff4949; } .box-green { background: #0066ff; }
์์ ์ ๋ถ๋ชจ ์ ํ์๋ฅผ ์ฐธ์กฐํ์ง๋ง ์ค์ฒฉ์ด ๊น์ด์ง๋ฉด ์ต์์ ๋ถ๋ชจ ์ ํ์๋ก๋ถํฐ ์ฐธ์กฐ๋๋ ๊ฒฝ์ฐ
//Scss .nav { height: 60px; font-size: 18px; .nav-list { background: #3e68ff; span { padding: 10px 13px; a { color: white; .one { & .two { color: skyblue; } } } } } }
// CSS .nav { height: 60px; font-size: 18px; } .nav .nav-list { background: #3e68ff; } .nav .nav-list span { padding: 10px 13px; } .nav .nav-list span a { color: white; } .nav .nav-list span a .one .two { color: skyblue; }
@at-root
// SCSS .one{ color: ff4949; .two{ color: ffc92c; .three{ color: 0066ff; @at-root p{ color: lightcoral; } } } }
// CSS .one { color: ff4949; } .one .two { color: ffc92c; } .one .two .three { color: 0066ff; } p { color: lightcoral; }
@at-root ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์ฒฉ์์ ๋ฒ์ด๋ ์ ์๋ค. ์ค์ฒฉ์์ ๋ฒ์ด๋๊ณ ์ถ์ ์ ํ์ ์์ @at-root ๋ฅผ ์์ฑํ๋ค.
๐ ๐ป ๋ณ์
๋ณ์๋ฅผ ์ ์ธํ๋ค๋ ๊ฒ์ ๊ฐ์ ์ผ์ผ์ด ๊ณ ์น์ง ์์๋ ๋๋ค๋ ์๋ฏธ์ด๋ค. ์ ์ง๋ณด์๋ฅผ ๋งค์ฐ ์ฝ๊ฒ ๋ง๋ค์ด์ค๋ค.
โ ๋ฌด๋ถ๋ณํ๊ฒ CSS๋ฅผ ์์ฑํด์๋ ์๋๋ค. ์ถฉ๋ํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ์ค
- ๊ฐ์ด ๋๋ฒ ์ด์ ๋ฐ๋ณต๋๋ค๋ฉด ๋ฏธ๋ฆฌ ๋ณ์๋ฅผ ๋ง๋ ๋ค.
- ๊ธฐ์กด์ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ ๊ฒฝ์ฐ, ๋ณ์์ ๊ฐ๋ง ๋ณ๊ฒฝํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๊ฐ์ด ์์ ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด ๋ณ์ ์์ฑ์ ๊ณ ๋ คํด๋ณธ๋ค.
๋ณ์ ์์ฑํ๊ธฐ
$bgColor: #ff4949;
h1{
color: $bgColor;
}
๋ณ์๋ฅผ ๋ง๋ค ๋๋ $
๊ธฐํธ๋ฅผ ์ฌ์ฉํด์ ์คํ์ผ์ ์ ์ฉํ ๊ฐ(์์, ํฐํธ ์ฌ์ด์ฆ, ์ด๋ฏธ์งurl)์ ์ง์ ํ ์ ์๋ค.
๋ณ์ type
numbers
: 1, .82, 20px, 2em ๋ฑstrings
: "./images/a.png", bold, left, uppercase ๋ฑcolors
: green, #FFF, rgba(255,0,0,.5) ๋ฑbooleans
: true, falsenull
lists
,maps
Lists
// SCSS // 3๋ฒ์ right์ด๋ค. $valid-sides: left, center, right; p{ text-align : nth($valid-sides, 3); }
๋ฆฌ์คํธ๋ ์์๊ฐ ์๋ ๊ฐ์ผ๋ก, ๊ฐ๋ง๋ค ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ค. lists
๋ฅผ ๋ง๋ค๋ ค๋ฉด lists
์ ์์๋ค์ ,(์ผํ)
๋ ๊ณต๋ฐฑ
๋๋ ์ผ๊ด์ฑ์ด ์๋ /
๋ก ๊ตฌ๋ถํ์ฌ ์์ฑํ ์ ์๋ค. ๋ค๋ฅธ ํ์
์ ๋ณ์๋ค๊ณผ ๋ค๋ฅด๊ฒ ํน์ ๊ดํธ๋ฅผ ์ฌ์ฉํ์ง ์์๋ lists
๋ก ์ธ์ํฉ๋๋ค. ๋น lists
๋ฅผ ๋ง๋ค ๋๋ lists
์ ๋ค์ด์๋ ๊ฐ์ด ํ๋ ์ธ ๊ฒฝ์ฐ [ ]
๋ ( )
๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ๋ค.
โ lists
์ ๋ค์ด์๋ ๊ฐ์ index
๋ 1
๋ถํฐ ์์ํ๋ค.
Lists ๊ด๋ จ ๋ด์ฅํจ์
append(list,value,[separator])
: lists์ ๊ฐ์ ์ถ๊ฐํ๋ ํจ์index(list,value)
: lists์ ๊ฐ์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ๋ฆฌํดํ๋ ํจ์nth(list, n)
: lists์ ์ธ๋ฑ์ค์ ํด๋นํ๋ ๊ฐ์ ๋ฆฌํดํ๋ ํจ์
Maps
// SCSS // key๊ฐ $font-sizes, value๊ฐ myh1์ ํธ์ถ์ ํ๋ค. // font-sizes๋ 45px์ด๋ค. $font-sizes: ("myh1": 45px, "myh2": 19px, "myp": 16px); h1{ color: $bgColor; font-size: map-get($font-sizes, "myh1"); }
maps
๋ ( ) ๊ดํธ
์์ ํค:๊ฐ
์ ํํ๋ก ์ ์ฅํ์ฌ ์ฌ์ฉํ๋ค. ํค์ ๊ฐ์ ์ ์ํ ๋, ํค๋ ๊ณ ์ ํด์ผ ํ์ง๋ง ํค์ ํด๋นํ๋ ๊ฐ์ ์ค๋ณต์ด ๊ฐ๋ฅํ๋ค. ๋ณ์๋ฅผ ๊ฐ๊ฐ ์ ์ธํ๋ ๋์ , ๊ด๋ จ ์๋ ๋ณ์๋ค์ ํ๋ฒ์ ๋ชจ์ maps
๋ก ๋ง๋ค์ด์ ์ฌ์ฉํ ์ ์๋ค.
Maps ๊ด๋ จ ๋ด์ฅํจ์
map-get(map,key)
: ํค์ ํด๋นํ๋ ๊ฐ์ ๊ฐ์ ๋ฆฌํดํ๋ ํจ์map-keys(map)
: map์ ๋ค์ด์๋ ํค(key) ์ ๋ถ๋ฅผ ๋ฆฌํดํ๋ ํจ์map-values(map)
: map์ ๋ค์ด์๋ ๊ฐ(value) ์ ๋ถ๋ฅผ ๋ฆฌํดํ๋ ํจ์
โ lists
์ maps
๋ฟ๋ง ์๋๋ผ string
์ด๋ number
๊ฐ์ ํ์
๋ค๋ function
์ ๊ฐ์ง๊ณ ์๋ค.
๋ณ์์ Scope
์ง์ญ๋ณ์
h1{ $spanColor: #ffc92c; // ์ง์ญ๋ณ์ color: $bgColor; font-size: map-get($font-sizes, "myh1"); span { color: $spanColor; } }
์ง์ญ๋ณ์๋ ์ ์ธํ ์๊ธฐ์์ ์ ๊ฐ์ธ๊ณ ์๋ ์ค๊ดํธ { }
์์์ ์ฌ์ฉ๋๋ค. ํ์ ๋จ๊ณ์ ์๋ ์ค๊ดํธ์์๋ ์ฌ์ฉํ ์ ์๋ค.
์ ์ญ๋ณ์
$bgColor: #ff4949; $font-h1 : 28px; $valid-sides: left, center, right; $font-sizes: ("myh1": 45px, "myh2": 19px, "myp": 16px);
์ ์ญ๋ณ์๋ ๊ฐ์ฅ ์๋ถ๋ถ์ ์ ์ํ๋ฉด ํ์ผ ๋ด์ ์ด๋์๋ ์ง ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
$mycolor: #ffffff !global;
!global ์ฌ์ฉํ์ฌ local ๋ณ์๋ฅผ global ๋ณ์๋ก ๋ง๋ค์ด ์ฌ์ฉํ ์์๋ค.
โ global ๋ณ์๋ ์ด๋ ์ธ์ด๋ ์งํฅํ๋ ์ถ์ธ์ด๋ค.
Operator
๋น๊ต์ฐ์ฐ์ (์ซ์ํ)
// SCSS @debug 100 > 50; // true @debug 10px < 17px; // true @debug 96px >= 1in; // true @debug 1000ms <= 1s; // true
a < b
: a์ ๊ฐ์ด b๋ณด๋ค ๊ฐ์ด ์์์ง ํ์ธํ๋ค.a <= b
: a๊ฐ b๋ณด๋ค ๊ฐ์ด ์๊ฑฐ๋ ๊ฐ์์ง ํ์ธํ๋ค.a > b
: a์ ๊ฐ์ด b๋ณด๋ค ๊ฐ์ด ํฐ์ง ํ์ธํ๋ค.a >= b
: a๊ฐ b๋ณด๋ค ๊ฐ์ด ํฌ๊ฑฐ๋ ๊ฐ์์ง ํ์ธํ๋ค.
โ ERROR : ๋น๊ตํ๊ฑฐ๋ ์ฐ์ฐํ๋ ๊ฐ์ ๋จ์๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ๊ทธ๋ฌ๋ ๋จ์๊ฐ ์๋ ์ซ์์ ์ผ๋ฐ์ซ์์ ๋น๊ตํ๋ ๊ฒฝ์ฐ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
==, != (๋ชจ๋ ํ์ )
// SCSS // ์ซ์ @debug 1px == 1px; // true @debug 1px != 1em; // true @debug 1 != 1px; // true @debug 96px == 1in; // true // ๋ฌธ์ @debug "Poppins" == Poppins; // true @debug "Open Sans" != "Roboto"; // true // ์์ @debug rgba(53, 187, 169, 1) == #35bba9; // true @debug rgba(179, 115, 153, 0.5) != rgba(179, 115, 153, 0.8); // true
์ซ์, ๋ฌธ์, ์์ ๋ฆฌ์คํธ ๋น๊ตํ ์ ์๋ค.
a == b
: a๊ฐ b์ ๊ฐ์ด ๊ฐ์์ง ํ์ธํ๋ค.a != b
: a๊ฐ b์ ๊ฐ์ด ๋ค๋ฅธ์ง ํ์ธํ๋ค.
์ฐ์ ์ฐ์ฐ์ (์ซ์๋ ์)
// SCSS @debug 10s + 15s; // 25s @debug 1in - 10px; // 0.8958333333in @debug 5px * 3px; // 15px*px @debug 1in % 9px; // 0.0625in (1in == 96px)
a + b
: a ์ b์ ๊ฐ์ ๋ํ๋ค.a - b
: a ์์ b์ ๊ฐ์ ๋บ๋ค.a * b
: a์ b์ ๊ฐ์ ๊ณฑํ๋ค.a / b
: a๋ฅผ b๋ก ๋๋๋ค.a % b
: a ์์ b๋ฅผ ๋๋ ๋๋จธ์ง ๊ฐ์ ๊ตฌํ๋ค.
// SCSS $font-sizes: ("myh1": 45px, "myh2": 19px, "myp": 16px); // 16px * 2 = 32px์ด๋ค. h1{ font-size: map-get($font-sizes, "myp") * 2; }
โ ๋๋๊ธฐ๋ฅผ ํ ๋ ์ฌ์ฉํ๋ ์ฌ๋์/
๋ ๋ฆฌ์คํธ์์๋ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํผ๋์ ์ค ์ ์๋ค. ๊ทธ๋์ ๊ดํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ณ์์ ํจ๊ป ์ฌ์ฉํ๊ฑฐ๋ ๋ง์
์ ํ ๋ ํจ๊ป ์จ์ SCSS์๊ฒ /
๋ฅผ ๋๋๊ธฐ ์ฐ์ฐ์์์ ์๋ ค์ค์ผ ํฉ๋๋ค
String์ a + b
// SCSS @debug "Helvetica" + " Neue"; // "Helvetica Neue" @debug sans- + serif; // sans-serif @debug sans - serif; // sans-serif @debug "Elapsed time: " + 10s; // "Elapsed time: 10s"; @debug true + " is a boolean value"; // "true is a boolean value";
+
์ฐ์ฐ์์์ a
์ b
๊ฐ ๋ชจ๋ ๋ฌธ์์ด์ด๋ผ๋ฉด ๋ฌธ์์ด a
,b
๋ฅผ ํฉ์ณ์ ์๋ก์ด ๋ฌธ์์ด๋ก ๋ฐํํ๋ค. ๋ง์ฝ a
๋ b
์ค ํ๋๋ง ๋ฌธ์์ด์ด๋ผ ํ๋๋ผ๋ ๋ฌธ์์ด์ด ์๋ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ๋ ๊ฐ์ ํฉ์น ๋ฌธ์์ด๋ก ๋ฐํํ๋ค.
๋ ผ๋ฆฌ์ฐ์ฐ์ (boolean ํ์ )
// SCSS @debug not true; // false @debug not false; // true @debug true and true; // true @debug true and false; // false @debug true or false; // true @debug false or false; // false
not
:true
์ด๋ฉดfalse
๋ฅผ,false
์ด๋ฉดtrue
๋ฅผ ๋ฐํํ๋คand
: ๋๊ฐ ๋คtrue
์ผ๋true
๋ฅผ ๋ฐํํ๊ณ , ํ๋๋ผ๋false
๋ฉดfalse
๋ฅผ ๋ฐํํ๋ค.or
: ๋๊ฐ ๋คfalse
๋ฉดfalse
๋ฅผ ๋ฐํํ๊ณ , ํ๋๋ผ๋true
๋ผ๋ฉดtrue
๋ฅผ ๋ฐํํ๋ค.
๐
๐ป Mixin
Mixin์ด๋
Mixin์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ธฐ๋ฅ์ด๋ค. ์ ํ์๋ค ์ฌ์ด์์ ๋ฐ๋ณต๋๊ณ ์๋ ์ฝ๋๋ค์ mixin
์ ์ฌ์ฉํ์ฌ ์ฝ๋ ๋ฐ๋ณต์ ์ค์ธ๋ค. ์ค๋ณต๋๋ ์ฝ๋๋ mixin์ผ
๋ก ๋ง๋ค์ด ๋๊ณ ์ํ๋ ์ ํ์ ๋ธ๋ญ์ mixin
์ include
ํ๋ฉด ๋๋ค.
Mixin ์ฌ์ฉํ๊ธฐ
// SCSS @mixin ์ด๋ฆ(๋งค๊ฐ๋ณ์) //์์ฑ @include ์ด๋ฆ(์ธ์) //์ฌ์ฉ
// SCSS @mixin flexCenter{ display: flex; justify-content : center; align-items : center; list-style: none; } .one{ @include flexCenter; background-color: #ff4949; } .two{ @include flexCenter; background-color: #ffc92c; }
- ์์
@Mixin
์ ์ฐ๊ณ ์ด๋ฆ์ ์ ํด์ค ํ ์ค๊ดํธ{ }
์์ ์ค๋ณต๋๋ ์ฝ๋๋ฅผ ๋ฃ์ด์ค๋ค. @include
๋ฅผ ์ฌ์ฉํ์ฌ ์คํ์ผ ํ๊ณ ์ ํ๋ ์์์ ํฌํจ ์ํค๋ฉด ๋๋ค.mixin
์ ํ์ผ์ ๋ง๋ค์ด์import
ํ์ฌ ์ฌ์ฉํ๊ฑฐ๋mixin
์ ์ฌ์ฉํ ํ์ผ ๋ด์์ ์ ์ธ ํ ์ฌ์ฉํ ์ ์๋ค. ์ฌ๋ฌ ๊ฐ์mixin
์ ๋ง๋ค์ด ์ฌ์ฉํ๋ค๋ฉด_mixins.scss
ํ์ผ์ ๋ง๋ค์ด์ ๊ด๋ฆฌํ๋ค.
Arguments
Arguments
// SCSS @mixin flexCenter{ display: flex; justify-content : center; align-items : center; list-style: none; } .one{ @include flexCenter; background-color: #ff4949; margin-right: 10px; li{ margin-right: 10px; } } .two{ @include flexCenter; background-color: #ffc92c; li{ margin-right: 20px; } }
// SCSS @mixin flexCenterTwo($size){ display: flex; justify-content : center; align-items : center; list-style: none; li{ margin-right: $size; } } .one{ @include flexCenterTwo(10px); background-color: #ff4949; } .two{ @include flexCenterTwo(20px); background-color: #ffc92c; }
mixin
์ด๋ฆ ๋ค์ ์ธ์๋ฅผ ๋ฃ์ด์ ์ฌ์ฉํ ์ ์๊ณ ๋งค๊ฐ๋ณ์
์ ์ธ์
์ ๊ฐ์๊ฐ ๊ฐ์์ผ ํ๋ค. mixin
์ ๋งค๊ฐ๋ณ์
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฅ๋์ ์ผ๋ก ์คํ์ผ์ ์ ์ฉํ ์ ์๋ค.
๊ธฐ๋ณธ๊ฐ ์ค์
// SCSS @mixin flexCenterTwo($size: 30px){ display: flex; justify-content : center; align-items : center; list-style: none; li{ margin-right: $size; } } .one{ @include flexCenterTwo(10px); background-color: #ff4949; } .two{ @include flexCenterTwo(20px); background-color: #ffc92c; } .three{ @include flexCenterTwo; background-color: #0066ff; }
๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ์ฌ ๋งค๊ฐ๋ณ์์ ๊ฐ์ด ๋ค์ด์ค์ง ์์ ๋ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ํ ๊ฐ์ ์ฌ์ฉํ ์ ์๋ค.
Content
// SCSS @mixin flexCenterTwo($size: 30px){ display: flex; justify-content : center; align-items : center; list-style: none; li{ margin-right: $size; } @content } .one{ @include flexCenterTwo(10px); background-color: #ff4949; } .two{ @include flexCenterTwo(20px); background-color: #ffc92c; } .three{ @include flexCenterTwo{ color: white; } background-color: #0066ff; }
@content๋ฅผ ์ฌ์ฉํ๋ฉด ์ํ๋ ๋ถ๋ถ์ ์คํ์ผ์ ์ถ๊ฐํ์ฌ ์ ๋ฌํ ์ ์๋ค.
๐
๐ป Extend
Extend
extend
๋ ์ฐ๊ด ์๋ ์์๋ค๋ผ๋ฆฌ ์คํ์ผ ์ฝ๋๊ฐ ์ค๋ณต๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค. ์ด๋ฏธ ์คํ์ผ์ด ์์ฑ๋ ์ ํ์์ ํด๋์ค๋ฅผ extend
ํ๊ฑฐ๋ %
๋ฅผ ์ฌ์ฉํด์ ๋ฐ๋ก ์คํ์ผ์ ์ ์ํ ํ extend
ํ์ฌ ์ํ๋ ์ ํ์์๊ฒ ์คํ์ผ์ ์ ์ฉํด ์ค ์ ์๋ค.
mixin
: ๊ด๊ณ ์๋ ์ ํ์์์ ์กฐ๊ธ ๋ค๋ฅธ ์คํ์ผ์ ์ ์ฉํ ๋ ์ฌ์ฉํ๋ค.extend
: ๊ด๊ณ ์๋ ์ ํ์๋ค์ ๋์ผํ ์์ค์ฝ๋ ์ ์ฉํ ๋ ์ฌ์ฉํ๋ค.
// SCSS .profile-user { background-image: url("./user.png"); background-size: cover; background-position : 50% 50%; border-radius: 50%; width : 50px; height : 50px; } .comment-user { @extend .profile-user; }
.profile-user ํด๋์ค๋ฅผ ๊ฐ์ง ๋ก๊ทธ์ธ ํ๋กํ user ์ด๋ฏธ์ง ๋ฐ์ค๊ฐ .comment-user๊ฐ ๋๊ธ์ ์์ฑํ ๋ user์์ ๋ํ๋ด์ฃผ๋ ์ด๋ฏธ์ง ๋ฐ์ค์ ์ค๋ณต๋๋ ๊ฒฝ์ฐ์ ๋๋ค. .profile-user ์ฝ๋ ์ ์ฒด๋ฅผ .comment-user ์๊ฒ extend ํด์ค๋๋ค.
%placeholder
// SCSS %base-button { width: 133px; height: 44px; display: flex; justify-content: center; align-items: center; font-size: 14px; border-radius: 10px; } .follow-button { @extend %base-button; background-color: #ffffff; color: #0066ff; border: 3px solid #0066ff; } .message-button { @extend %base-button; background-color: #0066ff; color: white; }
%
๋ก ์ ํ์๋ฅผ ๋ง๋ ๋ค. @extend
๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ %placeholder
์คํ์ผ ๋ธ๋ญ์ ๋ถ๋ฌ์จ๋ค. %
๋ CSS ์ปดํ์ผ๋์ง ์๋๋ค.
โ Extend๋ฅผ ์ฌ์ฉํ ๋, ํด๋์ค๋ณด๋ค %๋ฅผ ์ฌ์ฉํ๊ธฐ๋ฅผ ๊ถ์ฅํ๋ค.
๐
๐ป ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ, ํจ์
์กฐ๊ฑด๋ฌธ
@if
@if
์ ๊ดํธ ์์ด true
๋ false
๋ฅผ ๋ฐํํ ์ ์๋ ์กฐ๊ฑด๋ฌธ์ ์์ฑํ๋ค. (์กฐ๊ฑด์ ์์ฑํ ๋ ๊ดํธ๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๊ดํธ๋ ์๋ตํ๋ค.) ์กฐ๊ฑด์๋ ๋
ผ๋ฆฌ์ฐ์ฐ์ and
, or
, not
์ ์ฌ์ฉํ๊ณ if
๋ฌธ์ ์กฐ๊ฑด์ด true
์ผ ๋๋ง { }
๊ดํธ ์์ ์๋ ์ฝ๋๊ฐ ์คํํ๋ค.
// SCSS @mixin avatar($size, $circle: false) { width: $size; height: $size; @if $circle { border-radius: $size / 2; } } .square-av { @include avatar(100px, $circle: false); } .circle-av { @include avatar(100px, $circle: true); }
// CSS .square-av { width: 100px; height: 100px; } .circle-av { width: 100px; height: 100px; border-radius: 50px; }
avatar
๋ผ๋ ์ด๋ฆ์ด ์๋ค. $size
์ $circle
์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๋๋ค. $circle
๊ฐ์ด ๊ธฐ๋ณธ์ผ๋ก false
์ด๋ค. width
์ height
๋ ์
๋ ฅ๋ ์ฌ์ด์ฆ๊ฐ์ผ๋ก ์ด๊ธฐํ๋ฅผ ํ๋ค.
๋ง์ฝ์ $circle
์ด๋ผ๊ณ ํ๋ค๋ฉด border-radius
๊ฐ ์ฌ์ด์ฆ ๋๋๊ธฐ 2๋ฅผ ํด์ ๋๊ทธ๋๊ฒ ๋ง๋ค์ด์ค๋ค. @include
์์ avatar
๊ฐ 100px
, $circle
๊ฐ false
์ผ๋์ $circle
๊ฐ true
์ผ ๋ ์์ ๊ฐ์ด CSS
๋ก ๋ํ๋๋ค.
@else
@if (์กฐ๊ฑด) { // ์กฐ๊ฑด์ด ์ฐธ์ผ ๋ ์คํ๋ ๊ตฌ๋ฌธ } @else{ // if๋ฌธ์ ์กฐ๊ฑด์ด ๊ฑฐ์ง์ผ ๋ ์คํ๋ ๊ตฌ๋ฌธ }
if
๋ฌธ์ ์กฐ๊ฑด์ด ์ฐธ
์ผ ๋์ ๊ฑฐ์ง
์ผ ๋ ์คํ๋ ๊ตฌ๋ฌธ์ด ๋ค๋ฅด๋ค.
// SCSS $light-background: #f2ece4; $light-text: #036; $dark-background: #6b717f; $dark-text: #d2e1dd; @mixin theme-colors($light-theme: true) { @if $light-theme { background-color: $light-background; color: $light-text; } @else { background-color: $dark-background; color: $dark-text; } } .banner { @include theme-colors($light-theme: true); body.dark & { @include theme-colors($light-theme: false); } }
// CSS // ture์ด๋ฉด ๋ฐ์ ์์, false๋ฉด ์ด๋์ด ์์ ์คํ์ผํ๋ค. .banner { background-color: #f2ece4; color: #036; } body.dark .banner { background-color: #6b717f; color: #d2e1dd; }
theme-colors
๊ฐ light-theme
๋ง๋ค ๊ธฐ๋ณธ๊ฐ์ด true
์ด๋ค. ๋ง์ฝ์ true
๊ฐ ๋ค์ด์จ๋ค๋ผ๊ณ ํ๋ฉด ์์ ๊ตฌ๋ฌธ์ ์คํ์ด ๋๊ณ false
๊ฐ ๋ค์ด์ค๋ฉด ์๋์ ๊ตฌ๋ฌธ์ ์คํํ๊ฒ ๋๋ค. banner
์ ๋ณด๋ฉด light-theme
๋ง๋ค true
์ด๋ค. body
์ dark
๋ light-theme
๋ง๋ค false
์ด๋ค.
โ ์ฌ๋ฌ๊ฐ์ง ์กฐ๊ฑด๋ฌธ์ ์์ฑํ ์ ์๋ค.
@else if
if (์กฐ๊ฑด){ // ์กฐ๊ฑด์ด ์ฐธ์ผ ๋ ์คํ๋ ๊ตฌ๋ฌธ } @else if(์กฐ๊ฑด){ // else if ์กฐ๊ฑด์ด ์ฐธ์ผ ๋ ์คํ๋ ๊ตฌ๋ฌธ } @else{ // ์์ ๋ชจ๋ ์กฐ๊ฑด์ด ๊ฑฐ์ง์ผ ๋ ์คํ๋ ๊ตฌ๋ฌธ }
// SCSS //์กฐ๊ฑด์ ํด๋นํ๋ ๋ฐฉํฅ์ ๋ง์ถฐ์ border-bottom ์ปฌ๋ฌ๋ฅผ ์คํ์ผํ๋ค. @mixin triangle($size, $color, $direction) { height: 0; width: 0; border-color: transparent; border-style: solid; border-width: ($size/2); @if $direction == up { border-bottom-color: $color; } @else if $direction == right { border-left-color: $color; } @else if $direction == down { border-top-color: $color; } @else if $direction == left { border-right-color: $color; } @else { @error "Unknown direction #{$direction}."; } } .next { @include triangle(5px, black, right); }
/// CSS .next { height: 0; width: 0; border-color: transparent; border-style: solid; border-width: 2.5px; border-left-color: black; }
$triangle
์ $size
, $color
, $direction
์ ๊ธฐ๋ณธ๊ฐ์ด ์๋ค. $direction
์ up
,right
, down
, left
์ด๋ค. border-bottom-color
, border-left-color
, border-top-color
border-right-color
์ color
๋ฅผ ๋ฐ๊ฟ์ฃผ๋ ์ฝ๋์ด๋ค. else
์ @error
๊ฐ ๋ค์ด ์๋ค. triangle
์ 5px
, 'black', 'right'๋ฅผ ์๋ก ์ฌ๋ผ๊ฐ์ $size
, $color
, $'direction` ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๋ค.
๋ฐ๋ณต๋ฌธ
@for
for ($๋ณ์) from (์์) through(๋){ // ๋ฐ๋ณตํ ๋ด์ฉ }
์ ์ํ ํ์๋งํผ ์ฝ๋ ์คํ์ ๋ฐ๋ณตํ๋ค. @for
๋ฌธ์ from
(์์ : ์ด์) - through
(๋ : ์ดํ)๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋์ ์์ํด์ ์ด๋์ ๋๋ ์ง๋ฅผ ์๋ ค์ค๋ค.
nth-
์ ํ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
/// SCSS // for๋ฌธ์ ์ด์ฉํด nth-์ ํ์์๊ฒ ๊ฐ๊ฐ์ image๋ฅผ ๋ฐฐ๊ฒฝ์ ๋ฃ์ด์ค๋ค. @for $i from 1 through 5 { .photo-box:nth-child(#{$i}) { background-image: url("../assets/phoster#{$i}.png"); } }
// CSS .photo-box:nth-child(1) { background-image: url("../assets/phoster1.png"); } .photo-box:nth-child(2) { background-image: url("../assets/phoster2.png"); } .photo-box:nth-child(3) { background-image: url("../assets/phoster3.png"); } .photo-box:nth-child(4) { background-image: url("../assets/phoster4.png"); } .photo-box:nth-child(5) { background-image: url("../assets/phoster5.png"); }
๋ฒ์ 1์ด์ 5์ดํ์ด๊ณ for
๋ฌธ์์ 1
๋ถํฐ 5
๊น์ง ๋ฐ๋ณตํ๋ผ๋ ์๋ฏธ์ด๋ค. ์ด 5๋ฒ
๋ฐ๋ณต๋๋ฉด์ ์ฝ๋๊ฐ ์คํ๋๋ค. ๋ง์ฝ from
3 through
t 8 ์ด๋ผ๋ฉด 3์์ 8๊น์ง 6๋ฒ ์คํ๋๋ค.
@each
@each ($๋ณ์) in (Lists ๋ Maps){ // ๋ฐ๋ณตํ ๋ด์ฉ }
eac
h๋ฌธ์ Lists
๋ Maps
์ ๊ฐ๊ฐ์ ์์๋ง๋ค ์ฝ๋๋ฅผ ์คํํด์ ์คํ์ผ์ ์ ์ฉํ ์ ์๋ค.
// SCSS // color-palette ๋ฆฌ์คํธ์ ๋ค์ด์๋ ์์์ each๋ฌธ์ ์ฌ์ฉํ์ฌ background์ ์์๊ฐ์ ๋ฃ์ด์ค๋ค. $color-palette: #dad5d2 #3a3532 #375945 #5b8767 #a6c198 #dbdfc8; @each $color in $color-palette { $i: index($color-palette, $color); .color-circle:nth-child(#{$i}) { background: $color; width: 20px; height: 20px; border-radius: 50%; } }
// CSS .color-circle:nth-child(1) { background: #dad5d2; width: 20px; height: 20px; border-radius: 50%; } .color-circle:nth-child(2) { background: #3a3532; width: 20px; height: 20px; border-radius: 50%; } .color-circle:nth-child(3) { background: #375945; width: 20px; height: 20px; border-radius: 50%; } .color-circle:nth-child(4) { background: #5b8767; width: 20px; height: 20px; border-radius: 50%; } .color-circle:nth-child(5) { background: #a6c198; width: 20px; height: 20px; border-radius: 50%; } .color-circle:nth-child(6) { background: #dbdfc8; width: 20px; height: 20px; border-radius: 50%; }
$color-palette
๊ฐ Lists
๋ก ์ด์ฐจ์์ผ๋ก ์ํ๋๊ณ ์๋ค. $color
๋ก ๋ณ์๋ฅผ ๋ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ color
์์์ ์ธ ์๊ฐ ์๋ค.
// SCSS @each $color in $color-palette { .icon-#{$color} { background: $color; width: 20px; height: 20px; border-radius: 50%; } }
// CSS icon-#375945 { background: #375945; width: 20px; height: 20px; border-radius: 50%; } .icon-#5b8767 { background: #5b8767; width: 20px; height: 20px; border-radius: 50%; } .icon-#a6c198 { background: #a6c198; width: 20px; height: 20px; border-radius: 50%; } .icon-#dbdfc8 { background: #dbdfc8; width: 20px; height: 20px; border-radius: 50%;
@while
@while ์กฐ๊ฑด { // ๋ฐ๋ณตํ ๋ด์ฉ }
ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑ๋ ๋๊น์ง ์ฝ๋๋ฅผ ๋ฌดํ ๋ฐ๋ณตํ๊ณ ์กฐ๊ฑด์ ๋ง๋ ๋ while
๋ฌธ์ ๋น ์ ธ๋์ค๊ฒ ๋๋ค. ์ฐธ๊ณ ๋ก while
๋ฌธ์ ๋น ์ ธ๋์ค๋ ์กฐ๊ฑด์ ๋ง๋๋ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ์์ด์ ์ ์ฌ์ฉํ์ง ์๋๋ค.
// SCSS // value๊ฐ์ด base๋ณด๋ค ์์ ๋๊น์ง ์ผ์ ํ ๊ฐ์ผ๋ก ๊ณ์ ๋๋ ์ค๋ค. @function scale-below($value, $base, $ratio: 1.618) { @while $value > $base { $value: ($value/$ratio); } @return $value; } $normal-font-size: 16px; .sup { font-size: scale-below(20px, 16px); }
// CSS .sup { font-size: 12.36094px; }
$value
๋ณด๋ค ์์์ง ๋๊น์ง ๊ณ์ ๋ฌดํ๋น ๋ฐ๋ณตํ๋ ๊ฑฐ๋ค. $value
์ $ratio
๋ฅผ ๋๋ ์ค๋ค. scale-below
๋ผ๊ณ ์ ์ธ์ ํ์๋ค. 20px
๊ณผ 16px
์ ๋ค์ด๊ฐ ์์ผ๋ฉด 20px
์ 16px
๋ณด๋ค ํฌ๊ธฐ ๋๋ฌธ์ $value
๋ 1.618
์ด ๋์จ๋ค. $value
์ด 16px
๋ณด๋ค ์์์ง๋ฉด while
๋ฌธ์์ ๋์ค๊ฒ ๋๋ค. ๊ทธ๋ฌ๊ณ ๋์ $value
์ return
ํด์ค๋ค. font-size
๋ return
๋ $value
๊ฐ ๋์จ๋ค.
function
function
@function ํจ์์ด๋ฆ($๋งค๊ฐ๋ณ์) { // ์คํ ์ฝ๋ @return ๊ฐ }
@function
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ์์ฑํ๊ณ ํจ์์ด๋ฆ( )
ํํ๋ก ํจ์๋ฅผ ํธ์ถํ๊ณ ์คํํ๋ค. ํจ์ ์์์๋ @return
์ด์ฉํด ๊ฐ์ ๋ฐํํ๋ค. ํจ์๋ Mixin
๊ณผ ๋น์ทํ์ง๋ง mixin
์ ์คํ์ผ ์ฝ๋๋ฅผ ๋ฐํํ๊ณ function
์ @return
ํค์๋๋ฅผ ์ฌ์ฉํด์ ๊ฐ ์์ฒด๋ฅผ ๋ฐํํ๋ค๋ ์ฐจ์ด๊ฐ ์๋ค.
// SCSS // ๊ฑฐ๋ญ์ ๊ณฑ์ ๊ตฌํ๋ ํจ์ @function pow($base, $exponent) { $result: 1; @for $_ from 1 through $exponent { $result: $result * $base; } @return $result; } .sidebar { float: left; margin-left: pow(4, 3) * 1px; }
// CSS .sidebar { float: left; margin-left: 64px; }
$base
์ 4
, $exponent
์ 3
์ด ๋ค์ด๊ฐ๋ค. result
๋ฅผ ๋ฐํ์ ํด์ค๋ค. ์๋ฏธ ์๋ ๋ณ์๋ฅผ ์ ์ธํ ๋ $_
๋ก ์ด๋ค. 1
๋ถํฐ exponent
๊ฐ 3
์ด๋๊น 1
๋ถํฐ 3
๊น์ง $_
์์ ๋ค์ด ๊ฐ ์๋ค. $result
๊ฐ ๊ณ์ ๋ณ๊ฒฝ์ด ๋๋ค.
๋ด์ฅํจ์
์์ ํจ์
lighten(color, amount)
: ๊ธฐ์กด ์์์ ๋ฐ๊ธฐ๋ฅผ ๋์ธ๋ค.( 0%-100% ์ฌ์ด์ ๊ฐ )darken(color, amount)
: ๊ธฐ์กด ์์์ ๋ฐ๊ธฐ๋ฅผ ๋ฎ์ถ๋ค.( 0%-100% ์ฌ์ด์ ๊ฐ )mix(color1, color2, weight)
: 2๊ฐ์ ์์์ ์์ด์ ์๋ก์ด ์์์ ๋ง๋ ๋ค.
์ซ์ ํจ์
max(number, ..)
: ๊ดํธ์ ๋ฃ์ ๊ฐ ์ค์ ๊ฐ์ฅ ํฐ ์๋ฅผ ๋ฐํํ๋ค.min(number, ..)
: ๊ดํธ์ ๋ฃ์ ๊ฐ ์ค์ ๊ฐ์ฅ ์์ ์๋ฅผ ๋ฐํํ๋ค.parcentage(number)
: ํผ์ผํธ๋ก ์ซ์๋ฅผ ๋ฐ๊ฟ์ค๋ค.comparable(num1,num2)
: ์ซ์1๊ณผ ์ซ์2๊ฐ ๋น๊ต ๊ฐ๋ฅํ์ง ํ์ธ ํ true,false ๊ฐ์ ๋ฐํํ๋ค.
๋ฌธ์ ํจ์
srt-insert(string,insert,index)
: ๋ฌธ์์ด์ ์ํ๋ ์์น(index)์ ๋ฌธ์๋ฅผ ๋ฃ์ ํ(insert), ์๋ก์ด ๋ฌธ์์ด์ ๋ฐํํ๋ค.str-index(string,substring)
: ๋ฌธ์์ด์์ ํด๋น ๋ฌธ์์ index ๊ฐ์ ๋ฐํํ๋ค.to-upper-case(string)
: ๋ฌธ์์ด ์ ๋ถ๋ฅผ ๋๋ฌธ์๋ก ๋ฐ๊ฟ์ค๋ค.to-lower-case(string)
: ๋ฌธ์์ด ์ ๋ถ๋ฅผ ์๋ฌธ์๋ก ๋ฐ๊ฟ์ค๋ค.
ํ์ธ ํจ์
unit(number)
: ์ซ์์ ๋จ์๋ฅผ ๋ฐํํ๋ค.unitless(number)
: ๋จ์๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ํ๋จํ์ฌ true,false ๊ฐ์ ๋ฐํํ๋ค.variable-exists(name)
: ๋ณ์๊ฐ ํ์ฌ ๋ฒ์์ ์กด์ฌํ๋์ง ํ๋จํ์ฌ true,false ๊ฐ์ ๋ฐํํ๋ค. ์ด ํจ์์ ์ธ์๋$
์์ด ์ฌ์ฉํ๋ค.
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ({ ํ์ด๋ณด๋ Sass๐ ๐ป }), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@dev-leesaerom/ํ์ด๋ณด๋-Sass์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค