Syntax-09-flow-control
#
Sass(SCSS) Syntax - 9. ํ๋ฆ ์ ์ด(Flow Control)โ๏ธ ํด๋น ๊ธ์ ํจ์คํธ์บ ํผ์ค - ํ๋ก ํธ์๋ ๊ฐ๋ฐ ๊ฐ์์์ HTML & CSS, SASS(SCSS) Part์ ๋ฐ์์ ๊ฐ์ฌ๋์ ๊ฐ์์๋ฃ(Sass(SCSS) ์์ ์ ๋ณต!)๋ฅผ ๋ณด๋ฉฐ ์ ๋ฆฌํ ๊ฒ์ ๋๋ค.
#
ํ๋ฆ ์ ์ด(Flow Control)#
if (ํจ์)์กฐ๊ฑด์ ๊ฐ( true
, false
)์ ๋ฐ๋ผ ๋ ๊ฐ์ ํํ์ ์ค ํ๋๋ง ๋ฐํํ๋ค.
JS์ ์กฐ๊ฑด๋ถ ์ผํญ ์ฐ์ฐ์(conditional ternary operator)์ ๋น์ทํ ๊ฐ๋
์กฐ๊ฑด์ ๊ฐ์ด true
์ด๋ฉด ํํ์1
์,
์กฐ๊ฑด์ ๊ฐ์ด false
์ด๋ฉด ํํ์2
๋ฅผ ์คํํ๋ค.
if(์กฐ๊ฑด, ํํ์1, ํํ์2)
$width: 555px;div { width: if($width > 300px, $width, null);}
์ปดํ์ผํ๋ฉด
div {width: 555px;}
@if
#
@if
๋ ์กฐ๊ฑด์ด ๋ฐ๋ฅธ ๋ถ๊ธฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
๊ฐ์ด ์ฌ์ฉํ ์ ์๋ ์ง์์ด๋ก๋ @else
, @else if
๊ฐ ์๋ค.
// @if@if (์กฐ๊ฑด) { /* ์กฐ๊ฑด์ด ์ฐธ์ผ ๋ ๊ตฌ๋ฌธ */}
// @if @else@if (์กฐ๊ฑด) { /* ์กฐ๊ฑด์ด ์ฐธ์ผ ๋ ๊ตฌ๋ฌธ */} @else { /* ์กฐ๊ฑด์ด ๊ฑฐ์ง์ผ ๋ ๊ตฌ๋ฌธ */}
// @if @else if@if (์กฐ๊ฑด1) { /* ์กฐ๊ฑด1์ด ์ฐธ์ผ ๋ ๊ตฌ๋ฌธ */} @else if (์กฐ๊ฑด2) { /* ์กฐ๊ฑด 1์ด ๊ฑฐ์ง์ด๊ณ , ์กฐ๊ฑด2๊ฐ ์ฐธ์ผ ๋ ๊ตฌ๋ฌธ */} @else { /* ๋ชจ๋ ๊ฑฐ์ง์ผ ๋ ๊ตฌ๋ฌธ */}
์กฐ๊ฑด์ ()
๋ ์๋ต ๊ฐ๋ฅํ๋ค.
$color: orange;div { @if $color == strawberry { color: #FE2E2E; } @else if $color == orange { color: #FE9A2E; } @else if $color == banana { color: #FFFF00; } @else { color: #2A1B0A; }}
์ปดํ์ผํ๋ฉด
div {color: #FE9A2E;}
๋
ผ๋ฆฌ ์ฐ์ฐ์ and
, or
, not
์ ์ฌ์ฉํ ์ ์๋ค.
@function limitSize($size) { @if $size >= 0 and $size <= 200px { @return 200px; } @else { @return 800px; }}
div { width: limitSize(180px); height: limitSize(340px);}
์ปดํ์ผํ๋ฉด
div {width: 200px;height: 800px;}
๋ด์ฅ ํจ์ unitless()
(์ซ์์ ๋จ์๊ฐ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ฐํํ๋ ํจ์)๋ฅผ ์ฌ์ฉํ๋ ์์
@mixin pCenter($w, $h, $p: absolute) { @if $p == absolute or $p == fixed or not $p == relative or not $p == static { width: if(unitless($w), #{$w}px, $w); height: if(unitless($h), #{$h}px, $h); position: $p; top: 0; bottom: 0; left: 0; right: 0; margin: auto; }}
.box1 { @include pCenter(10px, 20px);}.box2 { @include pCenter(50, 50, fixed);}.box3 { @include pCenter(100, 200, relative);}
์ปดํ์ผํ๋ฉด
.box1 {width: 10px;height: 20px;position: absolute;top: 0;bottom: 0;left: 0;right: 0;margin: auto;}.box2 {width: 50px;height: 50px;position: fixed;top: 0;bottom: 0;left: 0;right: 0;margin: auto;}
@for
#
@for
๋ ์คํ์ผ์ ๋ฐ๋ณต์ ์ผ๋ก ์ถ๋ ฅํ๋ค.
@for
๋ through
๋ฅผ ์ฌ์ฉํ๋ ํ์๊ณผ to
๋ฅผ ์ฌ์ฉํ๋ ํ์์ผ๋ก ๋๋๋ค.
๋ ํ์์ ์ข ๋ฃ ์กฐ๊ฑด์ด ํด์๋๋ ๋ฐฉ์์ด ๋ค๋ฅด๋ค.
// through// ์ข
๋ฃ ๋งํผ ๋ฐ๋ณต@for $๋ณ์ from ์์ through ์ข
๋ฃ { // ๋ฐ๋ณต ๋ด์ฉ}
// to// ์ข
๋ฃ ์ง์ ๊น์ง ๋ฐ๋ณต@for $๋ณ์ from ์์ to ์ข
๋ฃ { // ๋ฐ๋ณต ๋ด์ฉ}
์ฐจ์ด์ ์ ์ดํดํ๊ธฐ ์ํ ๋ค์ ์์
๋ณ์๋ ๊ด๋ก์ $i
๋ฅผ ์ฌ์ฉํ๋ค.
// 1๋ถํฐ 3๋ฒ ๋ฐ๋ณต@for $i from 1 through 3 { .through:nth-child(#{$i}) { width : 20px * $i }}
// 1๋ถํฐ 3 ์ง์ ๊น์ง๋ง ๋ฐ๋ณต(2๋ฒ ๋ฐ๋ณต)@for $i from 1 to 3 { .to:nth-child(#{$i}) { width : 20px * $i }}
์ปดํ์ผํ๋ฉด
.through:nth-child(1) { width: 20px; }.through:nth-child(2) { width: 40px; }.through:nth-child(3) { width: 60px; }.to:nth-child(1) { width: 20px; }.to:nth-child(2) { width: 40px; }
to
๋ ์ฃผ์ด์ง ๊ฐ ์ง์ ๊น์ง๋ง ๋ฐ๋ณตํด์ผํ ๊ฒฝ์ฐ ์ฌ์ฉ.
ํ์ง๋ง :nth-child()
์์ ํนํ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ @for
๋ ์ผ๋ฐ์ ์ผ๋ก through
๋ฅผ ์ฌ์ฉํ๋ค.
@each
#
@each
๋ List์ Map ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณตํ ๋ ์ฌ์ฉ.
for in
๋ฌธ๊ณผ ์ ์ฌํ๋ค.
@each $๋ณ์ in ๋ฐ์ดํฐ { // ๋ฐ๋ณต ๋ด์ฉ}
List ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณตํ๋ ์์ .
// List Data$fruits: (apple, orange, banana, mango);
.fruits { @each $fruit in $fruits { li.#{$fruit} { background: url("/images/#{$fruit}.png"); } }}
์ปดํ์ผํ๋ฉด
.fruits li.apple {background: url("/images/apple.png");}.fruits li.orange {background: url("/images/orange.png");}.fruits li.banana {background: url("/images/banana.png");}.fruits li.mango {background: url("/images/mango.png");}
๋งค๋ฒ ๋ฐ๋ณต๋ง๋ค Index
๊ฐ์ด ํ์ํ ๊ฒฝ์ฐ์ index()
๋ด์ฅ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
$fruits: (apple, orange, banana, mango);
.fruits { @each $fruit in $fruits { $i: index($fruits, $fruit); li:nth-child(#{$i}) { left: 50px * $i; } }}
์ปดํ์ผํ๋ฉด
.fruits li:nth-child(1) {left: 50px;}.fruits li:nth-child(2) {left: 100px;}.fruits li:nth-child(3) {left: 150px;}.fruits li:nth-child(4) {left: 200px;}
๋์์ ์ฌ๋ฌ ๊ฐ์ List ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณต ์ฒ๋ฆฌํ ์๋ ์๋ค.
$apple: (apple, korea);$orange: (orange, china);$banana: (banana, japan);
@each $fruit, $country in $apple, $orange, $banana { .box-#{$fruit} { background: url("/images/#{$country}.png"); }}
์ปดํ์ผํ๋ฉด
.box-apple {background: url("/images/korea.png");}.box-orange {background: url("/images/china.png");}.box-banana {background: url("/images/japan.png");}
Map ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณตํ ๊ฒฝ์ฐ์๋ ํ๋์ ๋ฐ์ดํฐ์ ๋ ๊ฐ์ ๋ณ์๊ฐ ํ์ํ๋ค.
@each $key๋ณ์, $value๋ณ์ in ๋ฐ์ดํฐ { // ๋ฐ๋ณต ๋ด์ฉ}
$fruits-data: ( apple: korea, orange: china, banana: japan);
@each $fruit, $country in $fruits-data { .box-#{$fruit} { background: url("/images/#{$country}.png"); }}
์ปดํ์ผํ๋ฉด
.box-apple {background: url("/images/korea.png");}.box-orange {background: url("/images/china.png");}.box-banana {background: url("/images/japan.png");}
@while
#
@while
์ ์กฐ๊ฑด์ด false
๋ก ํ๊ฐ๋ ๋๊น์ง ๋ด์ฉ์ ๋ฐ๋ณตํ๋ค. while
๋ฌธ๊ณผ ์ ์ฌํ๊ฒ ์๋ชป๋ ์กฐ๊ฑด์ผ๋ก ์ธํด ์ปดํ์ผ ์ค ๋ฌดํ ๋ฃจํ์ ๋น ์ง ์ ์๋ค.
@while ์กฐ๊ฑด { // ๋ฐ๋ณต ๋ด์ฉ}
$i: 6;
@while $i > 0 { .item-#{$i} { width: 2px * $i; } $i: $i - 2;}
์ปดํ์ผํ๋ฉด
.item-6 { width: 12px; }.item-4 { width: 8px; }.item-2 { width: 4px; }
#
Referenceํจ์คํธ์บ ํผ์ค - ํ๋ก ํธ์๋ ๊ฐ๋ฐ ๊ฐ์ - HTML & CSS, SASS(SCSS) Part by ParkYoungWoong