前回のエントリで「Sassを使うとコードが分かりやすくなる? – ネスト化を利用しよう」を書きましたが、今回はCSS3を利用してhover時のアニメーションや、角丸、hover自体の記述をmixin化してまとめてしまいます。記述をまとめてしまうことでコピー&ペーストが減るので楽ができますね。では早速以下のソースを見てみましょう。
/*---------------------------------------------------------- 角丸 ----------------------------------------------------------*/ @mixin border_radius($value: 5px) { -webkit-border-radius: $value; -moz-border-radius: $value; -ms-border-radius: $value; -o-border-radius: $value; border-radius: $value; } /*---------------------------------------------------------- アニメーション ----------------------------------------------------------*/ @mixin transition($change: "background-color") { -webkit-transition: #{$change} 0.2s linear; -moz-transition: #{$change} 0.2s linear; -ms-transition: #{$change} 0.2s linear; -o-transition: #{$change} 0.2s linear; transition: #{$change} 0.2s linear; } /*---------------------------------------------------------- hover ----------------------------------------------------------*/ @mixin hover($property: "background-color", $value: "green") { &:hover { #{$property}: #{$value}; } } @mixin hover_bc($value: "green") { @include hover("background-color", $value); }
上記のSassのソースコードは、角丸、アニメーション、ホバー時のCSS3の記述をまとめたものです。これを以下のソースのように使用します。
/*********************************************************** マークアップ ***********************************************************/ div.row_line { background-color: $backcolor_line; width: $line_width; margin: auto; height: $top_grid; position: relative; // アイコン表示 a { background-color: $backcolor_icon; display: block; position: absolute; width: $icon_size; height: $icon_size; top: $icon_margin; @include border_radius(); @include transition(); &.icon1 { right: $icon_margin + ($icon_size + $icon_margin)*2; @include hover_bc("blue"); } &.icon2 { right: $icon_margin + ($icon_size + $icon_margin); @include hover_bc("yellow"); } &.icon3 { right: $icon_margin; @include hover_bc("red"); } } }
mixinの使い方は「Sassで角丸の矩形を超簡単に記述する方法」にて記述しています。しかし、hover_bc()関数の定義の上にあるhover()関数に注目してください。「#{…}」という妙な記載がされていることに気がついたでしょうか。この記述方法はインターポレーションと言います。名称は覚えなくていいですが、効果は「セレクタやプロパティ名自体に変数が使える」という強力なものです。この機能を使うことで、「:hover {…}」という記載自体をmixin化しています。更によく使う背景色の変更をhover_bc()関数として宣言しているため、簡単にホバー時に色を変えられるようにしてみました。便利すぎる!