display
プロパティーの値のひとつであるtable-cell
は、通常table
やinline-table
と組み合わせて使う。リストに使うと空白を作らずに各項目を並べられ、かつfloat
プロパティーを使うより色々面倒くさくない。その場合にtable
やinline-table
ではなくblock
と組み合わせると、table-cell
の幅の自動調整が行われなかったり、他にもマークアップ上での制約や組み合わせ必須なプロパティーなどがないという特徴があり、スタイリングの自由度が上がる。
ul {
margin: 0 auto;
padding: 0;
display: table;
width: 80%;
}
li {
display: table-cell;
}
table
と組み合わせる場合、幅の自動調整によりリスト項目の内容により幅がまちまちになってしまうので、width
プロパティーを使うのが難しくなる。キレイに等分させるというのなら別に問題はないのだけど、リスト項目の幅は必要最小限で左(または右、中央でも)に詰めたいなどというナビゲーションでよくあるケースに対応できない。
nav {
text-align: center;
}
ul {
margin: 0;
padding: 0;
display: inline-table;
}
li {
display: table-cell;
}
inline-table
では、センタリングするにはその親でtext-align: center
などとすることになる。リストへのスタイルだけで完結しないので、マークアップに依存してしまうことになる。スタイリングの自由度自体は高く、ナビゲーションでやりたい場合は親にnav
要素等があるので、大体はこれで良かったりもする。
ul {
margin: 0 auto;
padding: 0;
display: block;
width: 80%;
}
li {
display: inline;
}
古くから使われているinline
を使うものは、空白ができてしまう有名なアレを解消するのが面倒くさい。改行か項目の終了タグを消したりfont-size: 0
にしたり。前者ではHTMLの大幅な編集作業が必要になり、後者ではem
単位が使用できなくなる上、フォント・サイズの相対指定も不可能になる。
ul {
margin: 0 auto;
padding: 0;
display: block;
width: 80%;
}
li {
display: table-cell;
}
table-cell
だけ使うというのは、横並びリストの空白を消すという目的で多用されているため知っている人は多い。けどポイントはそこじゃなくて、table-cell
を指定する以外にほとんど制約とデメリットがないという点。
多くのCSSテクニックにはデメリットが付きものだけど、そのことまで言及されることはあまりない。overflow: hidden
を使ったclearfixではbox-shadow
プロパティーによる影がカットされる可能性があるとかそういうの。デメリットを調査・理解して使う必要があるということなんだけど、それと同時にアンテナを伸ばして様々なテクニックを知り、デメリットのない(より少ない)テクニックを選択するということが重要。