Как центрировать div вертикально внутри абсолютно позиционированного родительского div
Я пытаюсь получить синий контейнер в середине розового, но, похоже, 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>
Результат:
![enter image description here]()
Expectation:
![enter image description here]()
Пожалуйста, предложите, как я могу это достичь.
Jsfiddle
Ответы
Ответ 1
Прежде всего, обратите внимание, что vertical-align
применимо только к ячейкам таблицы и элементам линейного уровня.
Существует несколько способов достижения вертикальных выравниваний, которые могут или не могут удовлетворить ваши потребности. Однако я покажу вам два метода из моих избранных:
1. Использование 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>
Ответ 2
используйте это:
.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/
Ответ 3
Используйте flex blox в своем абзацевом расположении div, чтобы центрировать его содержимое.
См. пример 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;
}
Ответ 4
Центр по вертикали и по горизонтали:
.parent{
height: 100%;
position: absolute;
width: 100%;
top: 0;
left: 0;
}
.c{
position: absolute;
top: 50%;
left: 0;
right: 0;
transform: translateY(-50%);
}
Ответ 5
Вы можете использовать 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>
Ответ 6
Пожалуйста, проверьте этот ответ на аналогичную проблему.
Это самый простой способ, который я нашел.
fooobar.com/questions/81661/...
Примечание. Я использовал display: -webkit-flex; вместо display: flex; для тестирования внутри сафари.
СНОСКА. Я только начинающий, помогая кому-то, кто явно переживает.
Ответ 7
Вот простой способ использования объекта Top.
Например: если абсолютный размер элемента равен 60 пикселей.
.absolute-element {
position:absolute;
height:60px;
top: calc(50% - 60px);
}
Ответ 8
Дополнительное простое решение
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;
}
Ответ 9
Вы можете сделать это с помощью display:table;
в родительском div и display: table-cell; vertical-align: middle;
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>