Отцентрировать блок по горизонтали и вертикали
Горизонтальное и вертикальное выравнивание блока распространенная задача. Опишу наиболее простые и частоипользуемые способы.
Отцентировать по горизонтали
Способ 1
Через margin: auto;
, задав ширину < ширины родителя.
.center { margin: auto; width: 50%; }
Способ 2
Через margin: auto; display: table;
. Преимущество второго способа — ширина таблицы может быть динамической.
.center { margin: auto; display: table; }
Отцентировать по вертикали
Способ 1
Пользуясь особенностями таблиц можно легко отцентровать по вертикали и горизонтали блок произвольной ширины и высоты.
<div> <p>Content here</p> </div> .vcenter { display: table; } . vcenter p { display: table-cell; text-align: center; vertical-align: middle; margin: 0 auto; }
Или так:
<div>Content here</div> .vcenter { display: table-cell; text-align: center; vertical-align: middle; margin: 0 auto; }
Но при этом варианте родительский блок получит табличный алгоритм вычисления ширины (иметь ширину содержимого), а это не всегда желательно. Чтобы растянуть блок, нужно указать ширину явно, например width: 300px
. В данном примере указать в процентах не получится, т.к. ячейка есть, а родительской таблицы — нет.
Способ 2
Второй вариант вертикального выравнивания базурется на использовании трансформаций:
<main> <div>Content centered vertically</div> </main> main { position: relative main div { position: absolute top: 50% left: 50% transform: translate(-50%, -50%) }
Способ 3
Использовать возможности flexbox:
<div>Centered content with flexbox</div> . vcenter { display: flex; justify-content: center; align-items: center; }
Если центруемых элементов в контейнере будет несколько, то они онтцентрируются по вертикали и горизонтали и будут располагаться рядом.
Способ 4
Можно задать контейнеру раскладку флексбокса, а дочернему флекс-элементу margin: auto
:
<div><div>Centered text</div></div> .container { display: flex; } .message { margin: auto; }
В этом случае элемент уменьшит свой размер под содержимое и отцентруется по вертикали и горизонтали. Если элементов будет несколько, то между ними будут равномерные отступы (похожие на justify-content: space-around).
В заключение: сборник решений от CSS Tricks.
Выравнивание блоков в разметке Flexbox — CSS
Спецификация Выравнивание Блоков подробно описывает, как выравнивание работает при использовании различных способов разметки.
В этом примере три элемента flex выровнены по главной оси с помощью атрибута justify-content
и по поперечной оси с помощью атрибута
. Первый элемент переопределяет значения align-items
, устанавливая значение атрибута align-self
в center
.
Разметка flexbox следует согласно режиму чтения документа (writing mode), поэтому, если вы используете английский язык и устанавливаете атрибут justify-content
в значение flex-end
, то элементы будут выровнены по концу flex контейнера. Если вы работаете со значением атрибута flex-direction
, установленным в row
, то выравнивание будет происходить в линейном направлении.
Однако, работая с разметкой flexbox, вы можете изменить поведение главной оси, установив значение атрибута
в column
. В этом случае, атрибут justify-content
будет выравнивать элементы в направлении блока. Поэтому проще всего думать о главной и поперечной осях при работе с разметкой Flexbox следующим образом:
- Главная ось = направление согласно атрибуту
flex-direction
= выравнивание через атрибутjustify-content
- Поперечная ось = проходит поперёк главной оси = выравнивание через атрибут
align-content
,align-self
/align-items
Выравнивание по Главной Оси
Выравнивание по Поперечной Оси
Отсутствие атрибута justify-self в разметке Flexbox
При использовании разметки flexbox, главная ось работает с нашим контентом как с группой. Количество места, необходимого для размещения элементов, рассчитывается, а оставшееся пространство становится доступным для заполнения.
justify-content
контролирует использование оставшегося пространства. Если установить атрибут justify-content
в значение flex-end
, то дополнительное пространство заполнится перед элементами, если установить атрибут justify-content
в значение space-around
, то пространство заполнится с обеих сторон элемента в этом измерении и т. д.Это означает, что атрибут justify-self
нет имеет смысла использовать в разметке flexbox, поскольку мы всегда имеем дело с перемещением всей группы элементов.
Использовать атрибут align-self
имеет смысл при работе с поперечной осью, так как потенциально есть дополнительное пространство во flex контейнере в этом измерении, один элемент которого может быть перемещён и в начало, и в конец.
В разметке flexbox присутствует конкретный вариант использования, в котором, возможно, понадобится атрибут justify-self
. Например, когда будет необходимо разделить набор flex элементов для создания отдельного шаблона навигации. В таком случае, можно использовать атрибут margin
auto
. Атрибут с таким значением будет занимать все доступное пространство в своём измерении. Так работает центрирование блока со свойством margin:auto
. Установив значение атрибутов margin-left
и margin-right
в значение auto
, обе стороны нашего блока попытаются занять все доступное пространство и, таким образом, заставят двигаться блок в центр.Установив значение атрибутаmargin
в auto
для одного элемента в наборе с flex-элементами, выровненных с начала, можно создать разделённую навигацию. Это хорошо работает с разметкой flexbox и свойствами выравнивания. Как только для элемента со свойством
не остаётся свободного места, он станет вести себя также, как и все остальные flex элементы, и сократится в объёме, пытаясь уместиться в доступное пространство.
Создание разрыва фиксированного размера между элементами
На главной оси атрибут column-gap
будет создавать разрывы фиксированного размера между соседними элементами.
На поперечной оси атрибут row-gap
создаёт разрыв между соседними flex линиями, поэтому необходимо также установить атрибут flex-wrap
в значение wrap
, чтобы применить эффект.
Примечание. Начиная с версии 63, Firefox является единственным браузером, в котором реализованы свойства разрыва в разметке Flexbox.
CSS Атрибуты
Глоссарий терминов
Как я могу центрировать div внутри другого div?
Я полагаю, что #container
будет сосредоточено внутри #main_content
. Однако это не так. Почему это не работает, и как я могу это исправить?
#main_content {
top: 160px;
left: 160px;
width: 800px;
min-height: 500px;
height: auto;
background-color: #2185C5;
position: relative;
}
#container {
width: auto;
height: auto;
margin: 0 auto;
padding: 10px;
position: relative;
}
<div>
<div>
</div>
</div>
html
css Поделиться Источник
25 ответов
107
Вам нужно установить ширину контейнера ( auto
не будет работать):
#container {
width: 640px; /* Can be in percentage also. */
height: auto;
margin: 0 auto;
padding: 10px;
position: relative;
}
Ссылка CSS на MDN объясняет все это.
Проверьте эти ссылки:
В действии на jsFiddle .
Поделиться ShuklaSannidhya
39
Технически, ваш внутренний DIV ( #container
) центрирован горизонтально. Причина, по которой вы не можете сказать, заключается в том, что с помощью свойства CSS width: auto
внутренний DIV расширяется до той же ширины, что и его родитель.
Смотрите это fiddle: http://jsfiddle.net/UZ4AE/
#container {
width: 50px;
height: auto;
margin: 0 auto;
padding: 10px;
position: relative;
background-color: red;
}
В этом примере я просто установил ширину #container
на 50px
и установил фон на red
, чтобы вы могли видеть, что он центрирован.
Я думаю, что настоящий вопрос заключается в том, «How ли я центрирую элементы горизонтально с CSS?», и ответ (барабанная дробь, пожалуйста): это зависит от того, как вы это делаете!
Я не буду делать полный пересказ мириадов способов центрировать вещи с CSS, когда W3Schools делает это так красиво здесь: http://www.w3schools.com/css/ css_align.asp но основная идея заключается в том, что для элементов уровня блока вы просто указываете желаемую ширину и устанавливаете левое и правое поля на auto
.
.center {
margin-left: auto;
margin-right: auto;
width: 50px;
}
Обратите внимание: этот ответ применим только к элементам уровня блока ! Чтобы расположить встроенный элемент, вам нужно будет использовать свойство text-align: center
на первом родительском блоке .
Поделиться Jeremiah 18 марта 2013 в 21:14
24
Еще один интересный способ: fiddle
CSS
. container {
background: yellow;
width: %100;
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
align-items: center;
}
.centered-div {
width: 80%;
height: 190px;
margin: 10px;
padding: 5px;
background: blue;
color: white;
}
HTML
<div>
<div>
<b>Enjoy</b>
</div>
</div>
Поделиться iraj jelodari 17 июня 2015 в 20:42
- Как я могу центрировать div внутри другого div, каков самый простой способ?
Я пытаюсь идеально центрировать синюю коробку внутри родительского div, и я хочу убедиться, что делаю это самым простым способом. Мне пришлось сделать несколько простых математических вычислений, чтобы узнать, какие px задают ширину и высоту синего прямоугольника, просто хочу посмотреть, есть ли. ..
- Как я могу центрировать этот div в Bootstrap?
Я использую Bootstrap для создания веб-сайта. Я не понимаю, как центрировать <div> , который находится внутри другого <div> . Я считаю, что должен быть в состоянии использовать -offset для достижения этой цели, но когда он не находится в четном числе, то, конечно, никогда не будет…
12
Вы можете центрировать float div с помощью этого небольшого кода:
#div {
width: 200px;
height: 200px;
position: absolute;
left: 50%;
top: 50%;
margin-top: -100px;
margin-left: -100px;
}
Поделиться Zilberman Rafael 22 марта 2013 в 12:36
9
Теперь просто определите свой
#main_content
text-align:center
и определите свой #container
display:inline-block;
как такой:
#main_content {
text-align: center;
}
#container{
display: inline-block;
vertical-align: top;
}
Поделиться Rohit Azad 13 марта 2013 в 04:11
8
Попробуйте добавить
text-align: center;
к вашему родительскому контейнеру CSS объявление. И следующее к дочернему контейнеру:
display: inline-block;
Это должно сработать.
Поделиться Arman P. 13 марта 2013 в 03:55
4
Он будет работать, давая #container div width:80%
(любая ширина меньше основного содержимого и дала в%, так что он хорошо управляется как слева, так и справа) и давая margin:0px auto;
или margin:0 auto;
(оба работают нормально).
Поделиться Vish 16 марта 2013 в 13:41
4
Для начала я бы попробовал определить более конкретную ширину. Трудно центрировать то, что уже охватывает всю ширину:
#container {
width: 400px;
}
Поделиться Jason Sears 13 марта 2013 в 03:42
3
Может быть, вы хотите, как это: демо
HTML
<div>
<div>vertical aligned text<br />some more text here
</div>
</div>
CSS
#main_content {
width: 500px;
height: 500px;
background: #2185C5;
display: table-cell;
text-align: center;
vertical-align: middle;
}
#container{
width: auto;
height: auto;
background: white;
display: inline-block;
padding: 10px;
}
Как же так?
В ячейке таблицы вертикальное выравнивание по середине будет установлено в положение вертикально центрировано по отношению к элементу, а text-align: center;
работает как горизонтальное выравнивание по отношению к элементу.
Заметил, Почему is #container находится в inline-блоке, потому что это находится в состоянии строки.
Поделиться Bhojendra Rauniyar 13 марта 2013 в 08:41
3
Попробуйте вставить position:relative;
в свой #container
. Добавьте точную ширину к #container
:
#main_content {
top: 160px;
left: 160px;
width: 800px;
min-height: 500px;
height: auto;
background-color: #2185C5;
position: relative;
}
#container {
width: 600px;
height: auto;
margin: auto;
padding: 10px;
}
Рабочая демонстрация
Поделиться jhunlio 13 марта 2013 в 03:42
3
Вот решение этой проблемы:
#main_content {
background-color: #2185C5;
height: auto;
margin: 0 auto;
min-height: 500px;
position: relative;
width: 800px;
}
Поделиться Atif Azad 13 марта 2013 в 05:05
3
#main_content {
width: 400px;
margin: 0 auto;
min-height: 300px;
height: auto;
background-color: #2185C5;
position: relative;
}
#container {
width: 50%;
height: auto;
margin: 0 auto;
background-color: #CCC;
padding: 10px;
position: relative;
}
Попробовать это. Он проверил OK. Существует живая проверка на jsfiddle .
Поделиться Web Designer cum Promoter 13 марта 2013 в 06:10
3
Вот новый способ легко центрировать ваш div с помощью дисплея Flexbox.
Смотрите эту работу fiddle: https://jsfiddle.net/5u0y5qL2/
Вот это CSS:
.layout-row {
box-sizing: border-box;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-direction: normal;
-webkit-box-orient: horizontal;
-webkit-flex-direction: row;
flex-direction: row;
}
.layout-align-center-center {
-webkit-box-align: center;
-webkit-align-items: center;
-ms-grid-row-align: center;
align-items: center;
-webkit-align-content: center;
align-content: center;
-webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center;
}
Поделиться Yann Thibodeau 23 августа 2016 в 14:32
2
Используйте margin:0 auto;
для дочернего div. Затем вы можете центрировать дочерний div внутри родительского div.
Поделиться Sandeep Pattanaik 13 марта 2013 в 12:30
2
Я использовал следующий метод в нескольких проектах:
https://jsfiddle.net/u3Ln0hm4/
.cellcenterparent{
width: 100%;
height: 100%;
display: table;
}
.cellcentercontent{
display: table-cell;
vertical-align: middle;
text-align: center;
}
Поделиться Chandru 28 марта 2016 в 15:06
1
Если вы не хотите устанавливать ширину для #container
, просто добавьте
text-align: center;
до #main_content
.
Поделиться LRA 16 марта 2013 в 22:29
1
Если вы установите width: auto
в блочный элемент, то ширина будет равна 100%. , так что на самом деле нет особого смысла иметь здесь значение auto
. Это действительно то же самое для высоты, потому что по умолчанию любой элемент устанавливается на автоматическую высоту.
Итак, наконец, ваш div#container
фактически центрирован, но он просто занимает всю ширину своего родительского элемента. Вы делаете центрирование правильно, и вам нужно просто изменить ширину (если это необходимо), чтобы увидеть, что она действительно центрирована. Если вы хотите центрировать свой #main_content, то просто примените к нему margin: 0 auto;
.
Поделиться pzin 16 марта 2013 в 23:52
1
Попробуйте вот это, если это тот результат, который вы хотите получить:
<div >
<div>
</div>
</div>
#main_content {
background-color: #2185C5;
margin: 0 auto;
}
#container {
width: 100px;
height: auto;
margin: 0 auto;
padding: 10px;
background: red;
}
Поделиться nexus_07 18 марта 2013 в 02:02
1
Все так говорили, но я думаю, что не повредит повторить это еще раз.
Вам нужно установить width
в какое-то значение. Здесь есть кое-что более простое для понимания.
http://jsfiddle.net/XUxEC/
Поделиться btevfik 16 марта 2013 в 11:54
1
Сделайте содержимое CSS таким образом…
#main_content {
top: 160px;
left: 160px;
width: auto;
min-height: 500px;
height: auto;
background-color: #2185C5;
position: relative;
}
#container {
height: auto;
width: 90%;
margin: 0 auto;
background-color: #FFF;
padding: 10px;
}
Рабочий пример находится здесь: http://jsfiddle.net/golchha21/mjT7t/
Поделиться golchha21 16 марта 2013 в 14:31
1
Это потому, что ваша ширина установлена на авто. Вы должны указать ширину, чтобы он был заметно центрирован.
Ваш #container охватывает всю ширину #main_content., поэтому он кажется не центрированным.
Поделиться Bogdan Rybak 13 марта 2013 в 03:42
1
Без установки width
он получит максимальную ширину , которую может получить. Поэтому вы не можете видеть, что div
центрировалось.
#container
{
width: 50%;
height: auto;
margin: auto;
padding: 10px;
position: relative;
background-color: black; /* Just to see the different */
}
Поделиться New Developer 13 марта 2013 в 03:55
1
.parent {
width: 500px;
height: 200px;
border: 2px solid #000;
display: table-cell;
vertical-align: middle;
}
#kid {
width:70%; /* 70% of the parent */
margin:auto;
border:2px solid #F00;
height: 70%;
}
Это действительно очень хорошо решает проблему (проверено во всех новых браузерах), где Родительский div имеет, а дочерний div-id=»kid».
Этот стиль центрируется как по горизонтали, так и по вертикали. Вертикальный центр можно сделать только с помощью сложных трюков-или заставив Родительский div функционировать как ячейка таблицы, которая является одним из единственных элементов в HTML, который должным образом поддерживает вертикальное выравнивание.
Просто установите высоту малыша, автоматическое поле и среднее вертикальное выравнивание, и это будет работать. Это самое простое решение, которое я знаю.
Поделиться Joseph Myers 23 марта 2013 в 00:07
1
Вы должны назначить ширину div, который хотите центрировать.
Подобный этому:
#container {
width: 500;
margin: 0 auto;
padding: 10px;
}
Более подробная информация и примеры приведены по этим ссылкам:
Поделиться AndreaRivadossi 22 марта 2013 в 09:55
1
Я думаю, что это будет работать нормально, хотя вам, возможно, придется сбросить «top:200px;» в соответствии с вашими потребностями:
#main_content {
top: 160px;
left: 160px;
width: 800px;
min-height: 500px;
height: auto;
background-color: #2185C5;
position: relative;
border: 2px solid #CCCCCC;
}
#container {
width: 100px;
height: 20px;;
margin: 0 auto;
padding-top: 10px;
position: relative;
top: 200px;
border: 2px solid #CCCCCC;
}
Поделиться Praveen Dabral 22 марта 2013 в 08:13
Похожие вопросы:
Как горизонтально центрировать a <div>
Как я могу горизонтально центрировать <div> внутри другого <div> , используя CSS? <div> <div>Foo foo</div> </div>
CSS-как я могу центрировать div внутри div?
У меня есть внешний div шириной 800 пикселей. У меня есть внутренний div, который может быть где угодно от 200 до 600 пикселей в ширину. Я знаю, как центрировать внутренний div внутри внешнего, если…
Как центрировать div внутри другого div
У меня есть эти два дива, и я хотел бы центрировать один в другом. Любая помощь будет оценена по достоинству. <div class=PicturesBackground style=height:350px; width: 100%; background: green;…
Как горизонтально центрировать внутренний div внутри внешнего div?
Мне нужно центрировать div горизонтально внутри другого div Вот мой код HTML: <div id=outer class=outerDiv> <div id=inner class=innerDiv> </div> </div> Вот css : .outerDiv {…
как горизонтально центрировать div внутри другого div
Попытка горизонтально центрировать и обрезать (при необходимости) div внутри другого div. Такого же эффекта можно добиться и с фоновым изображением, но в данном случае мой контент-это не одно…
Как я могу центрировать div внутри другого div, каков самый простой способ?
Я пытаюсь идеально центрировать синюю коробку внутри родительского div, и я хочу убедиться, что делаю это самым простым способом. Мне пришлось сделать несколько простых математических вычислений,…
Как я могу центрировать этот div в Bootstrap?
Я использую Bootstrap для создания веб-сайта. Я не понимаю, как центрировать <div> , который находится внутри другого <div> . Я считаю, что должен быть в состоянии использовать -offset…
Как я могу центрировать div с абсолютной позицией внутри td
GooD утром я пытаюсь центрировать div внутри td. для моего td я определил апозицию с относительным, а div имеет абсолютное положение. Как я могу центрировать div без удаления Абсолюта отравления?
Как я могу центрировать div внутри другого div?
Как я могу центрировать один div внутри другого div? Спасибо!
Как центрировать div внутри div?
Как можно центрировать div внутри другого div (как вертикально, так и горизонтально), используя CSS? Мой html является <div><div></div></div> И. ..
Расположение блока по центру css
Выравнивание элементов по центру в CSS — это одна из самых популярных причин чтобы пожаловаться на CSS. «Почему всё так сложно?» — возмущаются они. Мне кажется, что проблема заключается не в том что это трудно сделать, а в том что способов для выравнивания элементов по центру очень много и бывает достаточно сложно выбрать из них подходящий.
Давайте выстроим все возможные решения в виде древовидной схемы и будем надеяться, что это упростит нашу задачу.
Итак, мне нужно выравнять элемент по центру.
Горизонтальное выравнивание
Выравнивание по центру строкового или строково-* элемента
Выравнивать по центру строковые элементы внутри блочного родительского элемента можно достаточно просто:
See the Pen Centering Inline Elements by Chris Coyier (@chriscoyier) on CodePen.
Это будет работать для inline , inline-block , inline-table , inline-flex , и т. д.
Выравнивание по центру блочного элемента
Выравнять по центру блочный элемент вы можете установив свойствам margin-left и margin-right значение auto (у него также должна быть задана ширина, иначе элемент просто займёт всю ширину контента и не будет необходимости в выравнивании). Чаще всего это делается с помощью сокращённого свойства, вот так:
See the Pen Centering Single Block Level Element by Chris Coyier (@chriscoyier) on CodePen.
Это будет работать независимо от того какая ширина установленная у блочного элемента или его родителя.
Обратите внимание, что вы не сможете обтекать элемент выравненный по центру таким способом. Однако и для этого есть трюк.
Выравнивание по центру нескольких блочных элементов
Если есть два или более блочных элементов, которые вам нужно выравнять горизонтально по центру в пределах одной строки, то возможно вам лучше изменить их тип отображения. Ниже приведён пример изменения их типа отображения на inline-block и пример с Flexbox:
See the Pen Centering Row of Blocks by Chris Coyier (@chriscoyier) on CodePen.
Если эти несколько блоков расположены на разных строках, то техника с автоматическими отступами по прежнему прекрасна:
See the Pen Centering Blocks on Top of Each Other by Chris Coyier (@chriscoyier) on CodePen.
Вертикальное выравнивание
Вертикальное выравнивание по центру в CSS немного сложнее.
Выравнивание по центру строкового или строково-* элемента
Выравнивание элемента с одной строкой
Иногда строковые/текстовые элементы могут выравниваться по центру просто потому что у них одинаковое значения для свойств padding-top и padding-bottom .
See the Pen Centering text (kinda) with Padding by Chris Coyier (@chriscoyier) on CodePen.
Если для вас по каким-то причинам padding — это не вариант, а вы пытаетесь выровнять по центру некоторый текст и точно знаете, что он не будет обёрнут чем-то ещё, то есть есть небольшой трюк, суть которого заключается в том чтобы установить свойство line-height равным значению высоты элемента.
See the Pen Centering a line with line-height by Chris Coyier (@chriscoyier) on CodePen.
Выравнивание многострочного элемента
Одинаковые отступы сверху и снизу могут создать эффект выравнивания по центру и для многострочных элементов, но если это не сработает, то возможно что элемент в котором находится текст является ячейкой таблицы, либо такое его поведение явно задано со помощью CSS. В данном свойство vertical-align обрабатывает это, в отличии от того что оно обычно обрабатывает выравнивание элементов внутри строки.
See the Pen Centering text (kinda) with Padding by Chris Coyier (@chriscoyier) on CodePen.
Если это что-то похожее на таблицу, возможно вы сможете использовать Flexbox ? Отдельный Flex-элемент может быть легко расположен по центру внутри Flex-контейнера.
See the Pen Vertical Center Multi Lines of Text with Flexbox by Chris Coyier (@chriscoyier) on CodePen.
Помните, что это на самом деле актуально когда у контейнера есть фиксированная высота ( px , % , и другие), вот почему здесь у контейнера задана высота.
Если обе техники приведённые выше нельзя применить, вы можете использовать технику «призрачного элемента», в которой псевдоэлемент с высотой в 100% размещается внутри контейнера и тех выравнивается вертикально по центру него.
See the Pen Ghost Centering Multi Line Text by Chris Coyier (@chriscoyier) on CodePen.
Выравнивание по центру блочного элемента
Выравнивание элемента с известной высотой
Довольно часто мы не можем знать высоту, по многим причинам: если изменяется ширина, текст может форматироваться и изменять высоту. Разная стилизация текста может изменять высоту. Разный размер шрифта может изменить высоту. Элементы с фиксированным соотношением сторон, такие как изображения, могут изменять высоту при изменении собственных размеров и т.д.
Но если вы знаете высоту элемента, то можете выравнивать по центру вот так:
See the Pen Center Block with Fixed Height by Chris Coyier (@chriscoyier) on CodePen.
Выравнивание элемента с неизвестной высотой
Даже если вы не знаете высоту элемента, его всё ещё можно протолкнуть на 50% высоты его родителя, а после поднять на 50% его собственной высоты:
See the Pen Center Block with Unknown Height by Chris Coyier (@chriscoyier) on CodePen.
Выравнивание элемента с помощью Flexbox
Небольшой сюрприз, это можно очень просто сделать с помощью Flexbox.
See the Pen Center Block with Unknown Height with Flexbox by Chris Coyier (@chriscoyier) on CodePen.
Горизонтальное и вертикальное выравнивание
Вы можете комбинировать представленные выше техники для того чтобы получить идеально выравненные по центру элементы. Но обычно их можно разделить на 4 группы:
Выравнивание элемента с фиксированной шириной и высотой
Использование отрицательных отступов ( maring ) равных половине этой ширины и высоты после абсолютного позиционирования элемента 50% / 50% выравняют элемент по центру. У этого способа достаточно хорошая кроссбраузерная поддержка:
See the Pen Center Block with Fixed Height and Width by Chris Coyier (@chriscoyier) on CodePen.
Выравнивание элемента с неизвестной шириной и высотой
Если вы не знаете ширину или высоту элемента, то можете использовать свойство transform и отрицательный translate в 50% в обоих направлениях (в зависимости от текущей ширины / высоты элемента) до центра:
See the Pen Center Block with Unknown Height and Width by Chris Coyier (@chriscoyier) on CodePen.
Выравнивание элемента с помощью Flexbox
Чтобы выровнять элемент по центру с помощью Flexbox вам нужно использовать два свойства центрирования:
See the Pen Center Block with Unknown Height and Width with Flexbox by Chris Coyier (@chriscoyier) on CodePen.
Выравнивание элемента с помощью CSS Grid
Это просто небольшой трюк (присланный Lance Janssen), который в большей степени будет работать для одного элемента:
See the Pen Centering with Grid by Chris Coyier (@chriscoyier) on CodePen.
Вывод
Теперь вы можете всё что угодно выравнять по центру в CSS.
В CSS некоторые на первый взгляд простые вещи оказывается не так-то просто выполнить. Одной из таких вещей, является выравнивание, т.е. когда один элемент необходимо расположить определённым образом относительного другого.
В данной статье представлены некоторые готовые решения, которые помогут упростить работу по центрированию элементов по горизонтали и(или) по вертикали.
Примечание: под каждым решением приведен список браузеров с указанием версий, в которых указанный CSS код работает.
CSS — Выравнивание блока по центру
1. Выравнивание одного блока по центру другого. При этом первый и второй блок имеют динамические размеры.
Браузеры, которые поддерживают данное решение:
- Chrome 4.0+
- Firefox 3.6+
- Internet Explorer 9+
- Opera 10.5+
- Safari 3.1+
2. Выравнивание одного блока по центру другого. При этом второй блок имеет фиксированные размеры.
Браузеры, которые поддерживают данное решение:
- Chrome 1.0+
- Firefox 1.0+
- Internet Explorer 4.0+
- Opera 7.0+
- Safari 1.0+
3. Выравнивание одного блока по центру другого. При этом второй блок имеет размеры, заданные в процентах.
Браузеры, которые поддерживают данное решение:
- Chrome 1.0+
- Firefox 1.0+
- Internet Explorer 4.0+
- Opera 7.0+
- Safari 1.0+
CSS — Выравнивание по горизонтали
1. Выравнивание одного блочного элемента ( display: block ) относительно другого (в котором он расположен) по горизонтали:
Браузеры, которые поддерживают данное решение:
- Chrome 1.0+
- Firefox 1.0+
- Internet Explorer 6.0+
- Opera 3.5+
- Safari 1.0+
2. Выравнивание строчного ( display: inline ) или строчно-блочного ( display: inline-block ) элемента по горизонтали:
Браузеры, которые поддерживают данное решение:
- Chrome 1.0+
- Firefox 3.0+
- Internet Explorer 8.0+
- Opera 7.0+
- Safari 1.0+
CSS — Выравнивание по вертикали
1. Отцентровать один элемент ( display: inline , display: inline-block ) относительно другого (в котором он расположен) по центру. Родительский блок в этом примере имеет фиксированную высоту, которая задаётся с помощью свойства CSS line-height .
Браузеры, которые поддерживают данное решение:
- Chrome 1.0+
- Firefox 3.0+
- Internet Explorer 8.0+
- Opera 7.0+
- Safari 1.0+
2. Центрирования одного блока относительно другого по вертикали посредством представления родителя как таблицы, а ребёнка как ячейки этой таблицы.
Браузеры, которые поддерживают данное решение:
- Chrome 1.0+
- Firefox 1.0+
- Internet Explorer 8.0+
- Opera 7.5+
- Safari 1.0+
Если Вы знаете какие-нибудь другие интересные хитрости или полезные готовые решения по выравниванию, то поделитесь ими в комментариях.
Смотрите также указатель всех приёмов работы.
Центрирование
В последних реализациях CSS вы можете также использовать возможности Уровня 3 (CSS3), позволяющие выровнять по центру абсолютно позиционированные элементы:
- Выравнивание по вертикали в уровне 3
- Выравнивание по вертикали и горизонтали в уровне 3
- Выравнивание в области просмотра в уровне 3
Центрирование строк текста
Самый распространённый и (потому) самый лёгкий тип центрирования — это центрирование строк текста в абзаце или заголовке. Для этого CSS обладает свойством ‘text-align’:
которое отображает каждую строку в абзаце P или заголовке h3 по центру между полями, вот так:
Все строки в этом абзаце выровнены по центру полями абзаца. Это стало возможным благодаря значению ‘center’ свойства CSS ‘text-align’.
Центрирование блока или изображения
Иногда центрировать нужно не текст, а блок в целом. Или, по-другому говоря: мы хотим, чтобы правое и левое поля были одинаковыми. Для этого нужно установить поля на ‘auto’. Это обычно используется для блоков с фиксированной шириной, потому что если блок сам по себе гибкий, он просто займёт всю доступную ширину. Вот пример:
Этот довольно узкий блок текста центрирован. Заметьте, что строки внутри блока не центрированы (они выровнены влево), в отличие от предыдущего примера.
Этот метод также можно использовать для центрирования изображения: поместите его в собственный блок и примените свойства полей. Например:
Следующее изображение центрировано:
Вертикальное центрирование
Пример, приведенный ниже, демонстрирует центрирование абзаца внутри блока, который имеет определенную заданную высоту. Отдельный пример показывает абзац, который центрирован вертикально в окне браузера, потому что находится внутри блока, позиционированного абсолютно и по высоте окна.
Этот маленький абзац центрирован вертикально.
Центрирование по вертикали в CSS уровня 3
Уровень 3 CSS предлагает и другие возможности. На момент написания этой статьи (2014 год), хороший способ вертикального выравнивания блока без использования абсолютного позиционирования (что может приводить к частичному перекрытию текста) всё ещё обсуждается. Но если вам известно, что частичное перекрытие текста не станет проблемой в вашем документе, вы можете использовать свойство ‘transform’, чтобы выровнять по центру абсолютно позиционированный элемент. Например:
Этот абзац выровнен вертикально по центру.
Для документа, который выглядит вот так:
таблица стилей выглядит так:
Основные правила:
- Сделайте контейнер относительно позиционированным (position: relative), что превратит его в контейнер для абсолютно позиционированных элементов.
- Сам элемент сделайте абсолютно позиционированным (position: absolute).
- Поместите элемент посередине контейнера с помощью ‘top: 50%’. (Заметьте, что ‘50%’ здесь означают 50% высоты контейнера.)
- Используйте translate, чтобы переместить элемент вверх на половину своей собственной высоты. ( ‘50%’ в ‘translate(0, -50%)’ указывают на высоту самого элемента.)
Недавно (начиная приблизительно с 2015-го года) в нескольких реализациях CSS стала доступна новая техника. Она основана на новом ключевом слове ‘flex’ для свойства ‘display’. Это ключевое слово предназначено для использования в графическом интерфейсе пользователя (GUI), но ничто не мешает вам использовать его в документе, если у этого документа правильная структура.
Этот абзац выровнен по центру вертикально.
таблица стилей выглядит следующим образом:
Вертикальное и горизонтальное центрирование в CSS уровня 3
Мы можем расширить оба метода, чтобы центрировать по горизонтали и по вертикали одновременно.
Побочный эффект абсолютного позиционирования абзаца состоит в том, что абзац становится ровно таким широким, каким он должен быть (если только мы явно не укажем ширину). В примере ниже мы именно этого и хотим: мы размещаем по центру абзац из одного слова (“Центр!“), так что ширина абзаца должна быть равна ширине этого слова.
Жёлтый фон наглядно демонстрирует, что абзац действительно той же ширины, что и его содержимое. Мы подразумеваем, что разметка осталась прежней:
В плане вертикального центрирования эта таблица стилей схожа с таблицей из предыдущего примера. Но теперь мы ещё перемещаем элемент на полпути через контейнер с помощью правила ‘left: 50%’ и одновременно сдвигаем его влево на половину своей собственной ширины в преобразовании ‘translate’:
Следующий пример объясняет, зачем требуется правило ‘margin-right: -50%’.
Когда форматер CSS поддерживает ‘flex’, всё становится ещё легче:
с этой таблицей стилей:
т.е. единственным дополнением является ‘justify-content: center’. Точно также, как ‘align-items’ определяет вертикальное выравнивание содержимого контейнера, ‘justify-content’ таким же образом определяет горизонтальное выравнивание. (На самом деле всё несколько сложнее, как следует из их названий, но в простом случае, работает это именно так.). Побочный эффект от применения свойства ‘flex’ состоит в том, что дочерний элемент, в нашем случае это Р, автоматически становится настолько малым, насколько это возможно.
Центрирование в области просмотра в CSS уровня 3
Контейнером по умолчанию для абсолютно позиционированных элементов является область просмотра. (В случае c браузером это окно браузера). Таким образом, центрирование элемента в области просмотра не вызывает сложности. Далее приведен полный пример. (В этом примере использован синтаксис HTML5.)
Вы можете увидеть результат в отдельном документе.
Правило ‘margin-right: -50%’ необходимо для компенсации ‘left: 50%’. Правило ‘left’ уменьшает доступную для элемента ширину на 50%. Поэтому визуализатор постарается сделать линии длиною не более половины ширины контейнера. Указав на то, что правое поле элемента находится правее на ту же самую величину, отметим, что максимальная длина линии снова равняется ширине контейнера.
Попробуйте изменить размер окна: вы увидите, что каждое предложение находится на одной строке, когда окно достаточно широкое. Только тогда, когда окно слишком узкое для всего предложения, это предложение будет разбито на несколько строк. Когда вы удалите правило ‘margin-right: -50%’ и снова измените размер окна, вы заметите, что предложения будут уже разбиты, хотя окно все еще шире строк текста в два раза.
(Использование свойства ‘translate’ для центрирования в области просмотра было впервые предложено “Charlie” в ответе на сайте Stack Overflow.)
Навигация по сайту
Created 5 May 2001;
Last updated Вт 05 ноя 2019 19:12:56
Искусство центрирования — Сообщество DEV
Как и любой хороший фильм Уэса Андерсона, иногда важно, чтобы элементы на нашей странице использовали искусство симметрии и привлекали внимание пользователей к центру страницы.
Есть несколько различных методов для достижения этого, поэтому здесь я попытаюсь объяснить самые простые и наиболее полезные методы, которые существуют, а также , почему они делают то, что делают!
Вот небольшой код, демонстрирующий методы, которые я буду обсуждать ниже:
Авто поля
Начнем с очень распространенного поля : 0 auto
.
Используется для быстрого и простого горизонтального центрирования блочных элементов ; которые являются элементами на странице, которые всегда начинаются с новой строки и занимают всю ширину, доступную в их контейнере.
Это очень полезный метод, поскольку многие элементы HTML по умолчанию являются блочными, в том числе:
-
—
<форма>
<заголовок>
<нижний колонтитул>
<раздел>
Для объяснения маржи
: 0 авто
:0 относится к верхнему и нижнему полям
авто относится к левому и правому полям.Поскольку элементы уровня блока занимают всю ширину своего контейнера, auto будет давать равные поля как слева, так и справа от элемента — таким образом, центрируя его!
Примечание: если вам не нужны определенные поля сверху и снизу элемента, вы можете так же легко написать поле
: auto
, которое автоматически применит поле ко всем сторонам элемента и, как правило, приведет к тому же результату!Выровнять текст
«Подожди, подожди — я * думаю * я уже умею центрировать текст!» , я слышал, как вы говорите.Вы хорошо знаете, что
выравнивание текста: центр;
можно использовать для гораздо большего?Есть много важных HTML-элементов, которые по умолчанию настроены как inline display, для которых описанный выше трюк с автоматическим полем не работает. К ним относятся:
-
-
-
<вход>
-
<выбрать>
-
<кнопка>
Кроме того, вы часто можете захотеть иметь такой элемент, как отображение
в виде встроенного блока для различных целей стилизации или компоновки, обычно если вы хотите отображать другие элементы в той же строке внутри этого контейнер.Когда это время придет, все, что вам нужно сделать, это использовать
text-align: center;
на родительском элементе, и он будет горизонтально центрировать дочерний элемент, независимо от того, что это такое, так же, как и текст!Примечание. По сравнению с
display: inline
, основное отличие состоит в том, чтоinline-block
позволяет установить ширину и высоту элемента и учитывает поля и отступы. Попробуйте изменить отображение на встроенное в CodePen, чтобы увидеть разницу между ними!Flexbox
Flexbox — фантастический инструмент для центрирования или позиционирования элементов в большинстве ситуаций, однако людей может запутать, какие свойства гибкости используются при центрировании элемента по вертикали, горизонтали или по обоим направлениям!
Причина в том, что это будет зависеть от того, что вы установили как
flex-direction
.Чтобы объяснить:Если у вас есть контейнер, установленный как
flex-direction: row
(настройка по умолчанию), тогда ваша главная ось является горизонтальной осью x, а поперечная ось — вертикальной осью y.Если вы измените этот параметр на
flex-direction: column
, то вертикальная ось Y станет вашей главной осью , а горизонтальная ось X станет вашей поперечной осьюЭто важно для двух основных свойств центрирования:
-
justify-content:
, который позиционирует элемент по его главной оси -
align-items:
, который позиционирует элемент поперек его поперечной оси
Как правило, установка для обоих этих двух свойств значения
center
всегда будет центрировать элемент в гибком контейнере, однако важно помнить о ключевых различиях между этими двумя свойствами для идеального позиционирования!Если контейнер представляет собой строку, и вы хотите центрировать элементы внутри по горизонтали, используйте
justify-content
! если это столбец, и вам нужно центрировать по горизонтали, тогда достигнитеalign-items
.Надеюсь, теперь вы полностью понимаете причину этого!Сетка
С сеткой все может стать немного сложнее при просмотре вашей страницы в целом, в зависимости от того, сколько столбцов и строк вы можете установить, и многие люди дойдут до flexbox в пределах контейнера сетки для центрирования элементов, однако я бы хотел бы поделиться одним очень быстрым и мощным трюком для идеального центрирования элемента в контейнере сетки.
В дополнение к присвоению контейнеру свойства
display: grid
, просто добавьте свойствоplace-items: center
, которое будет удерживать любой дочерний элемент идеально центрированным.Отличный вариант как для вертикального, так и для горизонтального центрирования элемента в любой ситуации!
Абсолютное центрирование
Я оставил свой личный фаворит напоследок из-за гибкости и мощности этой опции. Сначала я представлю код, который объясню позже:
.container { положение: относительное; } .ребенок { позиция: абсолютная; верх: 50%; осталось: 50%; преобразовать: перевести (-50%, -50%) }
Так что здесь происходит?
Ну, во-первых, нам нужно помнить, что всякий раз, когда мы хотим использовать абсолютное позиционирование
position: relative
.В противном случае дочерний элемент, скорее всего, будет позиционироваться по отношению ко всему телу документа.Затем мы используем
top: 50%
&left: 50%
, чтобы расположить дочерний элемент в точной средней точке его родительского элемента, однако это означает, что элемент только начнет в этой точке (так что в основном верхний левый угол div).Чтобы исправить это, мы используем
transform: translate (-50%, -50%)
, чтобы вернуть его на полпути как по оси x, так и по оси y, так что идеально центрируется по внутри родительского элемента.Две причины, почему мне это нравится:
Во-первых, это гибкость — если мы хотим центрировать элемент по горизонтали, мы просто используем
left: 50%
и используемtranslateX (-50%)
— наоборот для вертикального центрирования.Во-вторых, это , идеальный для создания полезных миксинов с Sass / SCSS. Например, у меня есть следующие миксины для любого проекта, над которым я работаю, для быстрого и легкого центрирования, когда оно мне нужно:
@mixin xCenter { позиция: абсолютная; осталось: 50%; преобразовать: translateX (-50%) } @mixin yCenter { позиция: абсолютная; верх: 50%; преобразовать: translateY (-50%) } @mixin absCenter { позиция: абсолютная; верх: 50%; осталось: 50%; преобразовать: перевести (-50%, -50%) }
, то каждый раз, когда нам нужно точно центрировать элемент, мы можем просто использовать
@include absCenter
и привет, готово!Я действительно надеюсь, что это было полезно, и сообщу, есть ли какие-либо другие полезные советы, приемы или магия CSS, которые, по вашему мнению, должны быть включены!
CSS Block — Align (Left, Center, Right)
- Дом
- Что такое Интернет? (www, w3)
- CSS — Каскадные таблицы стилей — Интерфейс языка разметки (HTML | XML)
- CSS — макет блока
1 — Около
Как выровнять визуальный элемент с отображением блока
Это блочная часть изделия для горизонтального позиционирования.
Вы можете выровнять визуальный элемент на двух уровнях:
2 — Статьи по теме
Комбинированный плагин — Связано с компонентом: ничего не найдено.
3 — уровень
3.1 — Коробка
3.1.1 — Центр коробки
Поле будет центрировано, а не содержимое. Поскольку коробка по умолчанию занимает 100% своего пространства, вам нужно установить ширину, чтобы увидеть эффект.
Ширина содержимого составляет 1110 , даже если max-width составляет 1140 из-за заполнения, поскольку размер поля установлен на border-box
<МАТЕРИАЛ> 1110 = 1140-15-15
Для размещения ящика использовался следующий элемент:
Выполнение:
.center-box { маржа слева: авто; маржа-право: авто; / * или маржа: 0 авто; * / ширина: подходящее содержание; граница: сплошной черный 1px; }
Центр
Бутстрап 4
Если вы используете бутстрап, вы можете использовать служебный класс mx-auto .
класс = "mx-auto"
3.1.2 — Коробка правая
.right-box { маржа слева: авто; ширина: подходящее содержание; граница: сплошной черный 1px; }
Правый
3.2 — Текст
По умолчанию поле занимает 100% его пространства, вы можете выровнять текст с помощью свойства text-align
h2 { выравнивание текста: центр; граница: сплошной черный 1px; }
Центр
Центрирование с использованием CSS | Dorward
Введение
Назад во времена HTML 3.x и переходных вариантов HTML 4.x и XHTML 1.0 ряд элементов поддерживал
выровнять атрибут
.Как он действовал, зависело от того, какой элемент он был применен, и прямого перевода для CSS нет. Как ты центр элементов зависит от типа элемента.Обратите внимание, что для краткости примеры в этом документе делают использование встроенного стиля. На практике встроенный стиль не приветствуется и вам следует использовать внешние таблицы стилей.
Встроенное содержимое
Встроенное содержимое включает в себя такие вещи, как текст, изображения,
text-align
, примененное к контейнер уровня блока с содержимым, которое будет выровнен внутри.Мой заголовок
Да, плохо названо. «inline-align», вероятно, был бы лучшим выбором.
Уточнение: хотя свойство
text-align
применяется кСодержание уровня блока
Контент уровня блока включает в себя такие элементы, как
<таблица>
и. На уровень центрального блока элементы устанавливают свои левое и правое поля наauto
(но см. IE Ошибки).Мой заголовок
Однако ширина по умолчанию для большинства элементов уровня блока — auto, который заполняет доступную область на экране.Просто быть центрированным помещает это в том же положении, что и при выравнивании по левому краю. Если хотите, чтобы это было визуально по центру следует установить ширину
max-width
, хотя Internet Explorer 6 и более ранние версии этого не делают поддерживают это, а IE 7 поддерживает это только в стандартном режиме).Мой заголовок
Встроенное содержимое и блок, в котором оно находится
Распространенная ошибка, которую делают люди после прочтения этой статьи, — это думать, что «Я хочу центрировать текст внутри моего
, это блок, поэтому я необходимо изменить поля.». Тогда для пояснения повторю:
текст — это встроенный контент.На изображении выше есть три элемента уровня блока. Чтобы сделать это ясно, что происходит, их ширина ограничена ( помните: это не по умолчанию, за исключением таблиц ), и добавляется граница.
Верхний элемент (X) имеет встроенное содержимое по центру. По умолчанию большинство элементов уровня блока,
, являясь очевидным исключением, имеют ширину пространство, доступное для их размещения, поэтому обычно содержимое на экране.
Икс
Нижний элемент (Z) центрируется блочно. Обратите внимание, что текст внутри все еще с выравниванием по левому краю. Если бы ширина не была ограничена, это центрирование было бы не оказывают видимого воздействия на элемент.
Z
Средний элемент (Y) имеет внутреннее содержимое по центру и сосредоточился на блочной технике.
Y
Ошибки Internet Explorer и содержимое уровня блокировки
К сожалению, наиболее часто используемый браузер на рынке — Microsoft Internet Explorer для Windows — имеет довольно серьезную ошибку относительно обработки элементов уровня блока и полей.В зависимости от в версии и режиме он может обрабатывать такие элементы как встроенный контент относительно центрирования. IE использует режим, основанный на DOCTYPE. предоставленный в верхней части HTML-документа, это называется переключением типа Doctype.
Затронутые версии Версия Режим Появляется ошибка 4 — 5,5 н / д Да 6-7 Причуды Да 6-7 Стандарты Нет Когда срабатывает ошибка:
- Авто маржа будет не работать
- Text-align будет (неправильно) влиять на положение потомков блока
Если ошибка не возникает, в Internet Explorer:
- Авто маржа будет работать
- Text-align будет (неправильно) влиять на положение потомков блока
В других браузерах:
- Авто маржа будет работать
- Text-align будет не влиять на положение потомков блока
Это можно обойти, но оба метода неприятны. взломать.
Встроенный CSS-хак
Поскольку браузер обрабатывает элементы уровня блока как встроенный контент (как что касается центрирования), на них влияет
text-align
свойство, поэтому элемент может быть помещен в контейнер и центрируется с помощьюtext-align
. Затем элемент должен иметь свой собственныйtext-align
reset доушел
.NB:
маржа: 1em авто;
устанавливает для верхнего и нижнего поля значение1em
, а для левого и правого поля —auto
.Он используется здесь, потому что расширенный пример вызывал горизонтальную прокрутку в большом количестве систем.Взлом JavaScript
Метод, позволяющий сохранить разметку в некоторой степени чище, но за счет отказа в случае отключения JavaScript, — это сценарий исправления полей Internet Explorer Дэвида Шонцлера.
Сводка
-
левое поле: авто; маржа-право: авто;
центрирует элемент уровня блока. -
выравнивание текста: по центру;
центрирует встроенное содержимое элемента уровня блока. - MSIE имеет ошибки, из-за которых при некоторых обстоятельствах он обрабатывает содержимое уровня блока как встроенное содержимое (для центрирования).
Полное руководство по центрированию в CSS
Приготовьтесь узнать, как подойти к давнему вопросу, с которым сталкиваются многие практикующие CSS:
«Как центрировать div?»Охваченные случаи использования #
- По вертикали и горизонтали (XY)
- Вертикальное центрирование (Y)
- Горизонтальное центрирование (X)
Вертикально и горизонтально (XY) #
Святой Грааль: вертикальное и горизонтальное центрирование, также известное как центрирование по оси x
Решение для координатной сетки №
самый современный и самый простой способ со следующими двумя строками CSS:
дисплей: сетка;
место-содержание: центр;Мы в центре!
Мы в центре!
Попался
Сворачивание дочерней сетки с использованием
автозаполнения
илиавтозаполнения
Учитывая дочернюю сетку, в которой используются следующие стили:
столбцы-шаблон-сетки: повторение ([автоподгонка или автозаполнение], minmax (10ch, 1fr));
Дочерняя сетка схлопнется сама по себе, в данном случае до
min
частиminmax
, из-заjustify-content
, установленного в сокращенииplace-content
.Исправление двоякое: переключите технику центрирования сетки на использование
place-items
вместоplace-content
, а затем специально укажите, что дочерняя сетка должна быть:ширина: 100%;
Или что угодно в качестве значения ширины, чтобы освободить место для столбцов сетки.
Хотели бы вы, чтобы советы по CSS были в вашем почтовом ящике? Присоединяйтесь к моему информационному бюллетеню, чтобы получать обновления статей, советы по CSS и внешние ресурсы!
Решение XY Flexbox №
В качестве альтернативы вы можете использовать немного более подробную версию Flexbox:
дисплей: гибкий;
align-items: center;
justify-content: center;Попался
Flexbox ведет себя немного иначе, когда добавляется второй элемент, поскольку гибкие элементы по умолчанию размещаются вдоль оси x:
Мы в центре!
…Вроде, как бы, что-то вроде!
Один из способов решить эту проблему — добавить:
flex-direction: столбец;
В качестве альтернативы, оберните дочерние элементы в один элемент, особенно если вы не хотите, чтобы на них влияло внешнее выравнивание flexbox.
Если дочерний элемент использует сетку с
автозаполнением
илиавтозаполнением
, он столкнется с той же проблемой, что и когда родительский контейнер является сеткой, как описано ранее.Альтернативное решение Flexbox для XY #
margin: auto
уникален для flexbox, и если у вас только один дочерний элемент, вы можете сделать следующее:.родительский дисплей {
: гибкий;
}.child {
маржа: авто;
}Поведение
auto
для дочерних элементов flex, в отличие от дочерних элементов блочных элементов, также может применяться вертикально, что позволяет этому решению работать.Центрирование по XY для блочных элементов #
Если вы не можете переключиться на сетку или раскладку flexbox, вот современное решение для этой классической проблемы.
Убедитесь, что дочерние элементы заключены в содержащий элемент, чтобы работало следующее:
.родительская позиция {
: относительная;
}.child-wrapper {
позиция: абсолютная;
верх: 50%;
осталось: 50%;
преобразование: перевод (-50%, -50%);
}Я по центру вертикально!
Я тоже!
Эта комбинация работает, потому что когда процентное значение предоставляется в определение
translate
, оно основано на вычисленной ширине (translateX
) или высоте (translateY
). В этом примере мы используем сокращение для применения значенийx
иy
кtranslate ()
.Абсолютное позиционирование выводит элемент из обычного потока документов, после чего мы можем применять точные значения (по мере необходимости) для управления его позиционированием в документе или, в этом случае, относительно родительского элемента с требуемой позицией
: относительное
на родительском элемент.После абсолютного позиционирования дочернего элемента из верхних 50% и оставшихся 50%, что составляет 50% высоты и ширины родительского элемента, соответственно, мы затем используем
translate (-50%, -50%)
, чтобы подтянуть дочерний элемент обратно вверх. 50% собственной высоты, а задняя часть оставила 50% собственной ширины.Это приводит к центрированию внешнего вида, масштабируемому вместе с содержимым.Попался
Поскольку мы использовали абсолютное позиционирование, есть вероятность, что контент вырастет до переполнения родительского, даже если, как в демонстрации, родительский элемент имеет минимальную ширину
Исправление: используйте сетку или flexbox 🙂 Или подготовьтесь к созданию #allthemediaqueries.
Вертикальное центрирование (Y) #
Решения для вертикального центрирования, также известного как
по оси Y
.Решение Y-сетки №
Нам нужно только одно свойство для вертикального выравнивания в сетке:
align-content: center;
Я по центру вертикально!
Я тоже!
Использование
align-content
масштабируется для нескольких дочерних элементов.Это также работает, если мы переключим ось сетки по умолчанию на
x
с:сетка-автопоток: колонка;
Я по центру вертикально!
Я тоже!
Y Решение Flexbox №
Элементы Flexbox можно выровнять по вертикали:
align-items: center;
Я по центру вертикально!
Я тоже!
Попался
Если вы переключите ось по умолчанию, добавив
flex-direction: column
, это решение не сработает.Теперь я по центру … по горизонтали?
Хм, я тоже …
Отсутствует огромное количество проблем при работе с flexbox, когда поворот оси по умолчанию переворачивает связанные свойства.
Для
column
илиy-axis
flex layout, вместоalign-items
нам теперь нужно использовать:justify-content: center;
Я по центру вертикально!
Я тоже!
Центровка по оси Y для блочных элементов #
Если возможно, переключите модель макета и используйте гибкую или сетку.
В противном случае, как и в решении XY, мы будем использовать абсолютное позиционирование и преобразование, но применим только к
translateY
для перемещения дочернего элемента на 50% его высоты.. Родительский {
позиция: относительная;
}.child-wrapper {
позиция: абсолютная;
верх: 50%;
преобразование: translateY (-50%);
}Я по центру вертикально!
Я тоже!
См. «Центрирование XY для блочных элементов», чтобы узнать, почему это работает.
Горизонтальное центрирование (X) #
Решения для горизонтального центрирования, также известного как
по оси x
.X Сетевое решение №
Свойства выравнивания
-
предназначены для выравниванияпо оси X
:justify-content: center;
Я по центру по горизонтали!
Я тоже!
Опять же, это работает, если мы переключим ось по умолчанию с помощью:
сетка-автопоток: колонка;
Я по центру по горизонтали!
Я тоже!
X Flexbox, решение №
Для центрирования по оси x
justify-content: center;
Я по центру по горизонтали!
Я тоже!
Попался
На этом этапе вы знаете, что произойдет — это не удастся для
flex-direction: column
.Мы исправим это, используя вместо
justify-content
:align-items: center;
Я по центру по горизонтали!
Я тоже!
X Центрирование для блочных элементов #
Это классическое решение, хотя его необходимо разместить на каждом элементе, который вы хотите центрировать индивидуально.
левое поле: авто;
поле справа: авто;Для демонстрации я также установил максимальную ширину
Я по центру по горизонтали!
Я тоже!
Центрирование по оси X для динамически позиционируемых элементов #
Вариант использования здесь — для таких компонентов, как раскрывающиеся меню или всплывающие подсказки, когда требуется центрирование элементов динамической / неизвестной ширины относительно связанного триггера.
Мы будем использовать метод, аналогичный центрированию по оси Y для элементов блока, но с использованием
left
иtranslateX
свойств:. Родительский {
позиция: относительная;
}.дочерняя оболочка {
позиция: абсолютная;
осталось: 50%;
преобразование: translateX (-50%);
}Я по центру вертикально!
Я тоже!
Как центрировать несколько Div с помощью CSS
Обновление: это старая статья. Теперь вы можете легко центрировать несколько div с помощью Flexbox.
элементов или других блочных элементов) на одной линии в области фиксированной ширины.Центрировать отдельный элемент в фиксированной области очень просто. Просто добавьтеmargin: auto
и фиксированную ширину к элементу, который вы хотите центрировать, и поля заставят элемент центрироваться.На самом деле должен быть аналогичный простой способ центрировать несколько равномерно расположенных элементов. Было бы неплохо, если бы в CSS было свойство с названием «box-align», которое можно было бы установить в «center», тогда дочерние элементы будут равномерно центрированы внутри их родителя.
Что ж, вы можете добиться чего-то подобного, воспользовавшись гибкостью CSS с «переделкой» элементов (за неимением лучшего термина).Посмотрите демонстрацию того, что я буду описывать в этом коротком руководстве.
Обычный способ центрировать несколько блоков
Обычно в такой ситуации вы просто перемещаете поля, а затем добавляете левое и правое поля, чтобы соответственно разнести их. Но это может стать немного запутанным, потому что IE6 не любит поля для чисел с плавающей запятой, и вам всегда нужно иметь другой идентификатор или класс для элементов, для которых вам не нужны поля (например, последний и / или первый).
Вы можете обойти проблему IE6, добавив
display: inline
в объявление только для IE6, но ваш код все равно будет несколько беспорядочным из-за дополнительного кода, который заставляет вести себя первый и / или последний элемент.Кроме того, последнее поле может упасть на следующую строку в IE.Есть другое решение, которое может работать лучше при определенных обстоятельствах.
Используйте
встроенный блок
и управляйте пустым пространствомДля достижения того же эффекта, что и при добавлении плавающих полей и полей, вы можете просто «преобразовать» элементы уровня блока как встроенные блоки, а затем манипулировать пустым пространством между ними. Вот как может выглядеть CSS:
#parent { ширина: 615 пикселей; граница: сплошная 1px #aaa; выравнивание текста: центр; размер шрифта: 20 пикселей; межбуквенный интервал: 35 пикселей; белое пространство: nowrap; высота строки: 12 пикселей; переполнение: скрыто; } .ребенок { ширина: 100 пикселей; высота: 100 пикселей; граница: сплошная 1px #ccc; дисплей: встроенный блок; вертикальное выравнивание: по центру; }
В моем примере выше я предполагаю, что есть четыре дочерних блока, каждый с дочерним элементом класса
inline-block
, что позволяет им естественным образом перемещаться с текстом и пробелами. Конечно, поскольку у нас нет текста в родительском контейнере, управление текстом и пробелами не будет проблемой.У родительского элемента (с идентификатором
родительского элемента
в этом примере) установлено четыре ключевых свойства текста, а у дочерних элементов — два:-
text-align
выравнивает все встроенные дочерние элементы по центру -
межбуквенный интервал
управляет размером каждой единицы белого пространства между полями -
white-space: nowrap
предотвращает возможное падение последнего элемента на следующую строку -
переполнение: скрыто
предотвращает растяжение поля в IE6 -
vertical-align: middle
(на дочерних элементах) удерживает блоки в одной вертикальной плоскости друг с другом при добавлении содержимого -
дисплей: встроенный блок
(очевидно)
Internet Explorer поднимает свою уродливую голову
Каким было бы решение CSS без проблемы с Internet Explorer, которую нужно было бы обойти? Хотя этот метод работает одинаково во всех браузерах (включая IE8), IE6 и IE7 не взаимодействуют друг с другом, потому что они не полностью поддерживают
inline-block
.Чтобы эти браузеры показывали практически тот же результат, вам нужно добавить следующий CSS:.child { * дисплей: встроенный; * поле: 0 20 пикселей 0 20 пикселей; }
Приведенный выше CSS должен применяться только к IE6 и IE7, и он должен располагаться после другого CSS. В моем коде (и в приведенном выше примере кода) я добился этого с помощью звездного хака. Звездочка (или звездочка) в начале каждой строки скрывает обе строки из всех браузеров, кроме IE6 и IE7. Добавленные здесь поля помогают нам получить тот же визуальный результат, а новое свойство
display
использует ошибку в тех браузерах, которая заставляет элемент блока работать так же, как его встроенный, когда вы объявляетеdisplay: inline-block
, за которым следуетдисплей: встроенный
.Недостатки / Последние мысли
Не так много недостатков в использовании этого метода для центрирования нескольких div. Вам просто нужно убедиться, что настройки пустого пространства и текста, которые вы применяете, сброшены для любых дочерних элементов внутри полей. Таким образом, хотя это может работать, когда у вас есть прямые изображения или другой нетекстовый контент, это может быть больше проблем, чем того стоит, если ваши блоки полностью загружены разнообразным контентом.
Но, тем не менее, это хороший способ узнать, когда вам нужно центрировать некоторые элементы блока с равным интервалом, и вы не хотите применять дополнительные классы к конечным элементам.И этот прием станет еще более важным, когда старые версии IE исчезнут из общего пользования. Но я не задерживаю дыхание.
Как вертикально центрировать встроенные элементы (встроенный блок)
Существует множество различных методов, которые вы можете использовать для выравнивания встроенных (встроенных блоков) элементов по вертикали. В этом фрагменте мы продемонстрируем некоторые широко используемые решения такого рода проблем с выравниванием.
Решение со свойством заполнения CSS¶
Иногда встроенные элементы (inline-block) могут отображаться вертикально по центру из-за равного заполнения над и под ними.
Пример вертикального центрирования встроенных элементов с помощью свойства padding:
Название документа <стиль> тело { фон: # c2c2c2; размер шрифта: 90%; } основной { фон: #fff; маржа: 20px 0; отступ: 50 пикселей; } main a { фон: # 83d483; цвет: #fff; отступ: 40 пикселей 30 пикселей; текстовое оформление: нет; } <основной> 1 2 3Результат
Решение с использованием свойств CSS line-height и height
Другой способ решить вашу проблему с вертикальным выравниванием — установить свойство line-height равным высоте.Используйте этот метод для центрирования текста в том случае, если вы уверены, что ваш текст не будет переноситься.
Пример вертикального центрирования встроенного элемента со свойствами line-height и height:
Название документа <стиль> тело { фон: # c2c2c2; размер шрифта: 90%; } основной { фон: #fff; маржа: 20px 0; отступ: 40 пикселей; } main span { дисплей: встроенный блок; фон: # 83d483; цвет: #fff; высота: 100 пикселей; высота строки: 100 пикселей; отступ: 20 пикселей; ширина: 50%; белое пространство: nowrap; } <основной> Пример вертикально центрированной линии.Решение со свойством CSS vertical-align¶
Свойство CSS vertical-align применяется к выравниваемым элементам, а не к их родительскому элементу.
Здесь мы выравниваем элементы и внутри
. В нашем примере вертикальное выравнивание выполняется относительно текущей текстовой строки, а не полной высоты родительского элемента. Но если вы хотите, чтобы родительский элемент был выше, а его элементы были центрированы по вертикали, вы можете установить свойство line-height навместо высоты.Пример вертикального центрирования элементов inline и inline-block с помощью свойства vertical-align:
Название документа <стиль> div { фон: #dbdbdb; маржа: 10 пикселей; высота строки: 100 пикселей; } div> * { вертикальное выравнивание: по центру; высота строки: нормальный; } a { цвет фона: # 83d483; высота: 20 пикселей; дисплей: встроенный блок; граница: сплошная 1px # 666; отступ: 5 пикселей; } охватывать { фон: # 6fa2bf; }Некоторая ссылка Немного текстаВ следующем примере мы выровняли несколько строк текста по центру по вертикали в элементе
и в макете таблицы, созданном с помощью CSS.Здесь мы устанавливаем отображение на «table-cell» для нашего элемента и свойство vertical-align на «middle». Но мы не используем свойство vertical-align в элементе
, так как по умолчанию оно размещается посередине. Пример вертикального центрирования содержимого внутри элементов
и
: Название документа <стиль> тело { фон: # c2c2c2; размер шрифта: 90%; } Таблица { фон: #fff; ширина: 200 пикселей; граница-коллапс: раздельный; маржа: 15 пикселей; высота: 200 пикселей; } table td { фон: # 83d483; цвет: #fff; отступ: 15 пикселей; граница: 5px solid #fff; } .center-table { дисплей: таблица; высота: 200 пикселей; фон: #fff; ширина: 200 пикселей; маржа: 20 пикселей; } .center-table p { дисплей: таблица-ячейка; маржа: 0; фон: # 83d483; цвет: #fff; отступ: 20 пикселей; граница: 5px solid #fff; вертикальное выравнивание: по центру; } <таблица>Пример вертикально центрированных нескольких строк текста в ячейке таблицы. Пример вертикально центрированных нескольких строк текста в макете таблицы, созданном с помощью CSS.
Решение с CSS Flexbox¶
Вертикальное выравнивание встроенных элементов также возможно с помощью Flexbox. Вы можете легко использовать один гибкий дочерний элемент, чтобы центрировать его в гибком родительском элементе.
Пример вертикального центрирования встроенных элементов с помощью Flexbox:
Название документа <стиль> тело { фон: # c2c2c2; размер шрифта: 90%; } div { фон: #fff; ширина: 200 пикселей; маржа: 20 пикселей; } .flex-center { фон: # 83d483; цвет: #fff; граница: 5px solid #fff; дисплей: гибкий; flex-direction: столбец; justify-content: center; высота: 200 пикселей; изменить размер: по вертикали; перелив: авто; } .flex-center span { маржа: 0; отступ: 15 пикселей; }Пример вертикально центрированных нескольких строк в контейнере flexbox.Это актуально только в том случае, если родительский контейнер имеет фиксированную высоту.
Решение с методом «призрачного элемента»
Этот метод предполагает, что псевдоэлементу (в нашем примере это: before) задана полная высота. Он помещается в контейнер, и текст выравнивается по нему. В следующем примере у нас есть элемент
, который является элементом уровня блока, но мы делаем его встроенным в блок, используя свойство display.
Пример вертикального центрирования встроенных элементов с «призрачным элементом»:
Название документа <стиль> тело { фон: # c2c2c2; размер шрифта: 90%; } div { фон: #fff; ширина: 240 пикселей; высота: 200 пикселей; маржа: 15 пикселей; цвет: #fff; изменить размер: по вертикали; перелив: авто; отступ: 20 пикселей; } .ghost-center { положение: относительное; } .ghost-center :: before { содержание: " "; дисплей: встроенный блок; высота: 100%; ширина: 1%; вертикальное выравнивание: по центру; } .ghost-center p { дисплей: встроенный блок; вертикальное выравнивание: по центру; ширина: 190 пикселей; маржа: 0; отступ: 10 пикселей; фон: # 83d483; }Пример вертикально центрированных нескольких строк в контейнере.
Center a Div, Twitter Bootstrap 3
Объектив
Используя вспомогательный класс
center-block
Twitter Bootstrap, который доступен в Bootstrap 3.2, вы можете центрировать div.класс центрального блока содержит следующий код css
.center-block { дисплей: блок; маржа-право: авто; маржа слева: авто; }
Из приведенного выше кода очевидно, что этот класс гарантирует, что связанный блок отображается как элемент уровня блока, и у него должны быть установлены поля, необходимые для размещения его в центре.
В следующем коде показано, как использовать центральный блок
Центрировать Div в Twitter Bootstrap 3 Lorem ipsum dolor sit amet, animal postulant complectitur duo ei. Eros iracundia contentiones id cum. Utinam soleat apeirian nam cu. Unum labore Principes no pro, dolor omnium quo eu, quod similique eu eum.
Его ut alii populo putent, illud populo repudiare duo an. Wisi computionam te quo. Viris maluisset cu has, te dico utamur appareat pro, ex probo quidam interesset pri. Duo ad sensibus torquatos adolescens, сидите с минимальным трудом номинально. Cu dolorum ocurreret mei, nam novum zril expetenda ne.
Посмотреть живую демонстрацию вышеперечисленного.
Обратите внимание, что когда элемент центрируется таким образом, элемент помещается непосредственно в класс строки.
Предыдущая: https: // www.w3resource.com/twitter-bootstrap/center-a-div.php
.
Далее: Варианты с использованием Bootstrap Material Design