第4章 高度な機能を覚えてSassを使いこなそう
4-3 制御構文 で条件分岐や繰り返し処理を行う
@if を使って条件分岐をする
// 汎用的なclassを使うかどうか $generalStyle: true; @if $generalStyle { .fl { float: left; } .fr { float: right; } }
$getStyle: 0; @mixin style { @if $getStyle == 1 { margin: 0 0 30px; padding: 15px; background: #eee; } @else if $getStyle == 2 { margin: 0 10px 15px; padding: 20px 15px; border: 2px solid #333; } @else { margin: 0 0 10px; } } .box { @include style; }
.box { margin: 0 0 10px; }
.box { margin: 0 10px 15px; padding: 20px 15px; border: 2px solid #333; }
@for で繰り返し処理を行う
@for $value from 1 through 3 { .throughSample_#{$value} { margin-bottom: 1px * $value; } } @for $value from 1 to 3 { .toSample_#{$value} { margin-bottom: 1px * $value; } }
.throughSample_1 { margin-bottom: 1px; } .throughSample_2 { margin-bottom: 2px; } .throughSample_3 { margin-bottom: 3px; } .toSample_1 { margin-bottom: 1px; } .toSample_2 { margin-bottom: 2px; }
@for $value from 1 through 2 { .mt_#{$value * 10} { margin-top: 10px * $value; } .mb_#{$value * 10} { margin-bottom: 10px * $value; } }
.mt_10 { margin-top: 10px; } .mb_10 { margin-bottom: 10px; } .mt_20 { margin-top: 20px; } .mb_20 { margin-bottom: 20px; }
@while でより柔軟な繰り返し処理を行う
$value: 20; @while $value > 0 { .mt_#{$value} { margin-top: #{$value}px } .mb_#{$value} { margin-bottom: #{$value}px } $value: $value - 10; }
$index: 300; @while $index > 200 { .box_#{$index} { width: 2px * $index; } $index: $index - 32; }
.box_300 { width: 600px; } .box_268 { width: 536px; } .box_236 { width: 472px; } .box_204 { width: 408px; }
@each で配列の要素に対して処理を実行する
.body-top { background-image: url(../img/bg_top.png); } .body-about { background-image: url(../img/bg_about.png); } .body-company { background-image: url(../img/bg_company.png); } .body-contact { background-image: url(../img/bg_contact.png); }
$nameList: top, about, company, contact; @each $name in $nameList { .body-#{$name} { background-image: url(../img/bg_#{$name}.png); } }