久しぶりにCSSではなくSassを使いました。過去、Sassは変数の定義やbreak pointの設定が便利なので、使ってはいたもののそこまで使いこなせてはいませんでした。
ま、今も使いこなせてはいないのですが!(笑)
とはいえ、以前よりかmixinの使い勝手の良さと、新たにextendという武器の利便性の良さに感動したので記事書きます。w
@mixin @extend どっち使えばいい問題
結論から申し上げます!
全体的に共通しているルールをグループにしたい時 = @extend
ほぼ共通しているが、値が可変するものをパーツにしたい時 = @mixin
なんと。mixinの方は、引数を入れる事ができます。引数を利用することで、@includeした先々で特定の値を変更する事ができます。
exendは、コード例をご覧いただくと一目瞭然ですが、コンパイル後のCSS上ではグループになって書き出しがされます。これによって、ソースの順序がネスト化(入れ子)してしまう可能性があります。
extendは、本当に必要な場所に使用して多用するのは控えたいです。
@mixin コード例
SCSS(引数なし)
@mixin cnotent(){
font-size: 1.6rem;
color: #fff;
padding: 5%;
}
.content_1{
width: 50%;
@include cnotent();
}
.content_2{
width: 70%;
@include cnotent();
}
コンパイル後のCSS
.content_1 {
width: 50%;
font-size: 1.6rem;
color: #fff;
padding: 5%;
}
.content_2 {
width: 70%;
font-size: 1.6rem;
color: #fff;
padding: 5%;
}
SCSS(引数あり)
@mixin cnotent($width){
font-size: 1.6rem;
color: #fff;
padding: 5%;
width: $width;
}
.content_1{
@include cnotent(50%);
}
.content_2{
@include cnotent(70%);
}
コンパイル後のCSS
.content_1 {
font-size: 1.6rem;
color: #fff;
padding: 5%;
width: 50%;
}
.content_2 {
font-size: 1.6rem;
color: #fff;
padding: 5%;
width: 70%;
}
引数ありの方は、Sassの記述がスマートです。
わぁ~感動!
@extend コード例
SCSS
%content{
font-size: 1.6rem;
color: #fff;
padding: 5%;
}
.content_1{
width: 50%;
@extend %content;
}
.content_2{
width: 70%;
@extend %content;
}
グループ化したいメソッド名に「%」をつける事で、CSS上で非表示にすることができます。
コンパイル後のCSS
.content_1, .content_2 {
font-size: 1.6rem;
color: #fff;
padding: 5%;
}
.content_1 {
width: 50%;
}
.content_2 {
width: 70%;
}
mixinとの違いが一目瞭然です!
font-familyやその他、全体を通して共通するものに関してはextendが使えそうです。