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ご指摘あればをお願いします。

(件名or本文内でキーワード検索できます)



  • << 前のページ
  • 次のページ >>
ページトップへ