6 методов вертикального центрирования с помощью css
Содержание:
- Шаг 2
- Вариант 3
- Выравнивание и гибкое-направление
- Вертикальное центрирование
- Использование line-height для вертикального центрирования
- Выравнивание содержимого по главной оси
- CSS — Выравнивание по вертикали
- Выравнивание текста по центру CSS
- Выравнивание по центру с помощью text-align по горизонтали
- 5-ый метод
- Параметры тени у текста — свойство text-shadow
- Выравнивание по горизонтальному центру блочных (block) элементов с помощью margin: auto
- Центрирование по вертикали в CSS уровня 3
- Как выровнять несколько картинок по центру в css
- Автоматический отступ
- Центрируем два адаптивных div-элемента рядом друг с другом
- Перекрёстная ось
- Таблица посередине text-align: center;
- Выравнивание содержимого по перекрёстной оси — свойство align-content
- How to Center Vertically
Шаг 2
Сейчас мы напишем простейший CSS, для размещения элементов на странице. Вы должны сохранить этот код в файле style.css. Именно на него прописана ссылка в html-файле.
Перед тем как сделать наш контент выровненным по центру, необходимо для body и html установить высоту 100%. Так как высота считается без внутренних и внешних отступов (padding и margin), то мы устанавливаем их (отступы) в 0, чтобы не было скроллбаров.
Нижний отступ для элемента «floater»-а равен минус половине высоты контента (400px), а именно -200px;
Сейчас ваша страничка должна выглядеть приблизительно так:
Поскольку элементу #centered установлено position:relative, мы можем использовать абсолютное позиционирование элементов внутри него. Затем установим overflow:auto; для элемента #content, чтобы появлялись скроллбары, в случае если не будет помещаться контент.
Вариант 3
Теперь будем выравнивать с помощью flex. Может показаться, что это идеальный способ выравнивания, потому что он действительно работает очень просто. Однако FLEX не справляется с задачей описанной в варианте 2. По крайней мере, у меня не получалось достигнуть тех же результатов.
К следующей секции:
<section id=»cssmenu»> <ul> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> </section>
Добавляем стили:
#cssmenu { margin: 20px auto; } #cssmenu ul { list-style: none; display: flex; flex-wrap: wrap; justify-content: center; } #cssmenu > ul > li { margin: 1px; }
Получаем:
В приведенном примере:
flex-wrap: wrap;
Перекидывает блоки на следующую строку, если они заполняют контейнер. Иначе они будут уходить дальше за окно браузера.
А этим:
justify-content: center;
Мы выравниваем содержимое блоков по центру.
Выравнивание и гибкое-направление
Начальное положение элементов поменяется, если вы измените значение свойства — например установите вместо .
В следующем примере заданы следующие свойства: и . В языках с параметром записи все элементы будут отображаться с левой стороны. Попробуйте изменить свойство на . Вы увидите, что теперь элементы отображаются реверсивно.
Может показаться немного запутанным, но главное правило, которое необходимо запомнить – до тех пор, пока вы не измените свойство , элементы контейнера выстраиваются в режиме записи вашего языка ( или ).
Вы можете сделать отображение элементов контейнера блочным, задав свойству значение . Свойство будет отображать элементы в столбец сверху вниз. Таким образом, первый элемент будет первым параграфом.
Если вы зададите свойству реверсивное значение, то элементы будут позиционироваться в обратном порядке. Так, свойство будет брать начало в конце контейнера. Первый элемент будет находится в конце строки, если задано строчное отображение элементов или в конце параграфа, если задано блочное отображение.
Вертикальное центрирование
CSS уровня 2 не обладает свойством вертикального центрирования. Вероятно, оно появится в версии CSS уровня 3 (см. ). Но даже в CSS2 вы можете центрировать блоки вертикально при помощи комбинирования нескольких свойств. Хитрость заключается в том, чтобы указать, что внешний блок должен быть отформатирован как ячейка таблицы, т.к. содержимое ячейки таблицы
может быть выровнено по центру вертикально.
Пример, приведенный ниже, демонстрирует центрирование абзаца внутри блока, который имеет определенную заданную высоту. Отдельный пример показывает абзац, который центрирован вертикально в окне браузера, потому что находится внутри блока, позиционированного абсолютно и по высоте окна.
DIV.container { min-height: 10em; display: table-cell; vertical-align: middle } ... <DIV class="container"> <P>Этот маленький абзац... </DIV>
Использование line-height для вертикального центрирования
Для элементов, которые содержат одну строку текста/иконку, можно использовать вертикальное центрирование за счет указания свойства line-height такого же размера, как и высота элемента. Учтите, что — одно из немногих, для которого необязательно задавать единицы измерения, т.е. оно может быть выражено, как в px или в %, так и в виде цифры-коэффициента:
Сравнение значений line-height
CSS
.some { line-height: 160% }
равносильно
.some { line-height: 1.6 }
.some2 { line-height: 16 }
значительно больше, чем
.some2 { line-height: 16px }
1 |
.some {line-height160%} равносильно .some {line-height1.6} .some2 {line-height16} значительно больше, чем .some2 {line-height16px} |
В примере ниже для всех элементов с классом .icon заданы свойства и , за счет чего иконки размещаются по центру круга. Во второй иконке это свойство переопределено в классе .no-line-height в виде — и мы видим, что иконка «отправилась» к верху круга.
Вторая часть этого примера — это форматирование ссылки в виде кнопки. Здесь, наоборот, 2 кнопки имеют общий класс с высотой в 50px (), и текст в первой тоже размещен в верхней части кнопки. Зато ко второй кнопке добавлен класс .line-height со свойством — и текст в ней центрирован.
Поскольку все элементы в примере имеют свойство , то , заданный для контейнера, выравнивает весь текст внутри каждого из них по горизонтальному центру.
See the Pen line-height for vertical text centering by Elen (@ambassador) on CodePen.dark
Выравнивание содержимого по главной оси
Теперь, когда мы увидели, как работает выравнивание по перекрёстной оси, можно посмотреть на главную ось. Здесь нам доступно только одно свойство — . Это обусловлено тем, что с элементами на главной оси мы работаем только как с группой. Используя свойство , мы контролируем, что происходит со свободным пространством на главной оси, и требуется ли нам больше пространства, чем нужно для отображения наших элементов.
В нашем первом примере с использованием свойства , применённым к контейнеру, элементы отображаются как строка и выстраиваются в начале блока. Это обусловлено тем, что свойство имеет начальное значение . Все свободное место располагается в конце контейнера.
Свойство может принимать те же самые значения, что и .
- (не определено в спецификации Flexbox)
В примере ниже, свойству задано значение . Все доступное пространство распределяется между элементами после их позиционирования в контейнере. Первый и последний элементы занимают положения в начале и в конце контейнера соответственно.
Если свойство имеет значение , то свойство распределит доступное пространство в контейнере между элементами.
Необходимо помнить, что при использовании свойств и элементы позиционируются в режиме записи. Если свойству задано значение и стоит режим записи left-to-right (слева-направо), как в английском, то элементы выравниваются, начиная с левой стороны контейнера.
Однако, если задан режим записи right-to-left (справа-налево), как в арабском языке, то элементы будут выстраиваться с правой стороны контейнера.
В примере ниже свойству задано значение , которое изменяет порядок наших элементов. Вы можете удалить это свойство или изменить значение свойства , чтобы увидеть, как работает flexbox, когда отображение элементов начинается справа.
CSS — Выравнивание по вертикали
1. Отцентровать один элемент (, ) относительно другого (в котором он расположен) по центру. Родительский блок в этом примере имеет фиксированную высоту, которая задаётся с помощью свойства CSS .
HTML-код:
<div class="parent"> ... <div class="child"> ... </div> </div>
CSS-код:
.parent { line-height: 500px; } .child { display: inline-block; vertical-align: middle; }
Браузеры, которые поддерживают данное решение:
- Chrome 1.0+
- Firefox 3.0+
- Internet Explorer 8.0+
- Opera 7.0+
- Safari 1.0+
2. Центрирования одного блока относительно другого по вертикали посредством представления родителя как таблицы, а ребёнка как ячейки этой таблицы.
.parent { display: table; } .child { display: table-cell; vertical-align: middle; }
Браузеры, которые поддерживают данное решение:
- Chrome 1.0+
- Firefox 1.0+
- Internet Explorer 8.0+
- Opera 7.5+
- Safari 1.0+
Выравнивание текста по центру CSS
Как правило, совместно с задачей выровнять текст по вертикали необходимо сделать выравнивание текста по центру в CSS. Для этого мы можем использовать стандартное свойство text-align со значением center, которое нужно задать для родительского элемента, то есть для блока, в котором находится нужный текст.
Зададим для блока с текстом, который мы использовали в первом примере, выравнивание текста по ширине в CSS:
CSS
.text-vertical-al p{
display:table-cell;
vertical-align:middle;
text-align:center;
}
1 |
.text-vertical-al p{ displaytable-cell; vertical-alignmiddle; text-aligncenter; } |
Теперь текст выровнен точно по центру блока:
Выравнивание текста по вертикали CSS
Обратите внимание! Свойство text-align:center; задано для тега , так как в данном случае абзац является родительским блоком для текста.
Выравнивание по центру с помощью text-align по горизонтали
Следующий способ выравнивания по центру <div> заключается в использовании CSS-свойства text-align со значением center. Данное свойство предназначено для горизонтального выравнивания текста.
Само по себе это свойство не сможет выровнять блок по центру. Но если задать его для родительского элемента, а дочерний элемент сделать строчным, то есть присвоить ему свойство display со значением inline, то мы сможем выровнять этот блок строго по центру.
Данный вариант не сработает для блока с абсолютным позиционированием (position:absolute;) или если для блока задано обтекание (float:left или float:right).
Пример использования:
HTML:
CSS:
PHP
.parent-block1{
text-align:center; /*Выравнивание по центру */
}
.child-block1{
width:50%;
display:inline; /*Делаем строчный элемент*/
}
1 |
.parent-block1{ text-aligncenter;/*Выравнивание по центру */ } .child-block1{ width50%; displayinline;/*Делаем строчный элемент*/ } |
Вот, что у нас получилось:
Выравнивание div по центру
5-ый метод
С помощью этого метода можно выровнять по центру одну строку текста. Просто устанавливаем высоту текста (line-height) равной высоте элемента (height). После этого строка будет выведена по центру.
Минусы
- Работает только с текстом (не работает с блочными элементами).
- Если текста больше чем одна строка, то выглядит очень плохо.
Этот способ очень полезен для небольших элементов, например чтобы вырвнять по центру текст в кнопке или в текстовом поле.
Теперь вы знаете как добиться вертикального выравнивания по центру, давайте сделаем простой web-сайт, который, в конце-концов будет выглядеть так:
Параметры тени у текста — свойство text-shadow
Для любителей различных украшательств в стандарте CSS3 появилась возможность задавать тень у текста. Грамотное использования свойства text-shadow позволяет заметно оживить web страницу. Синтаксис:
Значение none отменяет добавление тени у текста и установлено по умолчанию.
Цвет тени задается в любом доступном CSS формате и является не обязательным параметром. По умолчанию цвет тени совпадает с цветом текста.
Горизонтальное смещение тени можно задавать в любой единице измерения поддерживаемой CSS. При положительном значении тень будет располагаться правее текста, при отрицательном — левее. Нулевое значение расположит тень прямо под текстом и имеет смысл только если задано размытие тени.
Вертикальное смещение тени тоже можно задавать в любой единице измерения поддерживаемой CSS. При положительном значении тень будет смещаться ниже текста, при отрицательном — выше. Нулевое значение расположит тень прямо под текстом.
В любой единице измерения задается и радиус размытия тени. Чем больше это значение, тем шире становится тень и сильнее сглаживается. Если этот параметр не установлен, то значение размытие предполагается равным нулю. Так как алгоритм сглаживания обычно у разных браузеров отличается, то и вид тени может несколько отличаться в зависимости от браузера.
Рассмотрим пример:
И вот так будет выглядеть текст абзаца p с применением данного правила стиля в Internet Explorer 11:
Выравнивание по горизонтальному центру блочных (block) элементов с помощью margin: auto
В том случае, если нам нужно центрировать блочный элемент относительно страницы, то тут тоже есть давно работающий метод, который предполагает указание ширины элемента и , например, так форматируется большая часть контейнеров:
.container {
width: 90%;
max-width: 1200px;
padding-left: 15px;
padding-right: 15px;
margin: auto;
}
1 |
.container{ width90%; max-width1200px; padding-left15px; padding-right15px; marginauto; } |
Вариации кода могут быть разными, но принцип понятен, я думаю. Можно разместить простую форму посередине ее родительского элемента. Поскольку тег относится к блочным, то сработает для него в качестве центрирующего правила при заданной ширине (свойство ):
Центрируем форму за счет margin: auto
<style>
#center-form {
width: 350px;
height: 200px;
padding: 20px;
border: 3px double #1e8cbe;
border-radius: 12px;
margin: 20px auto;
}
</style>
<div class=»test»>
<form id=»center-form»>
<p><input name=»login» type=»text» placeholder=»Логин»></p>
<p><input name=»login» type=»password» placeholder=»Пароль»></p>
<button class=»button»>Войти</button>
</form>
</div>
1 |
<style> #center-form { width350px; height200px; padding20px; border3pxdouble#1e8cbe; border-radius12px; margin20pxauto; } <div class=»test»> <form id=»center-form»> <p><input name=»login»type=»text»placeholder=»Логин»><p> <p><input name=»login»type=»password»placeholder=»Пароль»><p> <button class=»button»>Войти<button> <form> <div> |
Смотрим на результат:
Свойство или , как в стилях для формы, или 2 свойства: +, заданные для блочного элемента с определенной шириной, сообщают браузеру, что тот должен самостоятельно рассчитать отступы слева и справа таким образом, чтобы они были одинаковыми. Браузеру сделать это несложно, т.к. ему всегда известна ширина открытого на данный момент окна, поэтому вычесть из нее ширину блочного элемента и разделить полученное значение на 2 для браузера пара пустяков.
Центрирование по вертикали в CSS уровня 3
Уровень 3 CSS предлагает и другие возможности. На момент написания этой статьи (2014 год), хороший способ вертикального выравнивания блока без использования абсолютного позиционирования (что может приводить к частичному перекрытию текста) всё ещё обсуждается. Но если вам известно, что частичное перекрытие текста не станет проблемой в вашем документе, вы можете использовать свойство ‘transform’, чтобы выровнять по центру абсолютно позиционированный элемент. Например:
Этот абзац выровнен вертикально по центру.
Для документа, который выглядит вот так:
<div class=container3> <p>Этот абзац… </div>
таблица стилей выглядит так:
div.container3 { height: 10em; position: relative } /* 1 */ div.container3 p { margin: 0; position: absolute; /* 2 */ top: 50%; /* 3 */ transform: translate(0, -50%) } /* 4 */
Основные правила:
- Сделайте контейнер относительно позиционированным (position: relative), что превратит его в контейнер для абсолютно позиционированных элементов.
- Сам элемент сделайте абсолютно позиционированным (position: absolute).
- Поместите элемент посередине контейнера с помощью ‘top: 50%’. (Заметьте, что ‘50%’ здесь означают 50% высоты контейнера.)
-
Используйте translate, чтобы переместить элемент вверх на половину своей собственной высоты. (
‘50%’ в ‘translate(0, -50%)’ указывают на высоту самого элемента.)
Недавно (начиная приблизительно с 2015-го года) в нескольких реализациях CSS стала доступна новая техника. Она основана на новом ключевом слове ‘flex’ для свойства ‘display’. Это ключевое слово предназначено для использования в графическом интерфейсе пользователя (GUI), но ничто не мешает вам использовать его в документе, если у этого документа правильная структура.
Этот абзац выровнен по центру вертикально.
таблица стилей выглядит следующим образом:
Как выровнять несколько картинок по центру в css
Часто возникают случаи, когда нужно выравнивание нескольких картинок по центру в css, для этих случаев удобно использовать
родительский слой div, внутри которого будут изображения. Сам родительский слой div нужен, чтобы расположить изображения по центру.
Выравнивание нескольких изображений по центру в css делается с помощью размещения всех картинок
внутри родительского тега <div>, который по умолчанию уже является блочными элементом,
т. е. растянут на всю ширину.
Но у тега <div> по умолчанию строчное выравнивание по левому краю, поэтому нужно установить
свойству text-align значение «center», тогда все его содержание будет выровнено по центру.
Должно получиться примерно так: <div style=»text-align:center»>…тут картинки…</div>.
Дополнительно у каждого изображения можно задать отступы, чтобы они не слипались друг с другом, а находились на некотором
расстоянии между собой. Отступы делаются, через то же свойство margin, рассмотренное выше.
У margin: y1 x1 y2 x2, цифры в пикселях y1 x1 y2 x2 отвечают за отступ сверху, справа, снизу и
слева соответственно.
Пример как выровнять 3 изображения по центру в css
Результат в браузереКод страницы
<!DOCTYPE html>
<html lang=»ru»>
<head>
<meta charset=»utf-8″ />
<title>Тестовая страница</title>
</head>
<body>
<div style=»text-align:center»>
<img src=»my_img/1.jpg» style=»margin:0px 10px 0px 10px; » >
<img src=»my_img/1.jpg» style=»margin:0px 10px 0px 10px; » >
<img src=»my_img/1.jpg» style=»margin:0px 10px 0px 10px; » >
</div>
</body>
</html>
<!DOCTYPE html>
<html lang=»ru»>
<head>
<meta charset=»utf-8″ />
<title>Тестовая страница</title>
</head>
<body>
<div style=»text-align:center»>
<img src=»my_img/1.jpg» style=»margin:0px 10px 0px 10px; » >
<img src=»my_img/1.jpg» style=»margin:0px 10px 0px 10px; » >
<img src=»my_img/1.jpg» style=»margin:0px 10px 0px 10px; » >
</div>
</body>
</html>
Автоматический отступ
Этот способ напоминает предыдущий. Но здесь необходимо выставить атрибуты top, right, bottom и left на 0, а величину отступа выставить на auto. Огромное преимущество метода – наличие рабочих скроллбаров родительского элемента. Но недостаток способа такой же, как и у предыдущего – необходимость жестко задавать размеры блока.
Код выглядит следующим образом.
<style> .parent { width: 100%; height: 100%; position: absolute; top: 0; left: 0; overflow: auto; } .block { width: 250px; height: 250px; position: absolute; /* Выставляем параметры top, right, bottom, left на 0, а margin – на auto */ top: 0; right: 0; bottom: 0; left: 0; margin: auto; img { max-width: 100%; height: auto; display: block; margin: 0 auto; border: none; } } </style> <div class="parent"> <div class="block"> <img src="test.jpg" alt=""/> </div> </div>
Центрируем два адаптивных div-элемента рядом друг с другом
Здесь у нас два расположенных рядом адаптивных div-элемента. Этот метод установки div по центру экрана будет работать во всех современных браузерах.
CSS
.container { text-align: center; } .left-div { display: inline-block; max-width: 300px; vertical-align: top; } .right-div { display: inline-block; max-width: 150px; } screen and (max-width: 600px) { .left-div, .right-div { lef max-width: 100%; } }
HTML
<div class="container"><div class="left-div"></div><div class="right-div"></div></div>
Здесь у нас несколько элементов с примененным свойством inline-block, расположенных внутри центрированного контейнера. В этом примере также используются медиа-запросы CSS; то есть, если размер экрана меньше 600 пикселей, то свойство max-width как для левого, так и для правого div-элемента устанавливается на 100%.
Перекрёстная ось
Свойства и управляют выравниванием flex элементов по перекрёстной оси: вертикальной для установленным в и горизонтальной для установленным в .
Рассмотрим выравнивание по перекрёстной оси на простейшем примере. Если установить у контейнера, все дочерние элементы становятся flex элементами, выстроенными в ряд. Все они по вертикали примут размер самого высокого элемента, который станет определяющим вертикального размера. Если у flex контейнера задана высота, то все элементы растянутся до высоты контейнера, независимо от размера содержимого.
Все элементы становятся одной высоты, т.к. по умолчанию свойство имеет значение .
Другие возможные значения свойства:
В примере ниже значение свойств установлено в . Попробуйте другие значения для понимания их действия.
Свойство устанавливает для всех flex элементов как для группы. Это означает, что можно явно указать значение для конкретного элемента. Свойство может принимать все те же значения, что и свойство а так же значение , которое сбросит значение, установленное в flex контейнере.
В следующем примере, у flex контейнера установлено , означающее, что все элементы будут выравнены по началу перекрёстной оси. У первого элемента с помощью селектора установлено ; у следующего элемента с классом установлено . Можно изменять значение на контейнере или на элементе для изучения их работы.8н
До сего момента мы изучали поведение при установленном в , в языке, использующем написание сверху вниз. Это означает, что основная ось идёт горизонтально, а выравнивание по перекрёстной оси сдвигает элементы вверх или вниз.
Если изменить на column, и будут сдвигать элементы влево или вправо.
Можно попробовать пример ниже, где установлено .
Таблица посередине text-align: center;
поставить таблицу посередине с помощью text-align: center;
Нам понадобится div, внутрь тега начального помещаем «style=»text-align: center;»»
<div style=»text-align: center;»>
Далее нам нужен тег table + добавляем туда атрибут border + attribute style с «display: inline-block»
<table width=»200″ border=»1″ style=»display: inline-block;»>
Соберем весь код таблицы посередине вместе:
Html:
<div style=»text-align: center;»>
<table width=»200″ border=»1″ style=»display: inline-block;»>
<tbody>
<tr>
<td>Пример таблицы по центру с атрибутом style </td>
</tr>
</tbody>
</table>
</div>
Поставим эту таблицу прямо здесь:
Выравнивание содержимого по перекрёстной оси — свойство align-content
До сих пор мы выравнивали элементы внутри flex-контейнера. Если содержимое вашего flex контейнера переносится на несколько строк, используйте свойство для управления свободным пространством между строками. В спецификации это описано как .
Чтобы свойство работало, необходимо, чтобы в flex-контейнере было больше места, что требуется для отображения всего содержимого. Оно применяется ко всем элементам как группе, и управляет распределением свободного места и положением всей группы элементов внутри контейнера.
Свойство принимает следующие значения:
- (не описано в спецификации Flexbox)
В примере ниже flex контейнер имеет высоту 400 пикселей — больше, чем необходимо для отображения всех элементов. Значение установлено в , означающее, что свободное пространство разделено между строками, расположенными вплотную к началу и концу контейнера по перекрёстной оси.
Попробуйте другие значения для понимания принципа их работы.
Также можно сменить значение на и увидеть, как наше свойство работает в режиме колонок. Как и ранее, что увидеть работу свойства, у контейнера должно быть больше свободного места, чем требуется содержимому.
Замечание: значение не определено в спецификации flexbox и добавлено позже в спецификацию Box Alignment. Поддержка браузерами этого значение не так широка, как значений определённым в спецификации flexbox.
В документации по на MDN приведено больше деталей о всех значениях и поддержке браузерами.
How to Center Vertically
Centering elements vertically without modern methods like Flexbox can be a real chore. Here we’ll go over some of the older methods to center things vertically first, then show you how to do it with Flexbox.
How to Center a Div Vertically with CSS Absolute Positioning and Negative Margins
For a long time this was the go-to way to center things vertically. For this method you must know the height of the element you want to center.
First, set the property of the parent element to .
Then for the child element, set the property to and to :
But that really just vertically centers the top edge of the child element.
To truly center the child element, set the property to :
How to Center a Div Vertically with Transform and Translate
If you don’t know the height of the element you want to center (or even if you do), this method is a nifty trick.
This method is very similar to the negative margins method above. Set the property of the parent element to .
For the child element, set the property to and set to . Now instead of using a negative margin to truly center the child element, just use :
Note that is shorthand for and . You could also write to center the child element vertically.
How to Center a Div Vertically with Flexbox
Like centering things horizontally, Flexbox makes it super easy to center things vertically.
To center an element vertically, apply and to the parent element: