下のコード( JS Fiddle _のデモもあります)は、テキストを中央に配置しません。 margin-top
属性を使用しても、テキストをdiv
内で垂直方向に中央揃えする方法はありません。これどうやってするの?
<div id="column-content">
<img src="http://i.stack.imgur.com/12qzO.png">
<strong>1234</strong>
yet another text content that should be centered vertically
</div>
#column-content {
display: inline-block;
border: 1px solid red;
position:relative;
}
#column-content strong {
color: #592102;
font-size: 18px;
}
img {
margin-top:-7px;
vertical-align: middle;
}
あなたのテキストコンテンツのためのコンテナ、おそらくspan
を作成してください。
#column-content {
display: inline-block;
}
img {
vertical-align: middle;
}
span {
display: inline-block;
vertical-align: middle;
}
/* for visual purposes */
#column-content {
border: 1px solid red;
position: relative;
}
<div id="column-content">
<img src="http://i.imgur.com/WxW4B.png">
<span><strong>1234</strong>
yet another text content that should be centered vertically</span>
</div>
Andres Ilichはそれを正しく持っています。万が一誰かが彼のコメントを見逃した場合….
A. 1行のテキストしかない場合:
div
{
height: 200px;
line-height: 200px; /* <-- this is what you must define */
}
<div>vertically centered text</div>
B.)複数行のテキストがある場合:
div
{
height: 200px;
line-height: 200px;
}
span
{
display: inline-block;
vertical-align: middle;
line-height: 18px; /* <-- adjust this */
}
<div><span>vertically centered text vertically centered text vertically centered text vertically centered text vertically centered text vertically centered text vertically centered text vertically centered text vertically centered text vertically centered text</span></div>
2016年4月10日更新
フレックスボックスを使用して、アイテムを垂直方向(または水平方向)に配置するようになりました。
<div class="flex-container">
<div class="flex-item">Item</div>
<div class="flex-item">Item</div>
<div class="flex-item">Item</div>
<div class="flex-item">Item</div>
</div>
<style>
.flex-container {
display:flex;
align-items: center; /* Vertical center alignment */
justify-content: center; /* Horizontal center alignment */
}
</style>
Flexboxのよいガイドは CSS Tricks で読むことができます。指摘してくれてありがとう(コメントから)Benは、更新する時間がなかった。
Mahendraという名の良い人が非常に有効な解決策を投稿しました here
次のクラスは、要素をその親を中心にして水平方向と垂直方向の中央に配置します。
.absolute-center {
/* Internet Explorer 10 */
display:-ms-flexbox;
-ms-flex-pack:center;
-ms-flex-align:center;
/* Firefox */
display:-moz-box;
-moz-box-pack:center;
-moz-box-align:center;
/* Safari, Opera, and Chrome */
display:-webkit-box;
-webkit-box-pack:center;
-webkit-box-align:center;
/* W3C */
display:box;
box-pack:center;
box-align:center;
}
これは古い質問ですが、受け入れられた答えは複数行のテキストには機能しません。私はJSfiddle を更新してcssの複数行のテキストの縦方向の整列 を説明したように ここ :
<div id="column-content">
<div>yet another text content that should be centered vertically</div>
</div>
#column-content {
border: 1px solid red;
height: 200px;
width: 100px;
}
div {
display: table-cell;
vertical-align:middle;
text-align: center;
}
これは<br />
と一緒に動作します。
これを試して:
HTML
<div><span>Text</span></div>
CSS
div {
height: 100px;
}
span {
height: 100px;
display: table-cell;
vertical-align: middle;
}
これは単にうまくいくはずです。
#column-content {
--------
margin-top:auto;
margin-bottom:auto;
}
あなたのデモで試してみました。
Omar(またはMahendra)のソリューションをさらに普遍的にするためには、FireFoxに関連するコードブロックを次のように置き換える必要があります。
/* Firefox */
display:flex;
justify-content:center;
align-items:center;
それ以外の点では機能的な、Omarのコードの問題は、ボックスを画面の中央に配置する場合、または直近の先祖に配置する場合に発生します。このセンタリングは、その位置を
position: relative;
またはposition:static;
(位置には含まれません:絶対または固定)。
そして margin:auto; または margin-right:auto。マージン左:自動。
このボックス中心整列環境の下では、オマルの提案はうまくいきません。 IE8でも動作しません(それでも7.7%の市場シェア)。そのため、IE8(および他のブラウザ)では、上記の他の解決策に見られるような回避策を検討する必要があります。
複数行が必要な場合は、これが最も簡単な方法です。 span
のテキストを別のspan
で囲み、その高さをline-height
で指定します。複数行へのトリックは内側のspan
のline-height
をリセットすることです。
<span class="textvalignmiddle"><span>YOUR TEXT HERE</span></span>
.textvalignmiddle {
line-height: /*set height*/;
}
.textvalignmiddle > span {
display: inline-block;
vertical-align: middle;
line-height: 1em; /*set line height back to normal*/
}
もちろん、外側のspan
はdiv
でもwhathaveyouでも構いません。
CSS #column-content strong
にも垂直方向の配置を追加します。
#column-content strong {
...
vertical-align: middle;
}
更新された例 も参照してください。
===アップデート===
他のテキストと別の垂直方向の配置を囲むようにします。
html:
... <span>yet another text content that should be centered vertically</span> ...
css:
#column-content span {
vertical-align: middle;
}
次の例 も参照してください。