知ってると便利なCSSのテクニックのまとめ -CSS Protips
Post on:2015年10月5日
リスト要素で実装したナビゲーションの右端のボーダーを取り除くシンプルな方法、flexboxで実装したカラム間の溝の最後の溝を取り除く方法、天地の中央に配置など、知ってると便利なCSSのテクニックを紹介します。
CSS Protipsのバージョンアップ版の紹介記事はこちら。
CSS ProtipsのライセンスはMIT Licenseで、個人でも商用でも無料で利用できます。
下記のスタイルシートの対応ブラウザはChrome, Firefox, Safari, Edge, IE11です。
- リスト要素の最後だけボーダーを適用・削除
- body要素に「line-height」を加える
- 天地の中央に配置
- ネガティブなnth-childを使用してアイテムを選択
- SVGファイルの指定
- box-sizingの継承
- flexboxのマージンハックを取り除く
リスト要素の最後だけボーダーを適用・削除
「:not()」を使用して、リスト要素で実装したナビゲーションの最後のアイテムだけにボーダーを適用・削除します。
まずは、今までの書き方。
/* まずは各アイテムの右にボーダーを... */ .nav li { border-right: 1px solid #666; } /* ...続いて、最後だけ削除... */ .nav li:last-child { border-right: 0; }
「:not()」を使用するとシンプルなコードで指定できます。
/* ...最後のアイテム以外全てにボーダーを適用 */ .nav li:not(:last-child) { border-right: 1px solid #666; }
:not()など、疑似クラスの更にくわしい使い方は下記ページを参考に。
body要素に「line-height」を加える
body要素でline-heightを指定することでp, hnなどにその値が継承されるため、それぞれにline-heightを指定する必要がなくなります。
body { line-height: 1; }
天地の中央に配置
ページの天地の中央に要素を配置するシンプルなコードです。
※IE11ではflexboxのバグがあります(バグ情報)。
html, body { height: 100%; margin: 0; } body { -webkit-align-items: center; -ms-flex-align: center; align-items: center; display: -webkit-flex; display: flex; }
高さ不明の要素に対して天地中央に配置する場合は下記ページを参考に。
ネガティブなnth-childを使用してアイテムを選択
nth-childにはネガティブな値も指定できます。
li { display: none; } /* 最初から3つ目までのアイテムを表示 */ li:nth-child(-n+3) { display: block; }
SVGファイルの指定
アイコンを使用する時に、SVGを使わない理由はありません。SVGはIE9以降のすべてのブラウザでサポートされています。
.logo { background: url("logo.svg"); }
SVGスプライトなど、更にくわしい設置方法は下記ページを参考に。
box-sizingの継承
box-sizingはhtml要素で指定し、継承して利用すると、コンポーネントで変える時に簡単です。
html { box-sizing: border-box; } *, *:before, *:after { box-sizing: inherit; }
flexboxのマージンハックを取り除く
flexboxでカラムの溝をつくる時、nth-, first-, last-childなどのハックで最後の溝を取り除くことができますが、それはflexboxのspace-betweenプロパティを使うだけで解決します。
.list-of-people { display: flex; justify-content: space-between; } .list-of-people .person { flex-basis: 23%; }
flexboxの実装については、下記ページを参考に。
sponsors