๐ท๏ธ Sass์ ๋ฌธ๋ฒ โ SCSS ๋ฌธ๋ฒ๊ณผ Sass ๋ฌธ๋ฒ
โ๏ธ SCSS ๋ฌธ๋ฒ โ ์ฝง์์ผ๋ฌธ๋ฒ, ์ค๊ดํธ๋ฌธ๋ฒ
โ CSS๊ตฌ๋ฌธ๊ณผ ๋ฌธ์ ์์ด ํธํ๋๊ธฐ ๋๋ฌธ์ ๋ง์ด ์ฌ์ฉํ๋ค.
โ๏ธ Sass ๋ฌธ๋ฒ โ ์ธ๋ฒคํ ์ด์ ๋ฌธ๋ฒ, ๋ค์ฌ์ฐ๊ธฐ ๋ฌธ๋ฒ, ์ธ๋ฏธ์ฝ๋ก ์์
โ SCSS์ ๋นํด ์๋์ ์ผ๋ก CSS์ ํธํ๋์ง ์์ ์ฌ์ฉ์จ์ด ์ ์ง๋ง SCSSํ์ผ๊ณผ ํธํ ๊ฐ๋ฅํ๋ฏ๋ก ํ์ํ ๊ฒฝ์ฐ ์ด ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ค.
๐ท๏ธ ์ค์น ๋ฐฉ๋ฒ ๊ผญ ํ์ธ
npm i sass
โ dart-Sassnpm i node-sass
โ libSass๐ npx sass scss:css --style=compressed
๐ npx sass scss:css --no-source-map
/*# sourceMappingURL=style.css.map */
์๋จ๋ฉด ์์ค๋งต์ด ์๋ง๋ค์ด์ง ๊ฒ์ด๋ค.๐ npx sass scss:css โwatch
๐ท๏ธ ๋จ์ถํค
๐ rimraf
๐ npm-run-all
๐ ์ฃผ์
/**/
์ปดํ์ผ๋ CSS ํ์ผ์ ๋จ์ ์๋ค.//
์ปดํ์ผ ๊ฒฐ๊ณผ์ ์ถ๋ ฅ๋์ง ์๋๋ค.๐ ๋ณ์ ์ ์ธ
$๋ณ์์ด๋ฆ : ๊ฐ
menu-list
= menu_list
!global
ํ๋๊ทธ ์ฌ์ฉ๐ ์ค์ฒฉ ๋ฐ ์์์ ํ์
&:ํ์์์
&
๋ ์์์ ํ์๋ฅผ ๊ฐ๋ฆฌํค๋ ํน๋ณํ ์ ํ์.menu {
list-style: none;
padding-left: 0;
&__item {
margin-top: 16px;
}
}
.Menu{
//.menu__list
&__list{
background : #fff;
}
}
๐ ๋ชจ๋
@use
์ ์ํด ๋ถ๋ฌ์์ง ์คํ์ผ = ๋ชจ๋@use
@use โ๋ถ๋ฌ์ฌ ํด๋/ํ์ผโ
๐ ๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ
.
) ๋ฌธ๋ฒ์ ์ฌ์ฉํด ๋ชจ๋์ ๋ณ์ ๋ฑ์ ์ ๊ทผํ ์ ์๋ค.โ ์์นํํ์ผ.$๋ณ์์ด๋ฆ
@use "./themes/themes";
@use "./utils/mixins";
body {
background: themes.$purple;
color: mixins.$purple;
}
as ๋ณ์นญ
โ ๋ถ๋ฌ์ฌ๋๋ ๋ณ์นญ.$๋ณ์์ด๋ฆ
โ ๋ณ์นญ์ด *
์ผ ๊ฒฝ์ฐ ๋ค์์คํ์ด์ค ์์ด ์ ๊ทผ ๊ฐ๋ฅํ๋ค.@use "./themes/themes" as *;
@use "./utils/mixins" as mix;
body {
background: $purple;
color: mix.$purple;
}
๐ partial
ํ์ดํ(-)
๋๋ ์ธ๋์ค์ฝ๋(_)
๊ฐ ๋ถ์ ๊ฒฝ์ฐ ๋น๊ณต๊ฐ๊ฐ ๋๋ค. โ ๋น๊ณต๊ฐ๋ ์ค์ง ํด๋น ๋ฉค๋ฒ๋ฅผ ์ ์ํ ํ์ผ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๊ณ ์ธ๋ถ์์๋ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค.์น
๐ ๋ชจ๋ ๋ด๋ณด๋ด๊ธฐ
@forward
-> Sassํ์ผ์ ๋ชจ๋์ ๋ถ๋ฌ์ ๋ค์ ๋ด๋ณด๋ด์ค๋ค.๐ป sass/modules/_index.scss
๐ป common.scss
@forward 'config';
@forward 'base';
@forward 'colors';
@forward 'layout';
@forward 'typography';
@forward 'spacing';
@use 'modules' as *;
.container {
margin-top: $spacing-2;
color: $primary-500;
}
๐ ๋ฏน์ค์ธ
@mixin flexbox {
display: flex;
flex-flow: row nowrap;
justify-content: flex-start;
align-items: center;
}
ul {
@include resetList;
@include flexbox;
background: pink;
}
๐ ๋ฏน์ค์ธ ํ์ฅ
@mixin flexbox($fd: row, $jc: flex-start) {
display: flex;
flex-flow: $fd nowrap;
justify-content: $jc;
align-items: center;
}
ul {
@include resetList;
@include flexbox($fd: space-between);
@include autoMargin;
width: 500px;
background: pink;
}
๐ ํ์ฅ / ์์
%
๋ฅผ ์ฌ์ฉํด ์ ์ธํ ํ๋ ์ด์คํ๋ ํด๋์ค๋ ์คํ์ผ์ ํ์ฅํ ๋๋ง ์ฌ์ฉ๋๋ค.@extend
๋ฅผ ์ฌ์ฉํ๋ค.%a11yHidden {
overflow: hidden;
position: absolute;
clip: rect(0, 0, 0, 0);
clip-path: circle(0);
width: 1px;
height: 1px;
margin: -1px;
border: 0;
padding: 0;
white-space: nowrap;
}
@mixin makeA11yHidden($selector) {
#{$selector} {
@extend %a11yHidden;
}
}
๐ ์ฐ์ฐ์
+
, -
, *
, %
) ๋ฐ ์ํ ํจ์(math,div()
, calc()
โฆ) ๋ฑcalc()
โ ๊ณ์ฐ์math.div(a, b)
โ a ๋๋๊ธฐ b ๊ณ์ฐ์ โ a์ b๊ฐ ๊ณต์ ํ๋ ๋ชจ๋ ๋จ์๋ ์ทจ์๋๋ค. โ css์์๋ / ๊ธฐํธ๋ ๊ตฌ๋ถ ๊ธฐํธ๋ก ์ฌ์ฉ๋๋ฏ๋ก math.div()
๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.์ฃผ๋ง์ ๋ฏธ๋ฆฌ ์์ตํ๊ณ ์ค๊ธธ ์ํ๋ค. ๊ฐ์๋ฅผ ์๋ฃ๊ณ ์์ผ๋ฉด ์ค๋ ์์
ํ๋๋ ๋ชป์์๋ค์ ๋ปํ๋ค.
๊ฐ์๋ฅผ ๋ฒ์ด๋๋ ๋ถ๋ถ์ ์ญ์๋ ๋ชป์์๋ค์๋ค. ๊ฐ์ฌ๋์ด ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ํด์ฃผ์
จ๋๋ฐ๋ ๋ชป์์๋ค์๋คใ
ใ
ใ
๋ ๋๋ง ๋ชป์์๋ค์์งใ
ใ
ใ
ใ
์ด์ ์ดํ๋์ Sass ๋ก ๋ฏธ๋ ํ๋ก์ ํธ๋ฅผ ํ๋๋ฐ ์ ํ ์์์ด์ผํ ํ
๋ฐ ๊ฑฑ์ ์ด๋ค
ํญ์ผ๋๋ฌธ์ ์ง์ด ๋๋ฌด ๋์์ ์ง์ค์ ๋ชปํ ๊ฒ๋ ์์๋ค. ๊ฒฐ๊ตญ ์ฐธ๊ณ ์ฐธ๋ค๊ฐ ์์ด์ปจ์ ํ์๋๋ฐ ์ด๋ฒ๋ฌ ์ ๊ธฐ์ธ ํญํ๋ง์ ๊ฒ ๊ฐ๋ค. ์ ๋นํ ๋์์ผ์ง... ์ด๋ ค์ฃผ์ธ์...