<li>タグから生成された、高さと幅が固定された行のボックスの数を表示しています。次に、テキストを垂直方向の中央に揃える必要があります。 CSSのvertical-alignは何の影響もありません。おそらく何かが足りないのでしょうか?
(マージン、パディング、行の高さ)を使用するトリックを探していません。一部のテキストが長く、2行に分割されるため、これらは機能しません。
実際のコードを見つけてください:
ul.catBlock{
width:960px;
height: 270px;
border:1px solid #ccc;
}
ul.catBlock li{
list-style: none;
float:left;
display:block;
text-align: center;
width:160px;
height: 100px;
}
ul.catBlock li a{
display: block;
padding: 30px 10px 5px 10px;
height:60px;
}
<ul class="catBlock">
<li><a href="#">IP Phone</a></li>
<li><a href="#">Dual SIM Switch Server</a></li>
<li><a href="#">IP PBX</a></li>
</ul>
display: table
で親を定義し、vertical-align: middle
およびdisplay: table-cell
で要素自体を定義します。
line-height
は、テキストを垂直方向に配置する方法です。これはかなり標準的なものであり、「ハック」とは考えていません。 line-height: 100px
をul.catBlock li
に追加するだけで問題ありません。
この場合、li
内のすべてのテキストもa
内にあるため、代わりにul.catBlock li a
に追加する必要があります。これを行うと奇妙なことが起こるのを見てきたので、両方試してどちらが機能するかを確認してください。
驚くべきことに(またはそうではない)、vertical-align
ツールは実際にこの仕事に最適です。 何よりも、Javascriptは不要です。
次の例では、outer
クラスを本体の中央に配置し、inner
クラスをouter
クラスの中央に配置しています。
プレビュー: http://jsfiddle.net/tLkSV/513/
HTML:
<div id="container">
<span></span><div class="outer">
<span></span><div class="inner">
</div>
</div>
</div>
CSS:
html, body {
height: 100%;
margin: 0;
padding: 0; }
#container {
text-align: center;
height: 100%; }
span {
height: 100%;
vertical-align: middle;
display: inline-block; }
.outer {
width: 100px;
height: 200px;
padding: 0;
border: 1px solid #000;
vertical-align: middle;
display: inline-block; }
.inner {
background: red;
width: 30px;
height: 20px;
vertical-align: middle;
display: inline-block; }
垂直方向の整列は、隣り合う要素の中心を揃えることで機能します。単一要素に垂直方向の配置を適用しても、まったく何も起こりません。幅はないがコンテナの高さである2番目の要素を追加すると、単一の要素がこの幅なし要素とともに垂直方向の中央に移動し、垂直方向の中央に配置されます。唯一の要件は、両方の要素をインライン(またはインラインブロック)に設定し、vertical-align属性をvertical-align: middle
に設定することです。
注:以下のコードで、<span>
タグと<div>
タグが触れていることに気付くかもしれません。どちらもインライン要素であるため、スペースは実際に幅のない要素とdivの間にスペースを追加するため、必ず省略してください。
将来的には、この問題はflexboxによって解決されるでしょう。現在、ブラウザーのサポートは陰気ですが、現在のすべてのブラウザーで何らかの形でサポートされています。
ブラウザのサポート: http://caniuse.com/flexbox
.vertically_aligned {
/* older webkit */
display: -webkit-box;
-webkit-box-align: center;
-webkit-justify-content: center;
/* older firefox */
display: -moz-box;
-moz-box-align: center;
-moz-box-pack: center;
/* IE10*/
display: -ms-flexbox;
-ms-flex-align: center;
-ms-flex-pack: center;
/* newer webkit */
display: -webkit-flex;
-webkit-align-items: center;
-webkit-box-pack: center;
/* Standard Form - IE 11+, FF 22+, Chrome 29+, Opera 17+ */
display: flex;
align-items: center;
justify-content: center;
}
Flexboxの背景: http://css-tricks.com/snippets/css/a-guide-to-flexbox/
この反応が何年も遅れたとしても、これに遭遇した人は試してみたいだけかもしれません
li {
display: flex;
flex-direction: row;
align-items: center;
}
flexboxのブラウザーサポートは、@ scottjoudryが上記の応答を投稿したときよりもはるかに優れていますが、古いブラウザーをサポートする場合は、プレフィックスまたはその他のオプションを検討する必要があります。 caniuse:flex
ここにはコードも例も提供されていないAsafの答えを除いて完璧な答えはありませんので、私は私に貢献したいと思います...
vertical-align: middle;
を機能させるには、ul
要素にdisplay: table;
を、li
要素にdisplay: table-cell;
を使用する必要があり、li
要素にvertical-align: middle;
を使用する必要があります。
テキストを垂直方向に真ん中にするために、明示的なmargins
、paddings
を指定する必要はありません。
ul.catBlock{
display: table;
width:960px;
height: 270px;
border:1px solid #ccc;
}
ul.catBlock li {
list-style: none;
display: table-cell;
text-align: center;
width:160px;
vertical-align: middle;
}
ul.catBlock li a {
display: block;
}
このソリューションを試してみてください
あなたはliの代わりにdivを使用する必要があるかもしれません
.DivParent {
height: 100px;
border: 1px solid Lime;
white-space: nowrap;
}
.verticallyAlignedDiv {
display: inline-block;
vertical-align: middle;
white-space: normal;
}
.DivHelper {
display: inline-block;
vertical-align: middle;
height:100%;
}
<div class="DivParent">
<div class="verticallyAlignedDiv">
<p>Isnt it good!</p>
</div><div class="DivHelper"></div>
</div>
垂直方向の中央揃えのためのシンプルなソリューション...私にとっては、それは魅力のように機能します
ul{display:table; text-align:center; margin:0 auto;}
li{display:inline-block; text-align:center;}
li.items_inside_li{display:inline-block; vertical-align:middle;}