こんにちは。今回は省略してより簡潔に書けるかもしれないCSS記法4例とおまけ1つを紹介します。
サンプルコードでは冗長な記法のクラスを.verbose {...}
、簡潔な記法のクラスを.concise{...}
として書いていきます。
省略できる初期値
transition: all;
時間遷移効果を与えるtransition-property
プロパティの初期値はall
なので、transition: all
と記述する必要はありません1。
さらに遷移変化の進行割合を表すtransition-timing-function
プロパティは初期値がease
なので2、もしease
に設定する場合はこれも不要になります。
.verbose{
transition: all .3s ease;
}
.concise{
transition: .3s;
}
margin: 0 auto;
左右中央寄せ目的で書かれることが多いmargin: 0 auto;
ですが、そもそもmargin: auto
の初期値は0です3 4。そのため以下のように省略可能なことが多い。
.verbose{
margin: 0 auto;
}
.concise{
margin: auto;
}
position:absolute;
を使った上下左右中央寄せなどのケースではmargin: 0 auto;
とmargin: auto;
は振る舞いが変わるので注意です。
/*このようなケースでは位置が変わることがあります*/
/*上下左右中央寄せ*/
.some-box{
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
}
.other-box{
/*左右は中央寄せのまま親相対要素の上にくっつく*/
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: 0 auto;
}
省略できる単位と0
0に単位は不要
0という数値にpxやremなどの単位は不要です。sassのmixin機能を使って単位suffixの自動付与をしているきなど意外と見落としてしまうことも。
.verbose{
font-size: 0px;
width: 0%;
height: 0rem;
}
.concise{
font-size: 0;
width: 0;
height: 0;
}
小数点前の0は不要
0.5
などの小数は.5
のように0を省略できます。
ただし0.5
と0を付ける記法には可読性が向上するというメリットもあります。とくに複数でコーディングするときには0.5
記法を許容しつつbuild時にはminifyして取り除く…など運用の取り決めを作っておくと良い。
.verbose{
box-shadow: 2px 2px 0px rgba(0,0,0,0.5);
}
.concise{
box-shadow: 2px 2px 0 rgba(0,0,0,.5);
}
おまけ: その他のハック
border: none;
線を消すとき、ショートハンド記法で border: none;
(border-style: none;
)とするよりborder: 0;
(border-width: 0;
)とする方が簡潔です。これはoutline
プロパティでも同じです。Airbnbスタイルガイドではこの書き方が推奨されています5 6。
.verbose{
border: none;
outline: none;
}
.concise{
border: 0;
outline: 0;
}
#所感
省略できるところは省略して、簡潔で理解しやすいCSSを書いていきたいですね。精進。