Способы вертикального выравнивания по центру в CSS.
Способы вертикального выравнивания по центру в CSS.
Существует несколько принципиально отличающихся способов для того чтобы отцентрировать объект по вертикали с помощью CSS, однако сложность может быть в выборе правильного. Мы рассмотрим некоторые из них, а также сделаем небольшой сайт, используя полученные знания.
Вертикальное выравнивание по центру с помощью CSS достигается не так просто. Существует множество способов и не все работают во всех броузерах. Давайте рассмотрим 5 различных методов, а также «за» и «против» каждого из них. Пример.
1-ый способ
Этот метод предполагает, что мы устанавливаем некоторому элементу <div> способ отображения как таблица, после этого мы можем использовать в нём свойство vertical-align (которое работает по разному в различных элементах).
<div> <div> <div> Некоторая полезная информация, которая должна располагаться по центру. </div> </div> </div>
#wrapper{
display : table;
}
#cell{
display : table-cell;
vertical-align : middle;
}
Плюсы
- Контент может динамически изменять высоту (высота не определена в CSS).
- Контент не обрезается в случае, если для него недостаточно места.
Минусы
- Не работает в IE 7 и меньше
- Много вложенных тэгов
2-ой метод
Этот метод использует абсолютное позиционирование div-а, которому top устанавливается в 50%, а верхний отступ (margin-top) минус половине высоты контента. Это подразумевает, что объект должен иметь фиксированную высоту, которая определена в стилях CSS.
Поскольку высота фиксированная, вы можете установить overflow:auto; для div-а содержащего контент, таким образом, в случае если контент не будет влазить, то появятся скролл-бары.
<div>
Content Here
</div>
#content {
position : absolute;
top : 50%;
height : 240px;
margin-top : -120px; /* минус от половины высоты */
}
Плюсы
- Работает во всех броузерах.
- Нет лишней вложенности.
Минусы
- Когда не достаточно места, контент пропадает (например, div находится внутри body, а пользователь уменьшил окна, в этом случае скролл-бары не появятся.
3-ий метод
В этом методе, мы обернём div с контентом другим div-ом. Установим ему высоту в 50% (height: 50%;), а нижний отступ половине высоты (margin-bottom:-contentheight;). Контент будет очищать float и выводиться по центру.
<div>
<div>
здесь контент
</div>
</div>
#floater{ float : left; height : 50%; margin-bottom : -120px; } #content{ clear : both; height : 240px; position : relative; }
Плюсы
- Работает во всех броузерах.
- Когда недостаточно места (например, когда уменьшено окно) контент не обрезается, появятся скроллбары.
Минусы
- Думаю только один: что используется лишний пустой элемент.
4-ый метод.
Этот метод использует свойство position:absolute; для div-а с фиксированными размерами (шириной и высотой). Затем устанавливаем ему координаты top:0; bottom:0;, но поскольку у него фиксированная высота, то он не может растянуться и выравнивается по центру. Это очень похоже на общеизвестный метод горизонтального выравнивания по центру блочного элемента фиксированной ширины (margin: 0 auto;).
<div>
Важная информация.
</div>
#content{
position : absolute;
top : 0;
bottom : 0;
left : 0;
right : 0;
margin : auto;
height : 240px;
width : 70%;
}
Плюсы
Минусы
- Не работает в Internet Explorer
- Контент будет обрезаться без скролл-баров, если не хватает места в контейнере.
5-ый метод
С помощью этого метода можно выровнять по центру одну строку текста. Просто устанавливаем высоту текста (line-height) равной высоте элемента (height). После этого строка будет выведена по центру.
<div>
Какая-то строка текста
</div>
#content{
height : 100px;
line-height : 100px;
}
Плюсы
- Работает во всех броузерах.
- Не обрезает текст, если он не влез.
Минусы
- Работает только с текстом (не работает с блочными элементами).
- Если текста больше чем одна строка, то выглядит очень плохо.
Этот способ очень полезен для небольших элементов, например чтобы вырвнять по центру текст в кнопке или в текстовом поле.
Теперь вы знаете как добиться вертикального выравнивания по центру, давайте сделаем простой web-сайт, который, в конце-концов будет выглядеть так:
Шаг 1
Всегда хорошо начинать с семантической разметки. Наша страница будет структурирована следующим образом:
- #floater (чтобы выровнять контент по центру)
- #centred (центральный элемент)
- #side
- #logo
- #nav (список
<ul>
)
- #content
- #side
- #bottom (для копирайтов и всего такого)
Напишем следующую html-разметку:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>A Centred Company</title> <link rel="stylesheet" href="styles.css" type="text/css" media="all" /> </head> <body> <div></div> <div> <div> <div><strong><span>A</span> Company</strong></div> <ul> <li><a href="#">Home</a></li> <li><a href="#">Products</a></li> <li><a href="#">Blog</a></li> <li><a href="#">Contact</a></li> <li><a href="#">About</a></li> </ul> </div> <div> <h2>Page Title</h2> <p> Holisticly re-engineer value-added outsourcing after process-centric collaboration and idea-sharing. Energistically simplify impactful niche markets via enabled imperatives. Holisticly predominate premium innovation after compelling scenarios. Seamlessly recaptiualize high standards in human capital with leading-edge manufactured products. Distinctively syndicate standards compliant schemas before robust vortals. Uniquely recaptiualize leveraged web-readiness vis-a-vis out-of-the-box information. </p> <h3>Heading 2</h3> <p> Efficiently embrace customized web-readiness rather than customer directed processes. Assertively grow cross-platform imperatives vis-a-vis proactive technologies. Conveniently empower multidisciplinary meta-services without enterprise-wide interfaces. Conveniently streamline competitive strategic theme areas with focused e-markets. Phosfluorescently syndicate world-class communities vis-a-vis value-added markets. Appropriately reinvent holistic services before robust e-services. </p> </div> </div> <div> <p> Copyright notice goes here </p> </div> </body> </html>
Шаг 2
Сейчас мы напишем простейший CSS, для размещения элементов на странице. Вы должны сохранить этот код в файле style.css. Именно на него прописана ссылка в html-файле.
html, body { margin : 0; padding : 0; height : 100%; } body { background : url('page_bg.jpg') 50% 50% no-repeat #FC3; font-family : Georgia, Times, serifs; } #floater { position : relative; float : left; height : 50%; margin-bottom : -200px; width : 1px; } #centered { position : relative; clear : left; height : 400px; width : 80%; max-width : 800px; min-width : 400px; margin : 0 auto; background : #fff; border : 4px solid #666; } #bottom { position : absolute; bottom : 0; right : 0; } #nav { position : absolute; left : 0; top : 0; bottom : 0; right : 70%; padding : 20px; margin : 10px; } #content { position : absolute; left : 30%; right : 0; top : 0; bottom : 0; overflow : auto; height : 340px; padding : 20px; margin : 10px; }
Перед тем как сделать наш контент выровненным по центру, необходимо для body и html установить высоту 100%. Так как высота считается без внутренних и внешних отступов (padding и margin), то мы устанавливаем их (отступы) в 0, чтобы не было скроллбаров.
Нижний отступ для элемента «floater»-а равен минус половине высоты контента (400px), а именно -200px;
Сейчас ваша страничка должна выглядеть приблизительно так:
Ширина элемента #centered 80%. Это делает наш сайт уже на маленьких экранах и шире на больших. большинство сайтов выглядит неприлично на новых широких мониторах в верхнем левом углу. Свойства min-width и max-width также ограничивают нашу страничку, чтобы она не выглядела слишком широкой или слишком узкой. Internet Explorer не поддерживает эти свойства. Для него надо установить фиксированную ширину.
Поскольку элементу #centered установлено position:relative, мы можем использовать абсолютное позиционирование элементов внутри него. Затем установим overflow:auto; для элемента #content, чтобы появлялись скроллбары, в случае если не будет помещаться контент.
Шаг 3
И последнее что мы сделаем, это добавим кое-какие стили, чтобы страничка выглядела немного привлекательнее. Давайте начнём с меню.
#nav ul { list-style : none; padding : 0; margin : 20px 0 0 0; text-indent : 0; } #nav li { padding : 0; margin : 3px; } #nav li a { display : block; background-color : #e8e8e8; padding : 7px; margin : 0; text-decoration : none; color : #000; border-bottom : 1px solid #bbb; text-align : right; } #nav li a::after { content : '»'; color : #aaa; font-weight : bold; display : inline; float : right; margin : 0 2px 0 5px; } #nav li a:hover, #nav li a:focus { background : #f8f8f8; border-bottom-color : #777; } #nav li a:hover::after { margin : 0 0 0 7px; color : #f93; } #nav li a:active { padding : 8px 7px 6px 7px; }
Первое что мы сделали, чтобы меню выглядело лучше, удалили маркеры, установив атрибут list-style:none, а также установили внутренние и внешние отступы, так как по умолчанию в разных броузерах они сильно различаются.
Обратите внимание, что затем мы указали чтобы ссылки отбражадись как блочные элементы. Теперь, при выводе, они растягиваются по всей ширине элемента в котором они расположены.
Другая интересная вещь, которую мы использовали для меню — это псевдо-классы :before и :after. Они позволяют вам добавить что-нибудь перед и после элемента. Это хороший способ добавлять иконки или символы, такие как стрелочка в конце каждой ссылки. Такой трюк не работает в Internet Explorer 7 и ниже.
Шаг 4
Ну и самое последнее, мы добавим в наш дизайн кое-какие втили для ещё большей красоты.
#centered {
-webkit-border-radius : 8px;
-moz-border-radius : 8px;
border-radius : 8px;
}
h2, h3, h4, h5, h5, h6 {
font-family : Helvetica, Arial, sans-serif;
font-weight : normal;
color : #666;
}
h2 {
color : #f93;
border-bottom : 1px solid #ddd;
letter-spacing : -0.05em;
font-weight : bold;
margin-top : 0;
padding-top : 0;
}
#bottom {
padding : 10px;
font-size : 0.7em;
color : #f03;
}
#logo {
font-size : 2em;
text-align : center;
color : #999;
}
#logo strong {
font-weight : normal;
}
#logo span {
display : block;
font-size : 4em;
line-height : 0.7em;
color : #666;
}
p, h3, h4 {
line-height : 1.6em;
}
a {
color : #f03;
}
В этих стилях мы устанавливаем закруглённые углы для элемента #centered. В CSS3, за это будет отвечать свойство border-radius. Это пока что не реализовано некоторыми броузерами, разве только использовать приставки -moz и -webkit для Mozilla Firefox и Safari/Webkit.
Совместимость
Как вы уже наверное предположили, основной источник проблем совместимости — Internet Explorer:
- Элементу #floater обязательно надо установить ширину
- В IE 6 лишние отступы вокруг меню
Результат.
Vertical align CSS — выравнивание по вертикали в помощью CSS
Вертикальное выравнивание CSS — не самая простая задача. Осложняет дело и то, что с сегодняшними требованиями к адаптивному дизайну для разных устройств разработчикам приходится создавать элементы с «гибкой» высотой, и вычисление центра по вертикали становится довольно хитрой задачей.
В данной статье мы рассмотрим:
- свойство vertical-align, как и когда оно работает;
- метод центрирования по вертикали элемента с известной высотой;
- центрирование по вертикали элементов с изменяемой высотой.
Свойство vertical-align влияет только на элементы, у которых свойство display имеет значения inline, inline-block или table-cell. Оно принимает в качестве значений число, проценты или ключевое слово.
Длина и проценты выравнивают базовую линию элемента на соответствующем расстоянии от базовой линии родительского элемента.
Ключевые значения vertical-align могут быть следующими:
- baseline;
- sub;
- super;
- text-top;
- text-bottom;
- middle;
- top;
- bottom.
Большинство из них не требует дополнительного объяснения. Стоит отметить только sub и super, которые отображают элемент как подстрочный и надстрочный, не изменяя при этом размер шрифта.
Рассмотрим наглядный пример вертикального выравнивания текста CSS с помощью vertical-align. У нас есть сетка с изображениями и текстом — все они разной высоты, поэтому не везде текст выравнивается красиво:
<div> <img src="http://placebacn.com/200/400"> <h3>grilled bacon</h3> </div> <div> <img src="http://placebacn.com/200/300"> <h3>tasty bacon</h3> </div> <div> <img src="http://placebacn.com/200/200"> <h3>crispy bacon</h3> </div> <div> <img src="http://placebacn.com/200/350"> <h3>bacon</h3> </div>
Чтобы всё аккуратно выровнять, можно задать контейнерам сетки свойство display: inline-block и использовать для изображений свойство vertical-align: bottom. Если бы в нашем примере не было текста, можно было бы использовать vertical-align: middle и легко добиться нужного результата.
В примере, приведенном ниже, у нас есть div с чёрным фоном и рамкой. Внутри него находится блок поменьше с нужной нам шириной и высотой:
<div> <div> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis aperiam quidem minima a qui ipsa deleniti nisi modi nesciunt dolores, consequatur dolorem, dignissimos debitis distinctio. Voluptas eligendi fuga voluptatem eos. </div> </div>
Если мы знаем высоту блока, можно использовать абсолютное позиционирование, чтобы осуществить CSS вертикальное выравнивание по центру.
Применив к контейнеру свойство position: relative, можно задать абсолютное позиционирование внутреннему блоку. Если присвоить свойствам top и left значение 50%, блок сдвинется на 50% от верхнего и левого краёв. Верхний левый угол блока окажется точно в центре контейнера:
.container { position: relative; background: #444; } .box { position: absolute; top: 50%; left: 50%; width: 400px; height: 200px; margin: -100px 0 0 -200px; color: #fff; background: #cc3f85; }
Наш блок имеет заданные ширину и высоту, поэтому можно установить для него отрицательные отступы — на половину высоты вверх и половину ширины влево. Наш блок теперь размещён в центре контейнера.
Этот приём CSS вертикального выравнивания блока работает, но его недостаток заключается в неизменяемой ширине элементов. Поэтому он будет далеко не лучшим решением для работы над адаптивным дизайном.
Отличные результаты для центрирования по вертикали элементов с изменяемой высотой можно получить, объединив vertical-align: middle с псевдоэлементами. Возьмём тот же пример с блоком внутри контейнера, но в этот раз блок будет иметь изменяемую высоту.
Главный приём здесь — создать невидимый элемент (используя псевдоэлемент), который будет заполнять контейнер по высоте, и установить свойства display: inline-block и vertical-align:middle. После этого нужно выровнять внутренний блок, также установив ему свойства display: inline-block и vertical-align: center. Затем центрировать блок по горизонтали, используя text-align: center:
.container { height: 400px; margin: 20px; background: #444; font-size: 0; text-align: center; } .container:before { content: ''; display: inline-block; height: 100%; vertical-align: middle; } .box { display: inline-block; width: 50%; padding: 2em; border: 1px solid #000; background: #cc3f85; font-size: 1rem; vertical-align: middle; }
Теперь, когда изменяется ширина контейнера, также изменяется ширина дочернего блока в процентах, соответственно меняя его высоту. Но при этом к блоку применяется вертикальное выравнивание CSS div.
Пожалуйста, оставляйте ваши отзывы по текущей теме материала. Мы крайне благодарны вам за ваши комментарии, дизлайки, подписки, лайки, отклики!
Данная публикация является переводом статьи «Vertical-Alignment in CSS» , подготовленная редакцией проекта.
Выравнивание по вертикали CSS
Вертикальное выравнивание CSS — весьма непростая работа. Я видел достаточно людей, борющихся с этим, и постоянно обнаруживаю “критические” ошибки, когда дело доходит до реального адаптивного дизайна.
Но не бойтесь: если вы уже боретесь с CSS вертикальным выравниванием — вы обратились по адресу.
Когда я только начинал работать в области веб-разработки, то немного помучился с этим свойством. Я думал, что оно должно работать, как классическое свойство “text-align”. Ах, если бы все было так просто…
CSS свойство vertical-align отлично работает с таблицами, но не с div или другими элементами. Когда вы используете его для div, то оно выравнивает элемент относительно других блоков, но не его содержимое. При этом свойство работает только с display: inline-block;.
У вас есть два выхода. Если у вас только элементы div с текстом, то можно использовать свойство line-height. Это означает, что нужно знать высоту элемента, но нельзя ее устанавливать. Таким образом, ваш текст будет всегда в центре.
Правда у этого подхода CSS выравнивания по вертикали есть недостаток. Если текст многострочный, тогда высота строки будет умножена на количество строк. Скорее всего, в этом случае, у вас получится ужасно сверстанная страница.
Взгляните на приведенный ниже пример.
Если контент, который вы хотите центрировать, состоит больше, чем из одной строки, тогда лучше использовать табличные div. Также можно использовать таблицы, но семантически это не правильно. Если вам нужны разрывы для адаптивных целей, лучше использовать элементы div.
Чтобы это работало, должен быть родительский контейнер с display: table, а внутри него – нужное количество столбцов, которое вы хотите центрировать с помощью display: table-cell и vertical-align: middle.
Почему это работает с табличной разметкой, но не с элементами div? Потому что у строк в таблице одинаковая высота. Когда содержимое ячейки таблицы не использует все доступное пространство по высоте, браузер автоматически добавляет вертикальные отступы, чтобы центрировать содержимое.
Начнем с основ выравнивания по вертикали CSS div:
- position: static — это значение по умолчанию. Элемент отображается в соответствии с порядком HTML;
- position: absolute — используется, чтобы определить точное положение элемента. Эта позиция всегда связана с ближайшим относительно позиционированным родительским элементом (не static). Если не определить точное положение элемента, вы потеряете контроль над ним. Он отобразится случайно, полностью игнорируя поток документа. По умолчанию элемент отображается в левом верхнем углу;
- position: relative — используется для позиционирования элемента относительно его нормального положения (статического). Это значение сохраняет порядок потока документа;
- position: fixed — используется для позиционирования элемента относительно окна браузера, поэтому он всегда отображается в области просмотра.
Примечание: некоторые свойства (top и z-index) работают только в том случае, если для элемента задано значение position (не static).
Вы хотите осуществить CSS выравнивание по центру по вертикали? Сначала создайте элемент с относительной позицией и размерами. Например: 100% по ширине и высоте.
Второй шаг может быть различным в зависимости от целевых браузеров, но можно использовать один из двух вариантов:
Старое свойство: нужно знать точный размер окна, чтобы удалить половину ширины и половину высоты. Посмотрите приведенный ниже пример.
Новое свойство CSS3: можно добавить свойство transform со значением translate 50% и блок всегда будет в центре. Посмотрите приведенный ниже пример.
В принципе, если вы хотите центрировать контент, никогда не используйте top: 40% или left: 300px. Это прекрасно работает на тестовых экранах, но это не центровка.
Помните position: fixed? Можно сделать с ним то же самое, что и с абсолютной позицией, но вам не нужна относительная позиция для родительского элемента — она всегда будет позиционировать относительно окна браузера.
Можно использовать flexbox. Это гораздо лучше, чем любой другой вариант выравнивания текста по центру CSS по вертикали. С flexbox управление элементами напоминает детскую игру. Проблема состоит в том, что нужно отбросить некоторые браузеры, такие как IE9 и версии ниже. Вот пример того, как вертикально центрировать блок:
Используя flexbox расположение, можно центрировать несколько блоков.
Если вы примените то, что узнали из этих примеров, то сможете освоить CSS выравнивание блока по вертикали в кратчайшие сроки.
Пожалуйста, оставьте свои отзывы по текущей теме материала. За комментарии, отклики, лайки, дизлайки, подписки низкий вам поклон!
Данная публикация является переводом статьи «CSS Vertical Align for Everyone (Dummies Included)» , подготовленная редакцией проекта.
Как вертикальное выравнивание элементов в div?
По умолчанию h2 является элементом блока и будет отображаться в строке после первого img, а второй img появится в строке, следующей за блоком.
Чтобы это не происходило, вы можете установить h2 для поведения встроенного потока:
#header > h2 { display: inline; }
Что касается абсолютного позиционирования img внутри div , вам нужно установить содержащий div для «известного размера», прежде чем это будет работать должным образом. По моему опыту, вам также нужно изменить атрибут позиции с значения по умолчанию — положение: относительный работает для меня:
#header { position: relative; width: 20em; height: 20em; }
#img-for-abs-positioning { position: absolute; top: 0; left: 0; }
Если вы можете заставить это работать, вы можете попытаться постепенно удалять атрибуты height, width, position из div.header, чтобы получить минимальные обязательные атрибуты для получения желаемого эффекта.
ОБНОВИТЬ:
Вот полный пример, который работает на Firefox 3:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Example of vertical positioning inside a div</title>
<style type="text/css">
#header > h2 { display: inline; }
#header { border: solid 1px red;
position: relative; }
#img-for-abs-positioning { position: absolute;
bottom: -1em; right: 2em; }
</style>
</head>
<body>
<div>
<img src="#" alt="Image 1" />
<h2>Header</h2>
<img src="#" alt="Image 2"
/>
</div>
</body>
</html>
alignment — Русский — it-swarm.com.ru
alignment — Русский — it-swarm.com.ruit-swarm.com.ru
Лучший способ центрировать <div> на странице по вертикали и горизонтали?
Цель выравнивания памяти
Как вертикально центрировать div для всех браузеров?
Как выровнять текст в столбцах, используя Console.WriteLine?
Выравнивание по левому, центральному и правому краям в нижней части той же строки
Выровнять по вертикали, используя CSS 3
Центрируйте тег h2 внутри DIV
Сложив Divs снизу вверх
Вертикальное выравнивание текста в ячейке таблицы
Как я могу отцентрировать текст по левому краю, даже если он обернут?
Как расположить элементы навигации по вертикали (Twitter Bootstrap)?
пытаясь выровнять кнопку HTML в центре моей страницы
Вертикальный текст выравнивания в внутреннем блоке div
Как вертикальное выравнивание элементов в div?
Как горизонтально центрировать <div>?
HorizontalAlignment = Stretch, MaxWidth и Left выровнены одновременно?
CSS способ горизонтально выровнять таблицу
Как совместить флажки и их метки последовательно в кросс-браузерах
Установить cellpadding и cellspacing в CSS?
Две HTML-таблицы рядом, по центру страницы
Как заставить элементы WPF ListView повторяться по горизонтали, как горизонтальная полоса прокрутки?
Как выровнять изображение и текст по вертикали TD элемент?
Вертикально выровнять текст рядом с изображением?
Как выровнять содержимое div снизу?
Каков наилучший способ выравнивания по левому краю и выравнивания по правому краю двух тегов div?
Как выровнять число как это в C?
Убедительные примеры пользовательских C ++-распределителей?
Выравниваются ли переменные стека с помощью GCC __attribute __ ((align (x)))?
Почему выравнивание по вертикали: text-top; не работает в CSS
Как выровнять <div> по центру (по горизонтали/ширине) страницы
Выровнять текст по вертикали внутри UILabel
Есть ли «правильный» способ заставить NSTextFieldCell рисовать вертикально центрированный текст?
Вертикальная (повернутая) метка в Android
CSS: центральный блок, но выравнивание содержимого по левому краю
Как центрировать содержимое ячеек таблицы LaTeX, столбцы которой имеют фиксированную ширину?
Вертикальное выравнивание текста в WPF TextBlock
Вертикально выровнять div (без таблиц)
Центрирование текста в многорядной ячейке в LaTex
Выровнять элементы на панели стека?
Что такое комбинация клавиш автоматического выравнивания в Eclipse?
Выровнять значения ячеек в JTable?
Android: вертикальное выравнивание для многострочного EditText (область текста)
C ++ выравнивание при печати cout <<
android: как выровнять изображение в горизонтальном центре изображения?
Как обозначить каждое уравнение в среде выравнивания?
номер несколько уравнений только с одним номером
Как выровнять 3 деления (слева / по центру / справа) внутри другого деления?
Как я могу выровнять все элементы по левому краю в JPanel?
Как вертикально центрировать div?
Добавить центрированный текст к середине <hr /> -подобной строки
выравнивание по центру фиксированной позиции div
Перекрестное выравнивание по центру браузера с использованием CSS
Как выровнять текст по вертикали в div?
Вертикальное центрирование титульной страницы
Центр текста в тосте в Android
Как выровнять нижний колонтитул (div) по нижней части страницы?
Как центрировать значок и текст в кнопке Android с шириной, установленной на «заполнить родительский элемент»
CSS — вертикально центрировать изображение внутри плавающего элемента
Вертикальное выравнивание содержимого строки DataGrid
Как выровнять по вертикали 2 разных размера текста?
Вертикальное выравнивание ячейки таблицы не работает
iTextsharp, PdfPCell.VerticalAlignment и PdfPCell.Hor HorizontalAlignment
центральные кнопки отправки формы html / css
Вертикальное направление текста
Как выровнять формы ввода в HTML
CSS: Как выровнять по вертикали «label» и «input» внутри «div»?
Вертикальное выравнивание пары флажок/метка
Как центрировать двухстрочный текст в TextView на Android?
Как выровнять указатель в C
Android: Как вы можете выровнять кнопку внизу и список сверху?
Совместите элементы <div> рядом
2 деления выровнены бок о бок, как сделать ширину правого делителя равной 100%?
Как установить поле или отступ в процентах от высоты родительского контейнера?
Выровняли управление памятью?
выровнять изображение с помощью CSS HTML
Многостолбцовый макет элементов списка CSS неправильно выравнивается в Chrome
Центрирующие пули в центрированном списке
Выравнивание памяти в C-структурах
Как мне вертикально отцентрировать текст UITextField?
Я хочу выровнять текст по вертикали в поле выбора
iText: вертикальное выравнивание ячейки PdfTable
Добавить левое поле в UITextField
Как сделать сетку из композитного компонента JSF?
UILabel выровнять текст по центру
Выровнять кнопку внизу элемента div с помощью CSS
Как выровнять вертикальный блок в строке текста?
Как выровнять плавающие div по вертикали?
выравнивание текста не работает
Как «выровнять» текст в RichTextBox C #?
Выровнять ссылку справа
Выравнивание изображения HTML снизу внутри контейнера DIV
Android View выровнять снизу (программно) без XML
Может ли переполнение текста быть в центре?
CSS центральный элемент с позицией: относительный;
Выровнять текст по вертикали внутри элемента div
Как расположить текст по центру надписи в заголовке Excel по вертикали?
Выравнивание ячеек Excel: числовые значения, например, для xlLeft, xlRight или xlCenter?
как правильно выровнять виджет в горизонтальном линейном макете Android?
Как сделать выравнивание на консоли в php
Как выровнять div внутри элемента td с помощью класса CSS
Content dated before 2011-04-08 (UTC) is licensed under CC BY-SA 2.5. Content dated from 2011-04-08 up to but not including 2018-05-02 (UTC) is licensed under CC BY-SA 3.0. Content dated on or after 2018-05-02 (UTC) is licensed under CC BY-SA 4.0. | Privacyvertical-alignment — html — выравнивание текста по вертикали css
css vertical-align middle / html / css
Я пытаюсь найти наиболее эффективный способ выравнивания текста с помощью div.Я попробовал несколько способов,но ни один из них не сработал.
.testimonialText {
position: absolute;
left: 15px;
top: 15px;
width: 150px;
height: 309px;
vertical-align: middle;
text-align: center;
font-family: Georgia, "Times New Roman", Times, serif;
font-style: italic;
padding: 1em 0 1em 0;
}
<div>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
m4n0
Answer #1
<div>
<div>
<a href="https://www.github.com/">GitHub</a>
<a href="https://www.facebook.com/">Facebook</a>
<p>© 2019 Lorem Ipsum.</p>
</div>
</div>
CSS-Code:
Код ниже складывает все элементы внутри родительского div в столбец, центрируя элементы по горизонтали и вертикали. Я использовал дочерний div, чтобы удерживать два элемента Anchor в одной строке (строке). Без дочернего div все три элемента (привязка, привязка и абзац) располагаются внутри столбца родительского div друг над другом. Здесь только дочерний div укладывается внутри столбца parent-div.
.parent-div {
height: 150px;
display: flex;
flex-direction: column;
justify-content: center;
}
Css выравнивание по центру по горизонтали
В CSS есть всего несколько техник центрирования элементов. Если их знать, то большинство задач решаются просто.
Горизонтальное
text-align
Для центрирования инлайновых элементов – достаточно поставить родителю text-align: center :
Для центрирования блока это уже не подойдёт, свойство просто не подействует. Например:
margin: auto
Блок по горизонтали центрируется margin: auto :
В отличие от width/height , значение auto для margin само не появляется. Обычно margin равно конкретной величине для элемента, например 0 для DIV . Нужно поставить его явно.
Значение margin-left:auto/margin-right:auto заставляет браузер выделять под margin всё доступное сбоку пространство. А если и то и другое auto , то слева и справа будет одинаковый отступ, таким образом элемент окажется в середине. Детали вычислений описаны в разделе спецификации Calculating widths and margins.
Вертикальное
Для горизонтального центрирования всё просто. Вертикальное же изначально не было предусмотрено в спецификации CSS и по сей день вызывает ряд проблем.
Есть три основных решения.
position:absolute + margin
Центрируемый элемент позиционируем абсолютно и опускаем до середины по вертикали при помощи top:50% :
Это, конечно, не совсем центр. По центру находится верхняя граница. Нужно ещё приподнять элемент на половину своей высоты.
Высота центрируемого элемента должна быть известна. Родитель может иметь любую высоту.
Если мы знаем, что это ровно одна строка, то её высота равна line-height .
Приподнимем элемент на пол-высоты при помощи margin-top :
При стандартных настройках браузера высота строки line-height: 1.25 , если поделить на два 1.25em / 2 = 0.625em .
Конечно, высота может быть и другой, главное чтобы мы её знали заранее.
Можно аналогично центрировать и по горизонтали, если известен горизонтальный размер, при помощи left:50% и отрицательного margin-left .
Одна строка: line-height
Вертикально отцентрировать одну строку в элементе с известной высотой height можно, указав эту высоту в свойстве line-height :
Это работает, но лишь до тех пор, пока строка одна, а если содержимое вдруг переносится на другую строку, то начинает выглядеть довольно уродливо.
Таблица с vertical-align
У свойства vertical-align, которое управляет вертикальным расположением элемента, есть два режима работы.
В таблицах свойство vertical-align указывает расположение содержимого ячейки.
Его возможные значения:
baseline Значение по умолчанию. middle , top , bottom Располагать содержимое посередине, вверху, внизу ячейки.
Например, ниже есть таблица со всеми 3-мя значениями:
Обратим внимание, что в ячейке с vertical-align: middle содержимое находится по центру. Таким образом, можно обернуть нужный элемент в таблицу размера width:100%;height:100% с одной ячейкой, у которой указать vertical-align:middle , и он будет отцентрирован.
Но мы рассмотрим более красивый способ, который поддерживается во всех современных браузерах, и в IE8+. В них не обязательно делать таблицу, так как доступно значение display:table-cell . Для элемента с таким display используются те же алгоритмы вычисления ширины и центрирования, что и в TD . И, в том числе, работает vertical-align :
Этот способ замечателен тем, что он не требует знания высоты элементов.
Однако у него есть особенность. Вместе с vertical-align родительский блок получает табличный алгоритм вычисления ширины и начинает подстраиваться под содержимое. Это не всегда желательно.
Чтобы его растянуть, нужно указать width явно, например: 300px :
Можно и в процентах, но в примере выше они не сработают, потому что структура таблицы «сломана» – ячейка есть, а собственно таблицы-то нет.
Это можно починить, завернув «псевдоячейку» в элемент с display:table , которому и поставим ширину:
Если дополнительно нужно горизонтальное центрирование – оно обеспечивается другими средствами, например margin: 0 auto для блочных элементов или text-align:center на родителе – для других.
Центрирование в строке с vertical-align
Для инлайновых элементов ( display:inline/inline-block ), включая картинки, свойство vertical-align центрирует сам инлайн-элемент в окружающем его тексте.
В этом случае набор значений несколько другой:
Это можно использовать и для центрирования, если высота родителя известна, а центрируемого элемента – нет.
Допустим, высота внешнего элемента 120px . Укажем её в свойстве line-height :
Работает во всех браузерах и IE8+.
Свойство line-height наследуется, поэтому надо знать «правильную» высоту строки и переопределять её для inner .
Центрирование с vertical-align без таблиц
Если центрирование должно работать для любой высоты родителя и центрируемого элемента, то обычно используют таблицы или display:table-cell с vertical-align .
Если центрируются не-блочные элементы, например inline или inline-block , то vertical-align может решить задачу без всяких таблиц. Правда, понадобится вспомогательный элемент (можно через :before ).
- Перед центрируемым элементом помещается вспомогательный инлайн-блок before , занимающий всю возможную высоту.
- Центрируемый блок выровнен по его середине.
Для всех современных браузеров и IE8 можно добавить вспомогательный элемент через :before :
В пример выше добавлено также горизонтальное центрирование text-align: center . Но вы можете видеть, что на самом деле внутренний элемент не центрирован горизонтально, он немного сдвинут вправо.
Это происходит потому, что центрируется весь текст, а перед inner находится пробел, который занимает место.
- Убрать лишний пробел между div и началом inner , будет
Центрирование с использованием модели flexbox
Данный метод поддерживается всеми современными браузерами.
- Не требуется знания высоты центрируемого элемента.
- CSS чистый, короткий и не требует дополнительных элементов.
- Не поддерживается IE9-, IE10 поддерживает предыдущую версию flexbox.
Итого
Обобщим решения, которые обсуждались в этой статье.
Для горизонтального центрирования:
- text-align: center – центрирует инлайн-элементы в блоке.
- margin: 0 auto – центрирует блок внутри родителя. У блока должна быть указана ширина.
Для вертикального центрирования одного блока внутри другого:
Если размер центрируемого элемента известен, а родителя – нет
Родителю position:relative , потомку position:absolute; top:50% и margin-top:- . Аналогично можно отцентрировать и по горизонтали.
Если нужно отцентрировать одну строку в блоке, высота которого известна
Поставить блоку line-height: . Нужны конкретные единицы высоты ( px , em …). Значение line-height:100% не будет работать, т.к. проценты берутся не от высоты блока, а от текущей line-height .
Высота родителя известна, а центрируемого элемента – нет.
Поставить line-height родителю во всю его высоту, а потомку поставить display:inline-block .
Высота обоих элементов неизвестна.
- Сделать элемент-родитель ячейкой таблицы при помощи display:table-cell (IE8) или реальной таблицы, и поставить ему vertical-align:middle . Отлично работает, но мы имеем дело с таблицей вместо обычного блока.
- Решение со вспомогательным элементом outer:before и инлайн-блоками. Вполне универсально и не создаёт таблицу.
- Решение с использованием flexbox.
Сегодняшняя статья направлена на то, чтобы показать, как при помощи нескольких CSS-трюков выровнять div по центру, как по горизонтали, так и по вертикали. Также мы расскажем, как произвести центрирование по всей странице либо в отдельно взятом div-элементе .
Простое центрирование DIV-элемента на странице
Этот метод будет отлично работать во всех браузерах.
Значение auto в свойстве margin устанавливает левый и правый отступ на все пространство, доступное на странице. Здесь важно запомнить, что у центрируемого div-элемента обязательно должно быть установлено значение width .
Центрируем DIV внутри DIV-элемента старым способом
Этот метод div выравнивания по центру будет работать во всех браузерах.
Внешний div может быть помещен как угодно, но у внутреннего блока div обязательно должна быть указана ширина ( width ).
Центрируем DIV внутри DIV-элемента с помощью inline-block
В этом методе центрирования div внутри div необязательно указывать ширину внутреннего элемента. Он будет работать во всех современных браузерах, включая IE8 .
Свойство text-align работает только в inline-элементах . Значение inline-block позволяет отобразить внутренний div в качестве inline-элемента , а также в качестве блока ( inline-block ). Свойство text-align во внешнем div-элементе позволит нам центрировать внутренний div .
Центрируем DIV внутри DIV-элемента горизонтально и вертикально
Здесь для центрирования div по центру страницы используется margin: auto . Пример будет работать во всех современных браузерах.
У внутреннего div-элемента должна быть указана ширина ( width ) и высота ( height ). Метод не сработает, если у внешнего div-элемента будет фиксированная высота.
Центрируем DIV по нижней границе страницы
Здесь для расположения div по центру по вертикали используется margin: auto и абсолютное позиционирование для внешнего элемента. Метод будет работать во всех современных браузерах.
У внутреннего div должна быть установлена ширина. Пространство внизу страницы регулируется с помощью свойства bottom внешнего div . Вы также можете центрировать div по верхней границе страницы, заменив свойство bottom на свойство top .
Центрируем DIV на странице вертикально и горизонтально
Здесь, чтобы выровнять div по центру, снова используется margin: auto и абсолютное позиционирование внешнего div . Метод будет работать во всех современных браузерах.
У div-элемента должна быть установлена ширина ( width ) и высота ( height ).
Делаем адаптивное центрирование DIV-элемента на странице
Здесь для выравнивания div по центру средствами CSS мы делаем ширину div-элемента адаптивной, чтобы она реагировала на изменения размеров окна. Этот метод работает во всех браузерах.
У центрированного div-элемента должно быть установлено свойство max-width .
Центрируем DIV внутри элемента с помощью свойств внутреннего блока
Внутренний div-элемент здесь адаптивен. Этот метод расположения div внутри div по центру будет работать во всех браузерах.
У внутреннего div должно быть установлено свойство max-width .
Центрируем два адаптивных div-элемента рядом друг с другом
Здесь у нас два расположенных рядом адаптивных div-элемента. Этот метод установки div по центру экрана будет работать во всех современных браузерах.
Здесь у нас несколько элементов с примененным свойством inline-block , расположенных внутри центрированного контейнера. В этом примере также используются медиа-запросы CSS ; то есть, если размер экрана меньше 600 пикселей, то свойство max-width как для левого, так и для правого div-элемента устанавливается на 100%.
DIV-элемент, центрированный при помощи Flexbox
Здесь мы располагаем CSS div по центру с помощью Flexbox . Он предназначен для того, чтобы облегчить процесс разработки дизайна пользовательских интерфейсов. Этот модуль поддерживается Chrome 38+ , IE11 , Microsoft Edge , Firefox 38+ , Safari 9+ , Opera 30+ , iOS Safari 9+ , а также Android Browser 40+ .
Значение свойства height может быть любым, но только больше размера центрированного div-элемента.
Данная публикация представляет собой перевод статьи « THE COMPLETE GUIDE TO CENTERING A DIV » , подготовленной дружной командой проекта Интернет-технологии.ру
Смотрите также указатель всех приёмов работы.
Центрирование
В последних реализациях 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
Рекомендуем к прочтению
html — Как вертикально выровнять по центру содержимого div с определенной шириной / высотой?
Я немного исследовал это и из того, что я обнаружил, у вас есть четыре варианта:
Версия 1: Родительский div с отображением в виде ячейки таблицы
Если вы не против использования display: table-cell
в родительском div, вы можете использовать следующие параметры:
.area {
высота: 100 пикселей;
ширина: 100 пикселей;
фон: красный;
маржа: 10 пикселей;
выравнивание текста: центр;
дисплей: таблица-ячейка;
вертикальное выравнивание: по центру;
}
Live DEMO
Версия 2: Родительский div с блоком отображения и ячейкой таблицы отображения содержимого
.площадь{
высота: 100 пикселей;
ширина: 100 пикселей;
фон: красный;
маржа: 10 пикселей;
выравнивание текста: центр;
дисплей: блок;
}
.содержание {
высота: 100 пикселей;
ширина: 100 пикселей;
дисплей: таблица-ячейка;
вертикальное выравнивание: по центру;
}
Live DEMO
Версия 3: родительский div с плавающей точкой и контентный div в виде ячейки таблицы отображения
.area {
фон: красный;
маржа: 10 пикселей;
выравнивание текста: центр;
дисплей: блок;
плыть налево;
}
.содержание {
дисплей: таблица-ячейка;
вертикальное выравнивание: по центру;
высота: 100 пикселей;
ширина: 100 пикселей;
}
Live DEMO
Версия 4: Относительное положение родительского блока с абсолютным положением содержимого
Единственная проблема, с которой я столкнулся с этой версией, заключается в том, что кажется, что вам придется создавать CSS для каждой конкретной реализации.Причина этого в том, что div содержимого должен иметь заданную высоту, которую будет заполнять ваш текст, и верхний край поля будет рассчитан из этого. Эту проблему можно увидеть в демонстрации. Вы можете заставить его работать для каждого сценария вручную, изменив% высоты вашего содержимого div и умножив его на -5, чтобы получить значение верхнего предела маржи.
.area {
положение: относительное;
дисплей: блок;
высота: 100 пикселей;
ширина: 100 пикселей;
граница: сплошной черный 1px;
фон: красный;
маржа: 10 пикселей;
}
.содержание {
позиция: абсолютная;
верх: 50%;
высота: 50%;
ширина: 100 пикселей;
верхняя маржа: -25%;
выравнивание текста: центр;
}
Live DEMO
vertical-align — CSS: каскадные таблицы стилей
Свойство CSS vertical-align
устанавливает вертикальное выравнивание встроенного блока, блока встроенного блока или ячейки таблицы.
Свойство vertical-align можно использовать в двух контекстах:
Обратите внимание, что vertical-align
применяется только к элементам inline, inline-block и table-cell: вы не можете использовать его для вертикального выравнивания элементов уровня блока.
вертикальное выравнивание: базовая линия;
вертикальное выравнивание: суб;
вертикальное выравнивание: супер;
вертикальное выравнивание: верхний текст;
вертикальное выравнивание: нижний текст;
вертикальное выравнивание: по центру;
вертикальное выравнивание: сверху;
вертикальное выравнивание: снизу;
вертикальное выравнивание: 10em;
вертикальное выравнивание: 4 пикселя;
вертикальное выравнивание: 20%;
вертикальное выравнивание: наследование;
вертикальное выравнивание: начальное;
вертикальное выравнивание: вернуть;
вертикальное выравнивание: отключено;
Свойство vertical-align
указано как одно из значений, перечисленных ниже.
Значения для встроенных элементов
Родительские значения
Эти значения выравнивают элемент по вертикали относительно его родительского элемента:
-
базовый
- Выравнивает базовую линию элемента с базовой линией его родительского элемента.Базовая линия некоторых заменяемых элементов, таких как
, не указана в спецификации HTML, а это означает, что их поведение с этим ключевым словом может различаться в разных браузерах.
-
переходник
- Выравнивает базовую линию элемента с базовой линией нижнего индекса его родительского элемента.
-
супер
- Выравнивает базовую линию элемента с верхним индексом его родительского элемента.
-
текст вверху
- Выравнивает верх элемента по верхнему краю шрифта родительского элемента.
-
текст внизу
- Выравнивает нижнюю часть элемента по нижней части шрифта родительского элемента.
-
средний
- Выравнивает середину элемента по базовой линии плюс половину высоты родительского элемента по оси x.
-
<длина>
- Выравнивает базовую линию элемента по заданной длине над базовой линией его родительского элемента. Допускается отрицательное значение.
-
<процент>
- Выравнивает базовую линию элемента по заданному проценту над базовой линией его родительского элемента, при этом значение представляет собой процентное значение свойства
line-height
.Допускается отрицательное значение.
Относительные значения линии
Следующие значения выравнивают элемент по вертикали относительно всей линии:
-
верх
- Выравнивает верх элемента и его потомков с верхом всей строки.
-
нижняя
- Выравнивает нижнюю часть элемента и его потомков по нижней части всей строки.
Для элементов, не имеющих базовой линии, вместо этого используется край нижнего поля.
Значения для ячеек таблицы
-
baseline
(иsub
,super
,text-top
,text-bottom
, - Выравнивает базовую линию ячейки с базовой линией всех других ячеек в строке, которые выровнены по базовой линии.
-
верхняя
- Выравнивает верхний край заполнения ячейки с верхней частью строки.
-
средний
- Центрирует поле заполнения ячейки в строке.
-
нижняя
- Выравнивает нижний край заполнения ячейки с нижней частью строки.
Допускаются отрицательные значения.
Базовый пример
HTML
Изображение с выравниванием по умолчанию.
Изображение с выравниванием по верхнему краю текста
Изображение с выравниванием текста по нижнему краю.
Изображение с выравниванием по центру.
CSS
img.top {vertical-align: text-top; }
img.bottom {вертикальное выравнивание: нижний текст; }
img.middle {вертикальное выравнивание: середина; }
Результат
Вертикальное выравнивание в рамке
HTML
вверху:
в центре:
внизу:
super:
sub:
верхний текст:
нижний текст:
0.2em:
-1em:
20%:
-100%:
# * {
размер коробки: рамка-рамка;
}
img {
поле справа: 0,5em;
}
п {
высота: 3em;
отступ: 0.5em;
семейство шрифтов: моноширинный;
оформление текста: подчеркивание над чертой;
маржа слева: авто;
маржа-право: авто;
ширина: 80%;
}
Результат
Выравнивание по вертикали в ячейке таблицы
HTML
<таблица>
базовый уровень
вверх
средний
снизу
Существует теория, согласно которой, если кто-нибудь когда-нибудь обнаружит,
для чего существует Вселенная и почему она здесь, она мгновенно исчезнет и
быть заменено чем-то еще более причудливым и необъяснимым.
Есть еще одна теория, согласно которой это уже произошло.
CSS
стол {
маржа слева: авто;
маржа-право: авто;
ширина: 80%;
}
table, th, td {
граница: сплошной черный 1px;
}
td {
заполнение: 0.5em;
семейство шрифтов: моноширинный;
}
Результат
Таблицы BCD загружаются только в браузер
Как вертикально выровнять элементы в Div
Иногда центрирование элементов по вертикали с помощью CSS может вызвать некоторые проблемы.Однако есть несколько способов центрировать элементы в
Здесь мы обсудим некоторые возможные способы, которые легко реализовать, если вы выполните шаги, описанные ниже.
Создать HTML¶
- Создайте два блока со следующим идентификатором: «синий» и «зеленый».
Название документа
Вертикально выровненный элемент
Попробуйте сами » Добавьте CSS¶
Для блочных элементов вертикальное выравнивание элементов затруднено и зависит от ситуации.Если дочерний элемент может иметь фиксированную высоту, вы можете добавить position: absolute и указать его верх, высоту, верхнюю границу, положение.
- Используйте свойство position с «относительным» значением для родительского элемента, чтобы разместить его относительно его нормального положения.
- Используйте свойство position с «абсолютным» значением для дочернего элемента, чтобы разместить его относительно позиционированного родительского элемента.
- Добавьте свойства высоты, верхнего края, верха, границы и ширины.
#blue {
положение: относительное;
}
#зеленый {
позиция: абсолютная;
верх: 50%;
высота: 100 пикселей;
маржа сверху: -50 пикселей;
}
#синий {
граница: 2px solid # 1C87C9;
высота: 10em;
}
#зеленый {
граница: 1px solid # 8EBF42;
ширина: 100%;
}
Вот результат нашего кода.
Пример выравнивания элемента по вертикали в div с помощью свойства position: ¶
Название документа
<стиль>
#синий {
положение: относительное;
}
#зеленый {
позиция: абсолютная;
верх: 50%;
высота: 100 пикселей;
маржа сверху: -50 пикселей;
}
#синий {
граница: 2px solid # 1C87C9;
высота: 10em;
}
#зеленый {
граница: 1px solid # 8EBF42;
ширина: 100%;
}
Вертикально выровненный элемент
Попробуйте сами » Результат¶
Другой способ — использовать свойство line-height со значением, равным свойству height.Этот метод используется, когда центрированный элемент состоит из одной строки, а высота его родительского элемента является фиксированной.
Пример выравнивания элемента по вертикали в div с помощью свойства line-height: ¶
Название документа
<стиль>
п {
маржа: 0;
}
#outer {
граница: 2px solid # 5c34eb;
высота: 100 пикселей;
высота строки: 100 пикселей;
}
Вертикально выровненный элемент
Lorem Ipsum
Попробуйте сами »Давайте посмотрим, как мы можем выровнять элемент в div с помощью свойства padding.Чтобы этот метод работал, нам нужно установить верхнее и нижнее отступы для внешнего элемента.
Пример выравнивания элемента по вертикали в div с помощью свойства заполнения CSS: ¶
Название документа
<стиль>
.center {
отступ: 60 пикселей 0;
граница: 2px solid # 5c34eb;
}
Вертикально выровненный элемент
Lorem Ipsum.
Попробуйте сами »Есть еще один метод выравнивания элементов по вертикали. Вы можете использовать свойство vertical-align, которое обычно применяется к элементам inline, inline-block и table-cell. Но его нельзя использовать для выравнивания элементов блочного уровня по вертикали. Раньше он использовался с атрибутом valign, но теперь этот атрибут устарел. Вместо этого вы можете использовать vertical-align: middle.
Вертикальное центрирование — Решено с помощью Flexbox — Чистый, свободный от взлома CSS
Отсутствие хороших способов вертикального центрирования элементов в CSS было темным пятном на его репутации на протяжении почти всего его существования.
Что еще хуже, так это методы, которые работают для вертикального центрирования, неясны и не интуитивно понятны, в то время как очевидные варианты (например, vertical-align: middle
) никогда не работают, когда они вам нужны.
Текущий ландшафт вариантов вертикального центрирования варьируется от отрицательных полей до display: table-cell
до нелепых хаков с использованием псевдоэлементов полной высоты. Тем не менее, несмотря на то, что эти методы иногда помогают, они работают не во всех ситуациях.Что, если объект, который вы хотите центрировать, имеет неизвестные размеры и не является единственным дочерним элементом своего родителя? Что, если бы вы могли использовать взлом псевдоэлементов, но вам нужны эти псевдоэлементы для чего-то еще?
С Flexbox вы можете не беспокоиться. Вы можете безболезненно выровнять что угодно (по вертикали или горизонтали) с помощью свойств align-items
, align-self
и justify-content
.
Я в центре!
Это поле центрировано как по вертикали, так и по горизонтали.Даже если текст в этом поле изменится, чтобы сделать его шире или выше, поле все равно будет отцентрировано. Продолжай, попытайся. Просто щелкните, чтобы отредактировать текст.
В отличие от некоторых существующих методов вертикального выравнивания, в Flexbox наличие родственных элементов не влияет на их способность выравниваться по вертикали.
HTML
…
…
…
УСС
.Aligner {
дисплей: гибкий;
align-items: center;
justify-content: center;
}
.Aligner-item {
максимальная ширина: 50%;
}
.Aligner-item - top {
выровнять себя: гибкий старт;
}
.Aligner-item - bottom {
align-self: гибкий конец;
}
Посмотреть полный исходный код компонента Aligner
, используемого в этой демонстрации, на Github.
Как вертикально выровнять изображение внутри DIV с помощью CSS
Тема: HTML / CSSPrev | След.
Ответ: используйте CSS
vertical-align
Property
Вы можете выровнять изображение по вертикали по центру внутри Кроме того, поскольку CSS Вы также можете использовать метод позиционирования CSS для вертикального выравнивания изображения внутри DIV. Давайте посмотрим на пример, чтобы понять, как это в основном работает: Вот еще несколько часто задаваемых вопросов по этой теме: Каждый разработчик должен был сталкиваться с этой задачей центрирования div в своей жизни хотя бы один раз или каждый божий день.У всех есть своя удобная техника, но для новичков она временами может расстраивать. Я хотел, чтобы эта техника была лучшей, так как она моя самая любимая. В этом трюке все свойства CSS определены в родительском контейнере. Мы определяем родительский элемент со свойством display: flex вместе с justify-content (горизонтальное размещение по умолчанию) и align-items (вертикальное размещение по умолчанию) center.Эти свойства соответствуют спецификациям Flex. Один из сбоев в выполнении этой работы — предоставление родительскому элементу фиксированной ширины и высоты. Используя CSS Grid, мы можем достичь нашей цели двумя способами. Во-первых, с помощью свойств ‘place-items’, и, во-вторых, с помощью ‘align and justify self’ . И снова эти свойства являются эксклюзивными для CSS Grid. a) Используя place-items , мы предоставляем правила родителю, и только он творит чудеса.Мы даем родительскому элементу ‘display: grid’ и ‘place-items: center’ , и все становится суперцентрированным. b) Используя ‘justify and align-self’ , мы предоставляем родительскому контейнеру свойство ‘display: grid’ , а основные свойства передаются дочернему контейнеру — ‘align-self Стойкам (вертикальное размещение) и ‘justify-self’ (горизонтальное размещение) присваивается значение по центру. Это один из старых методов, которым мы следуем, чтобы центрировать элементы на странице. Мы делаем положение дочернего контейнера абсолютным для родительского контейнера и перемещаем дочерний контейнер на 50% сверху и слева от родительского. Еще один старый метод отлично работает во всех браузерах.Все, что нам нужно сделать, это определить стиль ‘margin: 0 auto’ для дочернего контейнера. Я лично столкнулся с некоторыми несоответствиями при использовании этого метода, поэтому я всегда добавляю дополнительные свойства для центрирования элементов. Это один из распространенных методов, используемых с момента рождения «CSS Positioning» . Мы делаем дочерний контейнер ‘абсолютным’ родительским и определяем свойства top, left, right и bottom ‘0’ вместе с полем ‘: auto’ . Примечание: вставка CSS — это сокращение для свойства top, left, right и bottom (в настоящее время это свойство поддерживается только в Firefox) вставка: 2px 3px 4px 5px / * верхний правый нижний левый * / Я знаю, что все мы широко используем CSS table в нашем приложении, которое имеет множество свойств таблиц. Я был удивлен, обнаружив, что мы можем использовать свойство таблицы для центрирования содержимого и элементов в контейнере, и становится лучше, что мы можем делать это двумя способами. Мы должны предоставить ‘display: table’ оболочке (которая является уровнем выше родительского), затем мы используем свойство ‘display: table-cell’ в родительском элементе. Двумя различиями в дочерних свойствах: во-первых, используется свойство ‘margin’ , а во втором — ‘display: inline-block’ . Мы подошли к концу этой статьи.Я прикрепил код Codepen ниже, где вы можете найти все вышеупомянутые трюки в одном месте, поэкспериментировать с ним и поделиться здесь, если вы будете следовать каким-либо интересным трюкам, чтобы сосредоточить внимание. Надеюсь, эта статья окажется для вас полезной и информативной. Если вам понравилась эта статья, дайте мне оценку 👍 Не забудьте добавить ее в закладки для дальнейшего использования 🔖 Спасибо за чтение 🤓 Загрузка плеера… Этот скринкаст является частью нашей серии CSS AtoZ.Вы можете найти другие записи из этой серии здесь. Вертикальное центрирование — неизменный фаворит дизайнеров как в печатных, так и в цифровых материалах. Но выровнять вещи по вертикали с помощью CSS — не самое простое занятие. Эта проблема усугубляется в мире нескольких устройств и адаптивного дизайна, поскольку нам нужно, чтобы наши элементы были гибкими при высоте В этом выпуске мы узнаем все о: Свойство Требуется длина, процентное значение или ключевое слово. Длины и проценты выравнивают базовую линию Значения ключевого слова могут быть одним из следующих: Большинство из них довольно интуитивно понятны, но Давайте посмотрим на У меня есть сетка из изображений и текста, и все они имеют разную высоту, что означает, что текст не выровнен аккуратно. Мы можем установить контейнеры сетки на Если бы здесь не было текста, и мы хотели бы, чтобы все изображения были выровнены по вертикали, мы могли бы использовать В эпизоде “Эпизод 12: Если бы я хотел центрировать целый контейнер из нескольких элементов внутри другого контейнера, нам понадобится другой подход. У меня есть контейнер с темным фоном и рамкой вокруг него. Внутри находится еще одна коробка меньшего размера с шириной Если нам известна высота С положением С фиксированной шириной Этот метод работает хорошо, но недостатком является то, что все значения ширины фиксированы, а это означает, что это не лучшее решение для работы над адаптивным проектом. Мы можем выполнить вертикальное центрирование элементов Мы возьмем тот же пример коробки внутри контейнера, что и раньше, но на этот раз тема будет плавной. Уловка состоит в том, чтобы создать невидимый элемент — используя псевдоэлемент — который будет полной высотой Теперь, когда контейнерный блок меняет свою
vertical-align
в сочетании с display: table-cell;
на содержащем элементе div.
margin
свойство не применимо к display: table-cell;
элементов, поэтому мы обернули содержащий DIV другой DIV ( .outer-wrapper
) и применили к нему маржу. Это решение будет работать даже для изображений с большей высотой, чем содержащие DIV.
Связанные часто задаваемые вопросы
Center Div по горизонтали и вертикали: 5 способов центрировать div по вертикали и горизонтали с помощью CSS
В этой статье я собрал список различных приемов CSS для центрирования div по горизонтали и вертикали по центру на странице, выберите один или два трюка и сделайте его вашим любимым.
Метод 1. Использование Flex
Метод 2: Использование сетки
Метод 3. Использование позиционирования CSS и преобразования CSS
Метод 4: Использование поля CSS
Метод 5. Использование CSS-позиционирования
Бонусный метод
: использование таблицы CSS
AtoZ CSS Screencast: Вертикальное выравнивание в CSS
Выписка
, что может затруднить вычисление их вертикального центра.
vertical-align
, и как и когда оно работает
.
с выравниванием по вертикали
vertical-align
влияет только на элементы с display
, установленным на inline
, inline-block
или table-cell
.
элемента на данном расстоянии выше базовой линии
его родительского элемента.
исходный
переходник
супер
текст вверху
текст внизу
средний
верх
низ
sub
выравнивает baseline
с родительским sub-script baseline
и super
выравнивает baseline
элемента с родительским super-script baseline
. с вертикальным выравниванием
на практическом примере.
бекон на гриле
вкусный бекон
хрустящий бекон
бекон
display: inline-block
и использовать vertical-align: bottom
на изображениях, чтобы все было хорошо выстроено. vertical-align: middle
и добиться довольно хорошего эффекта. Вертикальное центрирование
line-height
“ мы рассмотрели line-height
и продемонстрировали один способ имитации вертикального центрирования текста.
и высотой
, установленной для придания ей некоторой формы.
этого блока, мы можем использовать абсолютное позиционирование для вертикального и горизонтального центрирования его внутри контейнера. : относительно
на контейнере, ящик может быть расположен абсолютно внутри него.Если мы установим для свойств top
и left
значение 50%
, поле будет перемещено на 50% от верхнего и на 50% от левого, оставляя верхний левый угол поля точно в центре. контейнера.
.container {
положение: относительное;
фон: # 444;
}
.коробка {
позиция: абсолютная;
верх: 50%;
осталось: 50%;
ширина: 400 пикселей;
высота: 200 пикселей;
маржа: -100px 0 0 -200px;
цвет: #fff;
фон: # cc3f85;
}
и высотой
мы можем установить отрицательные поля для поля; половина высоты
вверх и половина ширины
слева.И теперь коробка находится по центру контейнера. Вертикальный центр жидкости
, высота
, объединив знания о vertical-align: middle
и псевдоэлементы, которые мы рассмотрели в «Эпизод 16: Псевдоэлементы CSS» . контейнера
и установить для него inline-block
и vertical-align: middle
. Затем мы можем вертикально центрировать внутренний блок, также сделав его inline-block
и vertical-align: center
. Его можно центрировать по горизонтали с text-align: center
.
.container {
высота: 400 пикселей;
маржа: 20 пикселей;
фон: # 444;
размер шрифта: 0;
выравнивание текста: центр;
}
.container: before {
содержание: '';
дисплей: встроенный блок;
высота: 100%;
вертикальное выравнивание: по центру;
}
.коробка {
дисплей: встроенный блок;
ширина: 50%;
отступ: 2em;
граница: 1px solid # 000;
фон: # cc3f85;
размер шрифта: 1 бэр;
вертикальное выравнивание: по центру;
}
ширину
, процентная ширина
дочернего бокса также изменяется, изменяя его высоту
, но бокс остается вертикально центрированным.