概要と目標
Sassでも条件分岐や、
ループを使おう。
Sassでもif文やfor文など
これからを覚えて、柔軟に修正できるSassを書けるようになろう。
Sassでもif文やfor文など
これからを覚えて、柔軟に修正できるSassを書けるようになろう。
条件分岐を使って、特定の条件の時のみスタイルを追加するなどという事ができる。
@if 条件式 {
// 条件式が true の時のスタイル
} @else {
// 条件式が false の時のスタイル
}
@else { } は省略可能。
// 設定
$position: 'left'; // 右にする場合は 'right' にする
// Mixin
@mixin fadeLink ($speed: .3s, $opacity: .7) {
transition: all $speed ease-in-out;
&:hover {
opacity: $opacity;
}
}
.button-hamburger {
position: absolute;
top: 0;
bottom: 0;
@if $position == 'left' {
// 条件に一致した時に追加するスタイル
left: 2.5%;
}
@if $position == 'right' {
// 条件に一致した時に追加するスタイル
right: 2.5%;
}
width: 1.5em;
height: 1.5em;
margin: auto 0;
}
.banner {
@include fadeLink();
}
.button-hamburger {
position: absolute;
top: 0;
bottom: 0;
left: 2.5%;
width: 1.5em;
height: 1.5em;
margin: auto 0;
}
.banner {
-webkit-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
.banner:hover {
opacity: 0.7;
}
// 設定
$position: 'left'; // 右にする場合は 'right' にする
$is-support-ie8: true; // IE8に対応しない場合は false にする
// Mixin
@mixin fadeLink ($speed: .3s, $opacity: .7) {
transition: all $speed ease-in-out;
&:hover {
opacity: $opacity;
@if $is-support-ie8 {
filter: alpha(opacity=$opacity * 100);
}
}
}
.button-hamburger {
position: absolute;
top: 0;
bottom: 0;
@if $position == 'left' {
// 条件に一致した時に追加するスタイル
left: 2.5%;
}
@if $position == 'right' {
// 条件に一致した時に追加するスタイル
right: 2.5%;
}
width: 1.5em;
height: 1.5em;
margin: auto 0;
}
.banner {
@include fadeLink();
}
.banner {
-webkit-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
.banner:hover {
opacity: 0.7;
filter: alpha(opacity=70);
}
2つの値を比較する時は、比較演算子を用いる。
| 演算子 | 説明 |
|---|---|
A > B |
A が B より大きい時 true |
A < B |
A が B より小さい時 true |
A >= B |
A が B 以上の時 true |
A <= B |
A が B 以下の時 true |
A == B |
A が B と等しい時 true |
A != B |
A が B と異なる時 true |
A === B |
A が B とデータ型も含めて等しい時 true |
A !== B |
A が B とデータ型も含めて異なる時 true |
何度も同じような処理を繰り返す場合は、反復を活用する。
Sassでもfor文や、while文が使える。
@for ループ用の変数名 from ループ開始値 though ループ終了値 {
// ループ開始値 から ループ終了値以下まで繰り返す処理
}
@for ループ用の変数名 from ループ開始値 to ループ終了値 {
// ループ開始値 から ループ終了値未満まで繰り返す処理
}
// グリッド数の設定
$column: 12;
@for $i from 1 through $column {
.grid--#{$i} {
width: percentage($i / $column);
}
}
.grid--1 {
width: 8.33333%;
}
.grid--2 {
width: 16.66667%;
}
.grid--3 {
width: 25%;
}
.grid--4 {
width: 33.33333%;
}
.grid--5 {
width: 41.66667%;
}
.grid--6 {
width: 50%;
}
.grid--7 {
width: 58.33333%;
}
.grid--8 {
width: 66.66667%;
}
.grid--9 {
width: 75%;
}
.grid--10 {
width: 83.33333%;
}
.grid--11 {
width: 91.66667%;
}
.grid--12 {
width: 100%;
}
@while ループ継続条件 {
// 条件に一致する間、繰り返す処理
}
// ループ用変数の初期化
$i: 1;
@while $i <= 12 {
.grid--#{$i} {
width: percentage($i / 12);
$i: $i + 1; // ループ用変数の増減
}
}
Sassは、「,(半角カンマ)」、「 (半角スペース)」、「( )(丸括弧)」で区切ったものを配列して扱う。
また、配列をループするのに便利な @eachという構文がある。
配列名: 値1, 値2, 値3;
配列は「 (半角スペース)」、「( )(丸括弧)」で区切っても作成できる。
@each 値を取り出す変数名 in 配列名 {
// 配列の要素の数だけ繰り返す
}
// 配列の作成
$page-names: 'home' 'about' 'service';
// 配列のループ
@each $page-name in $page-names {
.hero-#{$page-name} {
background-image: url(../images/bg-#{$page-name}.png);
}
}
.hero-home {
background-image: url(../images/bg-home.png);
}
.hero-about {
background-image: url(../images/bg-about.png);
}
.hero-service {
background-image: url(../images/bg-service.png);
}
マップ名: (
キー1: 値1,
キー2: 値2,
キー3: 値3
);
@each キーを取り出す変数名, 値を取り出す変数名 in 配列名 {
// 配列の要素の数だけ繰り返す
}
// マップの作成
$gutters: (
'small': .5em,
'medium': 1em,
'large': 1.5em,
'xlarge': 2em
);
// マップの取り出し
@each $key, $val in $gutters {
.u-mt--#{$key} {
margin-top: $val;
}
}
.u-mt--small {
margin-top: 0.5em;
}
.u-mt--medium {
margin-top: 1em;
}
.u-mt--large {
margin-top: 1.5em;
}
.u-mt--xlarge {
margin-top: 2em;
}
独自関数は、よく使う値の処理を登録しておく機能。
作成方法も使い方も@mixinと非常によく似ているが、
独自関数は主に値に使うことが多い。
@function 関数名(引数) {
// 関数として登録する処理
@return 戻り値;
省略可
}
引数は「,(半角カンマ)」区切りで複数指定可能(必要ない場合は省略も可能)
呼び出す関数名(引数);
値を「px」から「em」に変換してくれる関数を作ってみよう。
// 関数の登録
@function set-size($size, $base-font-size: 16px) {
@return ($size / $base-font-size) * 1em;
}
.box {
font-size: set-size(24px);
padding: set-size(24px, 24px);
margin: set-size(16px, 24px);
}
.box {
font-size: 1.5em;
padding: 1em;
margin: 0.66667em;
}
Sassでも、@if や @for などの、
便利な制御構文などが使える。