そのミックスインや関数は本当に必要? 手段の目的化に注意を。
仕事で案件に関わっていると、特段必要がないにも関わらずSass機能を使っているファイルを見かけることがある。
例えば、
1 2 3 4 5 6 7 | $font-family: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "MS Pゴシック", "MS PGothic", "Osaka", sans-serif; $font-size: 87.5%; body { font-family: $font-family; font-size: $font-size; } |
一体何の意味が? 変数を使う必要がない。
実務におけるSassの使い方を見直す。
設定しているミックスイン
フォントサイズ
- px or rem の場合は2行目と3行目を使用
- % の場合は4行目のみを使用
- 16 はブラウザデフォルトのフォントサイズ
- body でフォントサイズを指定する場合は、16 をその数字に修正
1 2 3 4 5 6 7 8 9 | @mixin fs($num) { font-size: $num + px; font-size: ($num / 16) + rem; // font-size: percentage($num / 16); } p { @include fs(14); } |
1 2 3 4 5 6 7 8 9 | p { font-size: 14px; font-size: 0.875rem; } // %を使用した場合 p { font-size: 87.5%; } |
テキストを画像置換
Compassの「replace-text」は -119988px なのでイマイチ。
1 2 3 4 5 | @mixin hide { text-indent: 100%; white-space: nowrap; overflow: hidden; } |
リストのマーカー
- _reset.scss でマーカーを削除しているため一部分で必要なときに便利
- ブラウザのデフォルトスタイルを設定
1 2 3 4 5 6 7 8 | @mixin ul($pd: 40, $marker: disc) { list-style-type: $marker; padding-left: $pd + px; } @mixin ol($pd: 40, $marker: decimal) { list-style-type: $marker; padding-left: $pd + px; } |
ブレークポイント
この書き方が最も効率的。
1 2 3 4 5 6 7 8 9 10 | @mixin min($width) { @media screen and (min-width: $width + px) { @content; } } @mixin max($width) { @media screen and (max-width: $width + px) { @content; } } |
clearfix
両方を用意するのは下記の理由から。
- @include はショートカット(+ -> Tab)があるので楽
- コンパイル後のコードが気になるなら@extend に一括置換すればOK
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @mixin cf { zoom: 1; &:after { content: ""; display: table; clear: both; } } .cf { zoom: 1; &:after { content: ""; display: table; clear: both; } } |
デフォルト機能で使っているもの
lighten() / darken()
先方からのリンクカラー指定がない場合に便利。
1 2 3 4 5 6 7 | a { color: darkblue; &:hover { color: lighten(darkblue, 10%); } } |
1 2 3 4 5 6 | a { color: darkblue; } a:hover { color: #0000be; } |
ベンダープレフィックスは?
gulp で自動化しちゃいましょう。
これじゃ少ないのでは?
と思う人がいるかもしれないので、絶対配置をミックスイン化してみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | @mixin pos($num: 0 0 0 0) { position: absolute; $top: nth($num, 1); $bottom: nth($num, 2); $left: nth($num, 3); $right: nth($num, 4); @if not(unitless($top)) { top: $top; } @if not(unitless($bottom)) { bottom: $bottom; } @if not(unitless($left)) { left: $left; } @if not(unitless($right)) { right: $right; } } |
順番変えた方がいいかな? いや逆の方がいいかな?
試行錯誤している時にふと気がついた。
普通のCSSで書いた方が早い…
1 2 3 4 5 | .item-ic { position: absolute; top: 0; right: 20px; } |
普通に書いた方が楽ならそれに越したことはなく、無理をしてまでSassを使う必要はない。
普通に書いた方が楽なもの
上記の absolute 以外にも、ミックスインや関数を利用するより普通に書いた方が楽なものは意外と多い。
background-image
異なるディレクトリで画像ファイル名が被るかもしれないので、パス補完をしてくれる URL Helpers は使い難い。
border-radius
一行で終わる。
1 2 3 | p { border-radius: 5px; } |
box-sizing
Sassが不要。
1 2 3 | * { box-sizing: border-box; } |
box-shadow
一行で終わる。
1 2 3 | #container { box-shadow: 0 1px 0 white; } |
linear-gradient
一行で終わる。
1 2 3 | body { background: linear-gradient(left, #304352, #d7d2cc); } |
text-shadow
一行で終わる。
1 2 3 | p { text-shadow: 0 1px solid white; } |
transition
一行で終わる。
1 2 3 4 5 6 7 8 9 | a { color: darkblue; transition: 0.2s linear; &:hover { color: white; background: darkblue; } } |
Sass&Compass徹底入門 CSSのベストプラクティスを効率よく実現するために (DESIGN & WEB TECHNOLOGY)
posted with amazlet at 15.07.31
Wynn Netherland Nathan Weizenbaum Chris Eppstein Brandon Mathis
翔泳社
売り上げランキング: 252,728
翔泳社
売り上げランキング: 252,728
コメントを投稿する