vertical-align: middle
が動かないのはなぜですか?それでも、vertical-align: top
は workを行います。
<div>
<img style="width:30px;height:30px">
<span style="vertical-align:middle">Doesn't work.</span>
</div>
実際には、この場合は非常に簡単です。画像に垂直方向の配置を適用します。すべて1行に収まっているので、実際にはテキストではなく整列したい画像です。
<!-- moved "vertical-align:middle" style from span to img -->
<div>
<img style="vertical-align:middle" src="https://placehold.it/60x60">
<span style="">Works.</span>
</div>
FF3でテスト済み。
これで、このタイプのレイアウトにflexboxを使用できます。
.box {
display: flex;
align-items:center;
}
<div class="box">
<img src="https://placehold.it/60x60">
<span style="">Works.</span>
</div>
垂直整列のための簡単なテクニックは次のとおりです。
これは簡単です。テキスト要素の行の高さをコンテナの行の高さと同じに設定します。
<div>
<img style="width:30px; height:30px;">
<span style="line-height:30px;">Doesn't work.</span>
</div>
そのコンテナに対して絶対的に内側のdivを配置する
<div style="position:relative;width:30px;height:60px;">
<div style="position:absolute;bottom:0">This is positioned on the bottom</div>
</div>
<div style="display:table;width:30px;height:60px;">
<div style="display:table-cell;height:30px;">This is positioned in the middle</div>
</div>
これを全面的に正しく機能させるには、CSSを少しハックする必要があります。幸いなことに、私たちに有利に働くIEバグがあります。コンテナにtop:50%
を、内側のdivにtop:-50%
を設定しても、同じ結果が得られます。 IEがサポートしていない別の機能を使用して、これら2つを組み合わせることができます。高度なCSSセレクタ。
<style type="text/css">
#container {
width: 30px;
height: 60px;
position: relative;
}
#wrapper > #container {
display: table;
position: static;
}
#container div {
position: absolute;
top: 50%;
}
#container div div {
position: relative;
top: -50%;
}
#container > div {
display: table-cell;
vertical-align: middle;
position: static;
}
</style>
<div id="wrapper">
<div id="container">
<div><div><p>Works in everything!</p></div></div>
</div>
</div>
このソリューションでは、transform: translateY
プロパティを使用するため、他のソリューションよりも若干近代的なブラウザが必要です。 ( http://caniuse.com/#feat=transforms2d )
次の3行のCSSを要素に適用すると、親要素の高さに関係なく、その要素をその親内で垂直方向の中央に配置します。
position: relative;
top: 50%;
transform: translateY(-50%);
vertical-align: middle
を両方の要素に適用して、中央揃えにする必要があります。
<div>
<img style="vertical-align:middle" src="http://lorempixel.com/60/60/">
<span style="vertical-align:middle">Perfectly centered</span>
</div>
受け入れられた答え は、アイコンの横にあるテキストのx方向の高さの半分を中心にアイコンを配置します( CSS仕様 で定義されているとおり)。これは十分に良いかもしれませんが、テキストの上または下に目立つように目立つまたは下がる目がある場合は、少し目立つことがあります。
左側ではテキストは整列されていません、右側でそれは上に示されるようにあります。ライブデモはこの vertical-alignに関する記事にあります 。
なぜvertical-align: top
がシナリオで機能するのか誰かが話しましたか? 問題の画像はおそらくテキストよりも高いため、ラインボックスの上端を定義します。 span要素のvertical-align: top
は、行ボックスの先頭に配置するだけです。
vertical-align: middle
とtop
の動作の主な違いは、最初の要素はボックスのベースライン(すべての垂直方向の配置を満たすために必要な場所に配置され、したがってunpredictableを感じる)に対して要素を移動することです。ラインボックス(より具体的です)。
認められた答えで使用されたテクニックは単一行のテキスト( demo )のためにだけ働きます、しかしそこで述べられるように複数行のテキスト( demo )のために働きません。
誰かが縦に複数行のテキストを画像の中央に配置する必要があるなら、ここにいくつかの方法があります( このCSS-Tricksの記事 からヒントを得た方法1と2)。
CSS:
div {
display: table;
}
span {
vertical-align: middle;
display: table-cell;
}
CSS:
div {
height: 200px; /* height of image */
}
div:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
margin-right: -0.25em; /* Adjusts for spacing */
}
img {
position: absolute;
}
span {
display: inline-block;
vertical-align: middle;
margin-left: 200px; /* width of image */
}
_ css _ (上記のフィドルにはベンダーのプレフィックスが含まれます):
div {
display: flex;
align-items: center;
}
img {
min-width: 200px; /* width of image */
}
このコードはFFと同様にIEで動作します。
<div>
<img style="width:auto; height:auto;vertical-align: middle;">
<span>It does work on all browsers</span>
</div>
これが機能するには、line-height
をdivの高さに設定する必要があるためです。
基本的には、CSS3に取り掛かる必要があります。
-moz-box-align: center;
-webkit-box-align: center;
レコードの場合、整列「コマンド」はSPANに対して機能しません。これは インライン タグであり、 ブロックレベル タグではないためです。インラインのポイントはテキストの流れを乱すことではないため、配置、余白、パディングなどのものはインラインタグでは機能しません。
CSSはHTMLタグをインラインとブロックレベルの2つのグループに分けます。 「CSSブロックとインライン」を検索すると、素晴らしい記事が表示されます。
http://www.webdesignfromscratch.com/html-css/css-block-and-inline/ /
(CSSの中心的な原則を理解することは、それほど面倒なことではないことへの鍵です)
テキストが画像と揃うように、スパンにline-height:30px
を使います。
<div>
<img style="width:30px; height:30px;">
<span style="line-height:30px;">Doesn't work.</span>
</div>
もうひとつできることは、テキストのline-height
を<div>
内の画像のサイズに設定することです。次に画像をvertical-align: middle;
に設定します
それは真剣に最も簡単な方法です。
これらの答えのどれにもまだmargin
による解決策を見たことがないので、ここにこの問題に対する私の解決策があります。
この解決策 あなたがあなたのイメージの幅を知っている場合にのみうまくいく。
<div>
<img src="https://placehold.it/80x80">
<span>This is my very long text what should align. This is my very long text what should align.</span>
</div>
div {
overflow:hidden;
}
img {
width:80px
margin-right:20px;
display:inline-block;
vertical-align:middle;
}
span {
width:100%;
margin-right:-100px;
padding-right:100px;
display:inline-block;
vertical-align:middle;
box-sizing:border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
}
これらのspanプロパティを書く
span{
display:inline-block;
vertical-align:middle;
}
display:inline-block;
プロパティを使用する場合はvertical-align
を使用します。関連プロパティがあります。
background:url(../images/red_bullet.jpg) left 3px no-repeat;
私は一般的にtop
の代わりに3pxを使います。その値を増減することで、画像を必要な高さに変更できます。
display
プロパティを使ってimageをinline element
として設定することができます
<div>
<img style="vertical-align: middle; display: inline;" src="https://placehold.it/60x60">
<span style="vertical-align: middle; display: inline;">Works.</span>
</div>
たとえばjQuery mobileのボタンでは、このスタイルを画像に適用することで少し微調整できます。
.btn-image {
vertical-align:middle;
margin:0 0 3px 0;
}
マルチラインソリューション:
<div style="display:table;width:30px;height:160px;">
<img style="display:table-cell;width:30px;height:60px;padding:50px" src='...' />
<div style="display:table-cell;height:30px;vertical-align:middle">
Multiline text centered vertically
</div>
</div>
<!-- note: img (height + 2x padding) must be equal to root div height -->
すべてのブラウザとie9 +で動作します
混乱するかもしれません、私は同意します。テーブル機能を利用してみてください。このシンプルなCSSトリックを使ってモーダルをWebページの中央に配置します。大規模なブラウザをサポートしています。
<div class="table">
<div class="cell">
<img src="..." alt="..." />
<span>It works now</span>
</div>
</div>
そしてCSS部分:
.table { display: table; }
.cell { display: table-cell; vertical-align: middle; }
あなたが望むようにそれが動作するようにあなたはスタイルを整えて、イメージとテーブルコンテナのサイズを調整しなければならないことに注意してください。楽しい。
まず インラインCSS はまったく推奨されていません、それはあなたのHTMLを本当にめちゃくちゃにします。
イメージとスパンを揃えるには、単にvertical-align:middle
を実行します。
.align-middle {
vertical-align: middle;
}
<div>
<img class="align-middle" src="https://i.stack.imgur.com/ymxaR.png">
<span class="align-middle">I'm in the middle of the image! thanks to CSS! hooray!</span>
</div>