Я пытаюсь вертикально центрировать элемент 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>
Вот jsfiddle реализации, показывающий, что она не работает: http://jsfiddle.net/gZXWC/
Используя CSS3:
Css:
Примечание: это может не работать в старых IE
источник
inline-flex
что внутри внутреннего элемента должно быть несколько элементов подряд..inner { width: 100%; }
. Таким образом, это похоже на работу,.outer { display: table; } .inner { display: table-cell; vertical-align: middle; }
но без принудительной минимальной ширины.justify-content: center;
выравнивал по горизонтали, что прекрасно работалоПопробуйте это, у меня работает очень хорошо:
источник
#element span {height:100%;display:-webkit-box;-webkit-box-pack:center;-webkit-box-align:center;}
- обратите внимание, высота важна, чтобы гарантировать, что span наследует полную высоту своего контейнера (возможно, div), в противном случае Вы все еще не получите вертикальное центрирование!box
вdisplay
Установка высоты строки на ту же высоту, что и содержащая div, также будет работать
ДЕМО http://jsfiddle.net/kevinPHPkevin/gZXWC/7/
источник
line-height
также изменит высоту внутреннего элемента. б) Внутренний элемент все еще не точно отцентрирован по вертикали. c) Он не работает с элементами, которые не содержат текст, например<img>
, или с элементами с фиксированной высотой.Если вы не можете положиться на flexbox ... Поместите
.child
в.parent
центр. Работает, когда размеры пикселей неизвестны (другими словами, всегда), и нет проблем с IE9 + тоже.источник
Вы должны надеть
vertical-align: middle
внутренний элемент, а не внешний элемент. Установитеline-height
свойство на внешнем элементе, чтобы соответствоватьheight
внешнему элементу. Затем установитеdisplay: inline-block
иline-height: normal
на внутренний элемент. При этом текст на внутреннем элементе будет перенесен с обычной высотой строки. Работает в Chrome, Firefox, Safari и IE 8+скрипка
источник
line-height: normal;
иdisplay:inline;
работает тоже. Преимущество этого метода в том, что он не мешаетtext-align:center;
, а использованиеdisplay: table-cell;
может создавать проблемы. Довольно часто мы хотим выровнять как горизонтально, так и вертикально. Смотрите эту отредактированную скрипку: jsfiddle.net/br090prs/36line-height: normal
иdisplay: inline-block
так, чтобы внутренний текст был перенесен правильно. Если вы уверены, что текст во внутреннем div никогда не будет перенесен, эти свойства не понадобятся.Я использовал это, чтобы выровнять все по центру div-оболочки, на случай, если это кому-нибудь поможет - я нашел это проще всего:
источник
Здесь у вас есть пример двух способов сделать вертикальное выравнивание. Я использую их, и они работают довольно хорошо. Один использует абсолютное позиционирование, а другой использует flexbox .
Пример вертикального выравнивания
Используя flexbox, вы можете выровнять элемент внутри другого элемента с
display: flex;
помощьюalign-self
. Если вам нужно выровнять его также по горизонтали, вы можете использоватьalign-items
иjustify-content
в контейнере.Если вы не хотите использовать flexbox, вы можете использовать свойство position. Если вы сделаете контейнер относительным, а содержимое - абсолютным, содержимое сможет свободно перемещаться внутри контейнера. Так что если вы используете
top: 0;
иleft: 0;
в контенте, он будет расположен в верхнем левом углу контейнера.Затем, чтобы выровнять его, вам просто нужно изменить верхнюю и левую ссылки на 50%. Это позволит расположить содержимое в центре контейнера из верхнего левого угла содержимого.
Так что вам нужно исправить это, переведя содержимое на половину его размера слева и сверху.
источник
Вот отличная статья о том, как выровнять по вертикали. Мне нравится способ с плавающей точкой.
http://www.vanseodesign.com/css/vertical-centering/
HTML:
И соответствующий стиль:
источник
HTML
CSS
Мы устанавливаем родительский div для отображения в виде таблицы, а дочерний div для отображения в качестве ячейки таблицы. Затем мы можем использовать вертикальное выравнивание на дочернем элементе div и установить его значение на середину. Все внутри этого дочернего элемента div будет вертикально центрировано.
источник
Это просто. Просто добавьте
display:table-cell
в свой основной класс.Проверьте это jsfiddle !
источник
Вот последнее простейшее решение - не нужно ничего менять, просто добавьте три строки правил CSS в свой контейнер div, в котором вы хотите сосредоточиться. Я люблю
Flex Box
#LoveFlexBoxбонус
В качестве
justify-content
значения можно указать следующие несколько параметров:flex-start
, который выровняет дочерний элемент div в том месте, где поток flex начинается в его родительском контейнере. В этом случае он останется на вершине.center
, который выровняет дочерний элемент div по центру его родительского контейнера. Это действительно аккуратно, потому что вам не нужно добавлять дополнительный div для обтекания всех дочерних элементов, чтобы поместить обертку в родительский контейнер для центрирования дочерних элементов. Из-за этого это истинный вертикальный центр (column
flex-direction
аналогично, если вы измените егоflow-direction
наrow
, он станет горизонтально центрированным).flex-end
, который выровняет дочерний элемент div в том месте, где поток flex заканчивается в его родительском контейнере. В этом случае он переместится вниз.space-between
, который распространит все дочерние элементы от начала потока до конца потока. Если демо, я добавил еще один дочерний div, чтобы показать, что они разложены.space-around
Аналогичноspace-between
, но с половиной пространства в начале и конце потока.источник
Поскольку он
vertical-align
работает, как и ожидалосьtd
, вы можете поместить один элементtable
в,div
чтобы выровнять его содержимое.Неуклюжий, но работает, насколько я могу судить. Это может не иметь недостатков других обходных путей.
источник
Просто поместите содержимое в таблицу с высотой 100% и установите высоту для основного div
источник
Для вертикального центрирования элемента span или div в другом div, добавьте позицию относительно родительского div и абсолютную позицию по отношению к дочернему div. Теперь дочерний div можно расположить в любом месте внутри div. Пример ниже центров как по горизонтали, так и по вертикали.
CSS:
источник
Это современный подход, использующий функциональность CSS Flexbox. Теперь вы можете выровнять содержимое в родительском контейнере по вертикали, просто добавив эти стили в
.main
контейнер.И вам хорошо идти!
источник