Предисловие Hammer Interviewer Artifact — CSS
Будь то в реальной разработке или на собеседованиях, вертикальное центрирование css часто является темой, которую невозможно избежать.Многие интервьюеры перенесли несколько двойных ударов без хорошей контратаки.Просто объединив обиды и боли, которые я испытал в прошлом, я дам всем шанс разбить интервьюеров.
На самом деле вертикальное центрирование в основном делится на два вида:Ширина и высота центрированного элемента известныа такжеШирина и высота центрированного элемента неизвестны, то мы объединим эти два типа, чтобы привести пример один за другим.
Ширина и высота центрированного элемента известны
1. absolute + margin auto
Как следует из названия, он использует текущий элементposition: absolute;
а такжеmargin: auto;
Обратите внимание на использование этого метода: должна быть установлена высота родительского элемента и текущего элемента;
Установив расстояние во всех направлениях до 0,margin
Установить какauto
Конкретный код выглядит следующим образом:
.parent{
position: relative;
width: 90vw;
height: 90vh;
border: 3px solid steelblue;
}
.child{
background: tomato;
width: 50vw; height: 50vh;
/* 核心代码 */
position:absolute;
top: 0; bottom: 0; left: 0; right: 0;
margin: auto;
}
Конкретный код выглядит следующим образом:
.parent{
position:relative;
width: 90vw;
height: 90vh;
border: 3px solid steelblue;
}
.child{
background: tomato;
width: 100px; height: 100px;
/* 核心代码 */
position:absolute;
top: 50%; left: 50%;
margin-top: -50px;
margin-left: -50px;
}
Конкретные эффекты следующие:
3. absolute + calc
Используйте функцию расчета CSS3 для расчета; метод аналогичен вышеуказанному
Конкретный код выглядит следующим образом:
.parent{
width: 90vw;
height: 90vh;
border: 3px solid steelblue;
/* 核心代码 */
position:relative;
}
.child{
background: tomato;
width: 200px; height: 200px;
/* 核心代码 */
position:absolute;
top: calc(50% - 100px);
left: calc(50% - 100px);
}
Конкретные эффекты следующие:
Ширина и высота центрированного элемента неизвестны
4. absolute + transform
Воспользуйтесь преимуществами новых возможностей CSS3transform
;потому чтоtransform
изtranslate
Если значением атрибута является процент, то процент будет рассчитываться на основе его собственной ширины и высоты.
Конкретный код выглядит следующим образом:
.parent{
width: 90vw;
height: 90vh;
border: 3px solid steelblue;
/* 核心代码 */
position:relative;
}
.child{
background: tomato;
/* 核心代码 */
position:absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
Конкретные эффекты следующие:
5. line-height + vertical-align
Элемент устанавливается на текущие встроенные элементы, и при предоставлении родительского элемента text-align: center;
добиться горизонтального центрирования;
В то же время, установив текущий элементvertical-align: middle;
добиться вертикального центрирования;
Наконец, установите текущий элементline-height: initial;
наследовать от родительского элементаline-height
.
Конкретный код выглядит следующим образом:
.parent{
width: 90vw;
border: 3px solid steelblue;
/* 核心代码 */
line-height: 500px;
text-align: center;
}
.child{
background: tomato;
/* 核心代码 */
display: inline-block;
vertical-align: middle;
line-height: initial;
}
Конкретные эффекты следующие:
6. Элемент таблицы таблицы
Горизонтальное и вертикальное центрирование осуществляется через самый классический элемент таблицы, но код выглядит избыточным и не рекомендуется;
Конкретный код выглядит следующим образом:
<table>
<tbody>
<tr>
<td class="parent">
<div class="child"></div>
</td>
</tr>
</tbody>
</table>
<style>
.parent {
width: 90vw;
height: 90vh;
border: 3px solid steelblue;
/* 核心代码 */
text-align: center;
}
.child {
background: tomato;
/* 核心代码 */
display: inline-block;
}
</style>
Конкретные эффекты следующие:
Если вы должны использоватьtable
table
Если элементы, тоcss-table
Конкретный код выглядит следующим образом:
.parent{
width: 90vw;
height: 90vh;
border: 3px solid steelblue;
/* 核心代码 */
display: table-cell;
text-align: center;
vertical-align: middle;
}
.child{
background: tomato;
/* 核心代码 */
display: inline-block;
}
Конкретные эффекты следующие:
8. гибкий макет (1)
Сказать, что сейчас популярнее и использовать больше схем компоновки, то негибких нет, то два самых распространенных способа~
прямо вflex-container
Очень элегантно, чтобы быть достигнуты несколькими строками кода
Конкретный код выглядит следующим образом:
.parent {
width: 90vw;
height: 90vh;
border: 3px solid steelblue;
/* 核心代码 */
display: flex;
justify-content: center;
align-items: center;
}
.child{
background: tomato;
}
justify-content
align-items
Конкретные эффекты следующие:
существуетflex-item
Конкретный код выглядит следующим образом:
.parent{
width: 90vw;
height: 90vh;
border: 3px solid steelblue;
/* 核心代码 */
display: flex;
}
.child{
background: tomato;
/* 核心代码 */
margin: auto;
}
Конкретные эффекты следующие:
два метода flex используют компромиссы по вашему желанию
Поставляется с изображением совместимости flex
10. макет сетки сетки (1)
Считается, что макет сетки редко используется в реальных проектах, в основном потому, что макет слишком продвинут, что приводит к не столь идеальной совместимости, но нельзя отрицать, что возможности сетки определенно являются качественным скачком в макете css.
Не знаком с деталями учителя может выглядеть Ruan YifengРуководство по началу работы
CSS Grid
содержит сFlexbox
практически одинаковые параметры выравнивания, поэтому мы можемgrid-container
элегантная реализация
Конкретный код выглядит следующим образом:
.parent{
width: 90vw;
height: 90vh;
border: 3px solid steelblue;
/* 核心代码 */
display: grid;
align-items: center;
justify-content: center;
}
.child{
background: tomato;
}
Конкретные эффекты следующие:
11. сетка макет сетки (2)
Точно так же мы можем сделать что-то вродеFlexbox
то же, вgrid-item
элегантная реализация
Конкретный код выглядит следующим образом:
.parent{
width: 90vw;
height: 90vh;
border: 3px solid steelblue;
/* 核心代码 */
display: grid
}
.child{
background: tomato;
/* 核心代码 */
align-self: center;
justify-self: center;
}
Конкретные эффекты следующие:
два метода flex используют компромиссы по своему усмотрению
Поставляется с изображением совместимости сетки
Суммировать
После изучения 11 вертикальных центрирующих методов макета выше, давайте кратко обобщены
- если ваш проектТребования совместимости на стороне ПКа такжеФиксированная ширина и высота,Рекомендуемое использование
absolute + 负 margin
Реализация метода; - если ваш проектТребования совместимости на стороне ПКа такжеШирина и высота не фиксированы,Рекомендуемое использование
css-table
способ достижения; - если ваш проектНет требований совместимости на стороне ПК,Рекомендуемое использование
flex
Для достижения центрирования, конечно, без учета IE,grid
также хороший выбор; - если ваш проект
flex
,grid
напиши в конце
Элемент псевдокласса,grid-контейнер строк сетки-шаблонаПодождите, вы можете спуститься и попробовать сами~
Выходные закончились, до понедельника еще далеко?Желаю всем нового начала новой недели~
Ты красивый и красивый, пожалуйста, поставь лайк и уйди~