Nedia What's up!

ネディアのエンジニアによるIT技術やサービスの紹介・検証などをお届け!

【CSS】display:tableを使ったナビゲーション


『CSSの小技』第2回の今回はdisplay:tableを使ったナビゲーションの構築です。
今までは古いIEに対応させるべく、「float」で浮かべて、「clearfix」で落とす。とか
display: inline-blockを利用して横並びのナビゲーションを作っていました。
XPのサポート終了により古いIEに対応させる必要が薄くなってきましたので、横並びさせるのに便利な手法としてIE8以降で使用可能なdisplay:tableを今後使っていきたいと思います。
そして、今までIEに苦しめられていた分の工数を、新しい表現にあてることが出来ればより良いWebサイト制作が出来るのではないかなぁと個人的には思います。

display:tableとは

tableと聞いてtableレイアウトを思い浮かべたり、その昔tableだらけでWebサイト制作をしていた頃を思い出したりする人もいるでしょう。それで大体合ってます!
display: tableとは、指定した要素をtableタグとして扱い、その子要素にdisplay:table-cellを指定することによってtdタグと同様の表示をさせる事ができるようになります。

display: tableのメリット

1.vertical-align:middleで縦中央揃えが出来る

ナビゲーションの縦幅に対して文字を中央に配置したい場合、line-hightを用いたり、単純にmargin-topやpadding-topを利用したりしていましたが、
項目名が1行のもの、2行のものが混在すると一気にレイアウトしにくくなっていました。
display:tableであればvertical-align:middleによってこの問題が一気に解決します。

2.ナビゲーションボタンの大きさを均等にする

display:tableでは親要素にtable-layout:fixedとwidthを指定してあげる事により均等幅のナビゲーションボタンを設置することが可能です。
レスポンシブデザイン用途では均等幅の状態でウィンドウ幅に合わせた伸縮を行えます。

3.ナビゲーションボタンの段落ちがない

「firefoxでは大丈夫なのに、IEで段落ちしてしまう」といったことを経験したことは無いでしょうか?tableレイアウトでは一番高い要素に合わせて高さが統一され、横幅もはみ出ないように調整されます。ですのでdisplay:tableでは段落ちしてしまうことはありません。こちらもレスポンシブデザインでは有効でしょう。

使用方法

css2-1

使い方はとても簡単です。親要素(ul等)にdisplay:tableを指定し、子要素(li等)にdisplay:table-cellを指定してあげるだけです。

HTML

CSS

アレンジ1 等幅ボタン

css2-2

上記ナビゲーションでは文字数によってボタンの横幅が違います。table-layout:fixedを使ってボタンの横幅を同じにします。

HTML

CSS

アレンジ2 等幅ボタン+レスポンシブデザイン

css2-3

さらに横幅を「%」で指定することによりウィンドウ幅によって自動的に伸縮するレスポンシブデザイン用のナビゲーションに早変わりです。

HTML

CSS