私はピンク色のものの真ん中に青いコンテナを入れようとしています、しかしその場合vertical-align: middle;
は仕事をしないようです。
<div style="display: block; position: absolute; left: 50px; top: 50px;">
<div style="text-align: left; position: absolute;height: 56px;vertical-align: middle;background-color: pink;">
<div style="background-color: lightblue;">test</div>
</div>
</div>
結果:
期待:
それをどのようにして達成できるのか提案してください。
vertical-align
はテーブルセルとインラインレベルの要素にのみ適用可能です。
あなたのニーズに合うかもしれないしそうでないかもしれない垂直方向の整列を達成するためのいくつかの方法があります。しかし、私はあなたからお見せします twomethods 私のお気に入りから:
transform
とtop
を使う.valign {
position: relative;
top: 50%;
transform: translateY(-50%);
/* vendor prefixes omitted due to brevity */
}
<div style="position: absolute; left: 50px; top: 50px;">
<div style="text-align: left; position: absolute;height: 56px;background-color: pink;">
<div class="valign" style="background-color: lightblue;">test</div>
</div>
</div>
重要な点は、top
のパーセント値は、包含ブロックのheight
に対する相対値であるということです。 transform
sのパーセント値は、ボックス自体のサイズ(境界ボックス)に対する相対値です。
フォントレンダリングの問題 (ぼやけたフォント)が発生した場合は、transform
宣言にperspective(1px)
を追加して修正してください。
transform: perspective(1px) translateY(-50%);
CSS transform
IE9 +でサポートされています ということに注目する価値があります。
inline-block
(pseudo-)要素を使うこのメソッドでは、2つの兄弟inline-block
要素があり、それらはvertical-align: middle
宣言によって中央で垂直方向に整列されています。
それらのうちの1つは、その親の100%
のheight
を持ち、もう一方は中央でそれを整列させたい私たちの希望する要素です。
.parent {
text-align: left;
position: absolute;
height: 56px;
background-color: pink;
white-space: nowrap;
font-size: 0; /* remove the gap between inline level elements */
}
.dummy-child { height: 100%; }
.valign {
font-size: 16px; /* re-set the font-size */
}
.dummy-child, .valign {
display: inline-block;
vertical-align: middle;
}
<div style="position: absolute; left: 50px; top: 50px;">
<div class="parent">
<div class="dummy-child"></div>
<div class="valign" style="background-color: lightblue;">test</div>
</div>
</div>
最後に、 インラインレベル要素間のギャップを取り除くために利用可能な方法 のうちの1つを使うべきです。
これを使って :
.Absolute-Center {
margin: auto;
position: absolute;
top: 0; left: 0; bottom: 0; right: 0;
}
このリンクを参照してください。 https://www.smashingmagazine.com/2013/08/absolute-horizontal-vertical-centering-css/
内容を中央に配置するには、絶対位置に配置されたdivにflex bloxを使用してください。
例を参照してください https://plnkr.co/edit/wJIX2NpbNhO34X68ZyoY?p=preview
.some-absolute-div {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
-moz-justify-content: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
-moz-align-items: center;
align-items: center;
}
垂直方向と水平方向の中央揃え
.parent{
height: 100%;
position: absolute;
width: 100%;
top: 0;
left: 0;
}
.c{
position: absolute;
top: 50%;
left: 0;
right: 0;
transform: translateY(-50%);
}
display:table
/table-cell;
を使うことができます
.a{
position: absolute;
left: 50px;
top: 50px;
display:table;
}
.b{
text-align: left;
display:table-cell;
height: 56px;
vertical-align: middle;
background-color: pink;
}
.c {
background-color: lightblue;
}
<div class="a">
<div class="b">
<div class="c" >test</div>
</div>
</div>
これがTopオブジェクトを使った簡単な方法です。
例:絶対要素サイズが60pxの場合.
.absolute-element {
position:absolute;
height:60px;
top: calc(50% - 60px);
}
追加の簡単な解決策
HTML:
<div id="d1">
<div id="d2">
Text
</div>
</div>
CSS:
#d1{
position:absolute;
top:100px;left:100px;
}
#d2{
border:1px solid black;
height:50px; width:50px;
display:table-cell;
vertical-align:middle;
text-align:center;
}
同様の問題に対するこの回答を確認してください。
これは私が見つけたはるかに簡単な方法です。
https://stackoverflow.com/a/26079837/4593442
注意。サファリの中でテストするためにdisplay:-webkit-flex;の代わりにdisplay:-webkit-flex;を使った。
脚注。私は初心者だけで、明らかに経験を積んだ人からの助けを共有しています。
これは、親のdivにdisplay:table;
を、子のdivにdisplay: table-cell; vertical-align: middle;
を使用して実行できます。
<div style="display:table;">
<div style="text-align: left; height: 56px; background-color: pink; display: table-cell; vertical-align: middle;">
<div style="background-color: lightblue; ">test</div>
</div>
</div>