display:table;
display:table;display:table-cell
親要素にdisplay:table;を、子要素にdisplay:table-cell;を指定すると、テーブルのように横並びをさせることができる。white-spaceプロパティで改行をさせない。
ナビゲーションバーとして使うことが多いので、あえてサイト上部にメニューサンプルを表示させた。レスポンシブデザインに対応させるため左右に10pxの余白。メディアクエリで分ければいいがめんどいので。
<!--html--> <div id="m1"> <ul id="m2"> <li><a href="#">Menu1</a></li> <li><a href="#">Menu2</a></li> <li><a href="#">Menu3</a></li> </ul> </div>
/*css*/ html,body,ul,li { margin:0;padding:0; } #m1 { margin:0 10px; } ul { background:#88f; display:table; table-layout:fixed; width:100%; } ul li { display:table-cell; white-space:nowrap; text-align:center; line-height:40px; } ul li a { color:#fff; display:block; text-decoration:none; font-size:24px; } ul li:not(:last-child) { border-right:solid 1px #fff; }
floatの代わりに使いたいところだが、IE8以下に対応していないプロパティなのが難点。
加えて、table-layout:fixed;とwidth:100%;を指定する。table-layout:fixed;で固定しないと、文字数が多い文字のcell程横幅が広くなってしまう。liに対してwidth:25%などのwidthを指定することでも同様の効果が得られる。
white-space:nowrapは改行やタブが半角スペースになってしまうというもので、改行させないための記述。初期値はnormal。
それを防ぐための記述。width:90%;でtext-align:center;でも中央配置されない。そこで、
左右は包括ブロック(ここではnav)に左右marginを指定すれば空白が開く。
参考page
display:inline-block
inline-blockはブロックレベル要素のようにwidthやheightを指定でき、マウスが広がり、インライン要素のように横並びされる(floatを使わず)。
IE7以下はデフォルト対応できないため、スターハックで以下を追加する。
/*css*/ ul#m3 li { display:inline-block; *display:inline; /*IE*/ *zoom:1; /*IE*/ }
間の余白はletter-spacingで取り除ける。
<!--html--> <ul id="m3"> <li><a href="#">menu1</a></li> <li><a href="#">menu2</a></li> <li><a href="#">menu3</a></li> </ul>
/*css*/ ul#m4 { letter-spacing:-0.4em; } ul#m4 li { display:inline-block; letter-spacing:normal; *display:inline; /*IE*/ *zoom:1; /*IE*/ }
コメントor補足情報orご指摘あればをお願いします。
- << 前のページ
- 次のページ >>