新しい技術とか古い技術とか関係なく今のhtmlを考える。

displayの使いどころ

floatなしで要素を横並びにする(display:inline-block)

display:inline-block;を使ったやり方。 若干難ありな所はあるものの、ある程度ならいける。IEの古いバージョンは切り捨てで。

----------------------------------------------
HTML
----------------------------------------------
<ul id="btn_ib">
  <li><a href="">ボタン1</a></li>
  <li><a href="">ボタン2</a></li>
  <li><a href="">ボタン3</a></li>
  <li><a href="">ボタン4</a></li>
</ul>

----------------------------------------------
CSS
----------------------------------------------

#btn_ib{
  background:#666;
}
#btn_ib li{
  display:inline-block;
  width:20%;
}
#btn_ib li a{
  display:block;
  padding:10px 0;
}
#btn_ib li a:hover{
  background:#999;
}

floatなしで要素を横並びにする(display:table-cell)

display:table-cell;にvertical-align:middle;を設定すると、その中にある要素を天地の中央に配置できる。 ただし、中央揃えになるのは子要素なので、メニューに適用したい場合はaに設定して、その中に子要素を配置しなければいけない。

liにtable-cellを指定して、aを中央寄せにしたパターン。 このやり方だと、hover時の領域が十分に確保できない。

aにtable-cellを指定して、その中のspanを中央寄せにしたパターン。 hover時の領域が十分確保できるが、メニューの場合これをulに入れたい所だが、そうすると無駄なタグが増える。

----------------------------------------------
HTML
----------------------------------------------

<ul id="btn_tc01">
  <li><a href="">ボタン1</a></li>
  <li><a href="">ボタン2</a></li>
  <li><a href="">ボタン3</a></li>
  <li><a href="">ボタン4</a></li>
</ul>

<div id="btn_tc02">
  <a href=""><span>ボタン1</span></a>
  <a href=""><span>ボタン2</span></a>
  <a href=""><span>ボタン3</span></a>
  <a href=""><span>ボタン4</span></a>
</div>

----------------------------------------------
CSS
----------------------------------------------
/*  #btn_tc01  */
#btn_tc01 li{
	display:table-cell;
	vertical-align:middle;
	width:120px;
	height:50px;
	background:#666;
}
#btn_tc01 li a:hover{
	display:block;
	background:#999;
}

/*  #btn_tc02  */
#btn_tc02 a{
	display:table-cell;
	vertical-align:middle;
	width:120px;
	height:50px;
	background:#666;
}
#btn_tc02 a:hover{
	background:#999;
}


floatなしで要素を横並びにし、かつ上下左右中央揃えにする
(display:inline-block;, display:table;, display:table-cell;を併用)

高さが決められた要素を横並びにしつつ、かつその要素の中の、高さがそれぞれ違う中身を上下左右中央揃えにする方法。 親子関係にある要素双方にdisplayを設定します。 上記のサンプルでtable-cellを使用しているものはmarginの設定ができないので、その辺の対策も含めて。

[ その1 ]
横並びにする要素をinline-blockにし、その中の要素にtable-cellを指定するというdisplayのW構造。
W構造にしたのは、table-cell単体だとmarginが無効になるため。

[ その2 ]
tableとtable-cellを普通に使用。
やはりマージンが効かないので、border-spacingで代用。

----------------------------------------------
HTML
----------------------------------------------
< !-- その1 -- >
<div id="ib-and-tc">
  <div><a href="">ボタン<br>ボタン<br>ボタン</a></div>
  <div><a href="">ボタン<br>ボタン</a></div>
  <div><a href="">ボタン</a></div>
</div>

< !-- その2 -- >
<div id="table">
  <a href="">ボタン<br>ボタン<br>ボタン</a>
  <a href="">ボタン<br>ボタン</a>
  <a href="">ボタン</a>
</div>

----------------------------------------------
CSS
----------------------------------------------
/* その1 */
#ib-and-tc{
	text-align:center;
}
#ib-and-tc div{
	display:inline-block;
	margin:10px;
	background:#666;
}
#ib-and-tc a{
	display:table-cell;
	vertical-align:middle;
	height:100px;
	width:100px;
}
#ib-and-tc a:hover{
	background:#999;
}

/* その2 */
#table{
	display:table;
	border-collapse: separate;
	border-spacing: 20px;
	margin:auto;
}
#table a{
	display:table-cell;
	vertical-align:middle;
	width:100px;
	height:100px;
	background:#666;
}
#table a:hover{
	background:#999;
}
(c) 2011-2015 naoko okihara