Почему выравнивание по вертикали: середина не работает на моем span или div?
Я пытаюсь вертикально центрировать элемент span
или div
внутри другого элемента div
. Однако, когда я помещал vertical-align: middle
, ничего не происходит. Я попытался изменить свойства display
обоих элементов, и ничего не работает.
Это то, что я сейчас делаю на своей веб-странице:
.main {
height: 72px;
vertical-align: middle;
border: 1px solid black;
padding: 2px;
}
.inner {
vertical-align: middle;
border: 1px solid red;
}
.second {
border: 1px solid blue;
}
<div class="main">
<div class="inner">
This box should be centered in the larger box
<div class="second">Another box in here</div>
</div>
</div>
Ответы
Ответ 1
Это, кажется, лучший способ - прошло некоторое время с момента моего первоначального поста, и это то, что нужно сделать сейчас: http://jsfiddle.net/m3ykdyds/200
/* CSS file */
.main {
display: table;
}
.inner {
border: 1px solid #000000;
display: table-cell;
vertical-align: middle;
}
/* HTML File */
<div class="main">
<div class="inner"> This </div>
</div>
Ответ 2
Попробуйте это, работает для меня очень хорошо:
/* 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;
Ответ 3
Использование CSS3:
<div class="outer">
<div class="inner"/>
</div>
Css:
.outer {
display : flex;
align-items : center;
justify-content: center;
}
Примечание. Это может не работать в старых версиях IE.
Ответ 4
Установка высоты строки на ту же высоту, что и div, также будет работать
DEMO http://jsfiddle.net/kevinPHPkevin/gZXWC/7/
.inner {
line-height:72px;
border: 1px solid #000000;
}
Ответ 5
Если вы не можете положиться на flexbox... Поместите .child
в .parent
center. Работает, когда размеры пикселей неизвестны (другими словами, всегда) и нет проблем с IE9+.
.parent { position: relative; }
.child {
position: absolute;
top : 50%;
left: 50%;
-ms-transform: translate(-50%, -50%);
transform : translate(-50%, -50%);
}
<div class="parent" style="background:lightyellow; padding:6em">
<div class="child" style="background:gold; padding:1em">—</div>
</div>
Ответ 6
Вы должны поместить vertical-align: middle
во внутренний элемент, не внешний элемент. Установите свойство line-height
на внешний элемент, чтобы он соответствовал height
внешнего элемента. Затем установите display: inline-block
и line-height: normal
на внутренний элемент. Таким образом, текст на внутреннем элементе будет обертываться нормальной строкой. Работает в Chrome, Firefox, Safari и IE 8 +
HTML
<div class="main">
<div class="inner">Vertically centered text</div>
</div>
CSS
.main {
height: 72px;
line-height:72px;
}
.inner {
display: inline-block;
vertical-align: middle;
line-height: normal;
}
Fiddle
Ответ 7
Я использовал это, чтобы выровнять все в центре обертки div, если он помогает кому-либо - я нашел его простейшим:
div.wrapper {
/* --- This works --- */
display: flex;
/* Align Vertically */
align-items: center;
/* Align Horizontally */
justify-content: center;
/* --- ---------- ----- */
width: 100%;
height:100px;
background-color: blue;
}
div.inner {
width: 50px;
height: 50px;
background-color: orange;
}
<div class="wrapper">
<div class="inner">
</div>
</div>
Ответ 8
Здесь у вас есть пример двух способов сделать вертикальное выравнивание. Я использую их, и они работают довольно хорошо. Один использует абсолютное позиционирование, а другой использует flexbox.
Пример вертикального выравнивания
Используя flexbox, вы можете выровнять элемент внутри другого элемента с помощью display: flex;
используя align-self
. Если вам нужно выровнять его также по горизонтали, вы можете использовать align-items
и justify-content
в контейнере.
Если вы не хотите использовать flexbox, вы можете использовать свойство position. Если вы сделаете контейнер относительным, а содержимое - абсолютным, содержимое сможет свободно перемещаться внутри контейнера. Так что если вы используете top: 0;
и left: 0;
в содержимом он будет расположен в верхнем левом углу контейнера.
![Absolute positioning]()
Затем, чтобы выровнять его, вам просто нужно изменить верхнюю и левую ссылки на 50%. Это позволит расположить содержимое в центре контейнера из верхнего левого угла содержимого.
![Align in the middle of the container]()
Таким образом, вы должны исправить это, переведя содержимое на половину его размера слева и сверху.
![Absolute centered]()
Ответ 9
HTML
<div id="myparent">
<div id="mychild">Test Content here</div>
</div>
CSS
#myparent {
display: table;
}
#mychild {
display: table-cell;
vertical-align: middle;
}
Мы устанавливаем родительский div для отображения в виде таблицы и дочернего div для отображения в виде таблицы. Затем мы можем использовать выравнивание по вертикали на дочернем div и установить его значение в среднее. Все, что внутри этого дочернего div будет вертикально центрировано.
Ответ 10
вот отличная статья о том, как выровнять.
Мне нравится плавающий путь.
http://www.vanseodesign.com/css/vertical-centering/
HTML:
<div id="main">
<div id="floater"></div>
<div id="inner">Content here</div>
</div>
И соответствующий стиль:
#main {
height: 250px;
}
#floater {
float: left;
height: 50%;
width: 100%;
margin-bottom: -50px;
}
#inner {
clear: both;
height: 100px;
}
Ответ 11
Это просто. Просто добавьте display:table-cell
в свой основной класс.
.main {
height: 72px;
vertical-align: middle;
display:table-cell;
border: 1px solid #000000;
}
Посмотрите jsfiddle!
Ответ 12
Вот самое последнее самое простое решение - не нужно ничего менять, просто добавьте три строки правил CSS в свой контейнер div, в который вы хотите сосредоточиться. Я люблю Flex Box
#LoveFlexBox
.main {
/* I changed height to 200px to make it easy to see the alignment. */
height: 200px;
vertical-align: middle;
border: 1px solid #000000;
padding: 2px;
/* Just add the following three rules to the container of which you want to center at. */
display: flex;
flex-direction: column;
justify-content: center;
/* This is true vertical center, no math needed. */
}
.inner {
border: 1px solid #000000;
}
.second {
border: 1px solid #000000;
}
<div class="main">
<div class="inner">This box should be centered in the larger box
<div class="second">Another box in here</div>
</div>
<div class="inner">This box should be centered in the larger box
<div class="second">Another box in here</div>
</div>
</div>
Ответ 13
Так как vertical-align
работает как ожидалось на td
, вы можете поместить в ячейку div
одну ячейку table
, чтобы выровнять ее содержимое.
<div>
<table style="width: 100%; height: 100%;"><tr><td style="vertical-align: middle; text-align: center">
Aligned content here...
</td></tr></table>
</div>
Неуклюжий, но работает, насколько я могу судить. У этого могут быть недостатки других обходных решений.
Ответ 14
Просто поместите содержимое внутри таблицы с высотой 100% и установите высоту для главного div
<div style="height:80px;border: 1px solid #000000;">
<table style="height:100%">
<tr><td style="vertical-align: middle;">
This paragraph should be centered in the larger box
</td></tr>
</table>
</div>
Ответ 15
Для вертикального центрирования элемента span или div в другом div, добавьте позицию относительно родительского div и абсолютную позицию по отношению к дочернему div. Теперь дочерний div можно расположить в любом месте внутри div. Пример ниже центров как по горизонтали, так и по вертикали.
<div class="parent">
<div class="child">Vertically and horizontally centered child div</div>
</div>
CSS:
.parent{
position: relative;
}
.child{
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}