0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><strong>При изучении стилизации HTML-страниц и механизмов выравнивания элементов средствами CSS, начинающий разработчик, как правило, сначала знакомится со способами горизонтального выравнивания элементов. В их числе, например, text-align: center; и margin: 0 auto;. С выравниванием по вертикали возникает больше вопросов. В этой статье разберем пять способов выравнивания элементов в HTML и CSS по вертикали.</strong></p>
1
<p><strong>При изучении стилизации HTML-страниц и механизмов выравнивания элементов средствами CSS, начинающий разработчик, как правило, сначала знакомится со способами горизонтального выравнивания элементов. В их числе, например, text-align: center; и margin: 0 auto;. С выравниванием по вертикали возникает больше вопросов. В этой статье разберем пять способов выравнивания элементов в HTML и CSS по вертикали.</strong></p>
2
<p>У каждого описанного способа есть свои преимущества и недостатки, поэтому подходить к их использованию стоит критически. В определенной ситуации один способ может подходить идеально, а другой - оказаться совершенно бесполезным.</p>
2
<p>У каждого описанного способа есть свои преимущества и недостатки, поэтому подходить к их использованию стоит критически. В определенной ситуации один способ может подходить идеально, а другой - оказаться совершенно бесполезным.</p>
3
<p><strong>1.</strong>У правила для горизонтального выравнивания текста text-align: center;, которое уже упоминалось выше, есть собрат, который называется vertical-align. Как и text-align, vertical-align выравнивает элементы со строчным или строчно-блочным типом бокса. Отличие в том, что свойство text-align применяется к родительскому блоку, а vertical-align необходимо применять непосредственно к выравниваемому элементу.</p>
3
<p><strong>1.</strong>У правила для горизонтального выравнивания текста text-align: center;, которое уже упоминалось выше, есть собрат, который называется vertical-align. Как и text-align, vertical-align выравнивает элементы со строчным или строчно-блочным типом бокса. Отличие в том, что свойство text-align применяется к родительскому блоку, а vertical-align необходимо применять непосредственно к выравниваемому элементу.</p>
4
<p>Свойство vertical-align удобно применять, когда необходимо, например, выровнять иконку внутри строки или два рядом стоящих строчно-блочных элемента. Важно понимать, что vertical-align выравнивает элемент относительно содержащей строки, а не относительно ближайших элементов.</p>
4
<p>Свойство vertical-align удобно применять, когда необходимо, например, выровнять иконку внутри строки или два рядом стоящих строчно-блочных элемента. Важно понимать, что vertical-align выравнивает элемент относительно содержащей строки, а не относительно ближайших элементов.</p>
5
<p>Кроме того, свойство vertical-align можно использовать для того, чтобы выравнивать контент в ячейке таблицы.</p>
5
<p>Кроме того, свойство vertical-align можно использовать для того, чтобы выравнивать контент в ячейке таблицы.</p>
6
<p><strong>2.</strong>Для тех, кто не знаком с принципами работы интерлиньяжа и свойством line-height, может стать откровением, что текст располагается посередине содержащей его строки. Этим можно пользоваться при выравнивании. Предположим, что у вас есть элементарный footer, в котором нужно расположить по центру копирайт:</p>
6
<p><strong>2.</strong>Для тех, кто не знаком с принципами работы интерлиньяжа и свойством line-height, может стать откровением, что текст располагается посередине содержащей его строки. Этим можно пользоваться при выравнивании. Предположим, что у вас есть элементарный footer, в котором нужно расположить по центру копирайт:</p>
7
<p>Допустим, что высота футера равна 80px. Для того, чтобы текст вертикально встал ровно по центру, достаточно написать в CSS следующее:</p>
7
<p>Допустим, что высота футера равна 80px. Для того, чтобы текст вертикально встал ровно по центру, достаточно написать в CSS следующее:</p>
8
<p>У этого способа есть недостаток. Его удобно применять, когда вы уверены, что выравниваемый элемент не будет переполняться. В противном случае при переносе строки между текстом появятся большие вертикальные отступы, что почти наверняка станет нежелаемым поведением.</p>
8
<p>У этого способа есть недостаток. Его удобно применять, когда вы уверены, что выравниваемый элемент не будет переполняться. В противном случае при переносе строки между текстом появятся большие вертикальные отступы, что почти наверняка станет нежелаемым поведением.</p>
9
<p><strong>3.</strong>Для предотвращения нежелаемного поведения, описанного в примере выше, можно использовать метод выравнивания: padding. Значения padding-top и padding-bottom помогут вам не только центрировать по вертикали, но и застраховаться от переполнения. Рассмотрим пример:</p>
9
<p><strong>3.</strong>Для предотвращения нежелаемного поведения, описанного в примере выше, можно использовать метод выравнивания: padding. Значения padding-top и padding-bottom помогут вам не только центрировать по вертикали, но и застраховаться от переполнения. Рассмотрим пример:</p>
10
<p>Предположим, вы верстаете кнопку, при нажатии на которую происходит переход на страницу заказа товара. Высота кнопки не должна превышать 50px. Из макета вы выгрузили следующие стили:</p>
10
<p>Предположим, вы верстаете кнопку, при нажатии на которую происходит переход на страницу заказа товара. Высота кнопки не должна превышать 50px. Из макета вы выгрузили следующие стили:</p>
11
<p>Высота контента внутри кнопки равна высоте строки и составляет 20px. Чтобы текст кнопки встал по центру, необходимо распределить по свойствам padding-top и padding-bottom оставшееся пространство следующим образом: (50px - 20px) / 2.</p>
11
<p>Высота контента внутри кнопки равна высоте строки и составляет 20px. Чтобы текст кнопки встал по центру, необходимо распределить по свойствам padding-top и padding-bottom оставшееся пространство следующим образом: (50px - 20px) / 2.</p>
12
<p>В результате получаем следующее:</p>
12
<p>В результате получаем следующее:</p>
13
<p>Если текст кнопки измениться с "Заказать" на "Заказать товар онлайн" и перестанет помещаться на одной строке, кнопка сохранит нужный вид, а текст внутри неё по-прежнему будет находиться по центру.</p>
13
<p>Если текст кнопки измениться с "Заказать" на "Заказать товар онлайн" и перестанет помещаться на одной строке, кнопка сохранит нужный вид, а текст внутри неё по-прежнему будет находиться по центру.</p>
14
<p>Выравнивание при помощи padding универсально и подходит как для фразовых элементов, так и для выравнивания элементов с блочным типом бокса (но только в некоторых случаях).</p>
14
<p>Выравнивание при помощи padding универсально и подходит как для фразовых элементов, так и для выравнивания элементов с блочным типом бокса (но только в некоторых случаях).</p>
15
<p><strong>4.</strong>Еще один инструмент - Flexbox. Внутри flex-контейнера любой элемент, будь то блочный, строчный или даже псевдоэлемент, становится flex-элементом, с которым можно производить любые манипуляции. В этой статье мы не будем подробно останавливаться на flex-свойств, почитать о них можно, например,<a>тут</a>.</p>
15
<p><strong>4.</strong>Еще один инструмент - Flexbox. Внутри flex-контейнера любой элемент, будь то блочный, строчный или даже псевдоэлемент, становится flex-элементом, с которым можно производить любые манипуляции. В этой статье мы не будем подробно останавливаться на flex-свойств, почитать о них можно, например,<a>тут</a>.</p>
16
<p>У Flexbox есть ряд преимуществ перед обыкновенным выравниванием - в первую очередь это создание крупных сеточных структур и макросеток.</p>
16
<p>У Flexbox есть ряд преимуществ перед обыкновенным выравниванием - в первую очередь это создание крупных сеточных структур и макросеток.</p>
17
<p><strong>5.</strong>А что, если элемент абсолютно спозиционирован? Предположим, что вы сверстали модальное окно, которое нужно спозиционировать не относительно другого элемента, а относительно окна браузера. В этом случае можно использоватьposition: fixed;.</p>
17
<p><strong>5.</strong>А что, если элемент абсолютно спозиционирован? Предположим, что вы сверстали модальное окно, которое нужно спозиционировать не относительно другого элемента, а относительно окна браузера. В этом случае можно использоватьposition: fixed;.</p>
18
<p><em>Стоит отметить, что все описываемые далее действия применимы и в случаях, когда нужно выполнить абсолютное позиционирование внутри другого элемента.</em></p>
18
<p><em>Стоит отметить, что все описываемые далее действия применимы и в случаях, когда нужно выполнить абсолютное позиционирование внутри другого элемента.</em></p>
19
<p>Положением спозиционированных элементов управляют свойства top, right, bottom, left. Попробуем следующее:</p>
19
<p>Положением спозиционированных элементов управляют свойства top, right, bottom, left. Попробуем следующее:</p>
20
<p>В данном случае модальное окно расположено не верно: ровно по центру находится левый верхний угол модального окна, а не его физический центр. Для того, чтобы выполнить его абсолютное позиционирование, изменим положение модального окна с помощью отрицательного margin:</p>
20
<p>В данном случае модальное окно расположено не верно: ровно по центру находится левый верхний угол модального окна, а не его физический центр. Для того, чтобы выполнить его абсолютное позиционирование, изменим положение модального окна с помощью отрицательного margin:</p>
21
<p>У применения свойства margin в этой ситуации существует один недостаток. При изменении свойств width и/или height модального окна вам придется вручную "подкручивать" значения отрицательного margin, чтобы добиться половины размера его ширины и высоты. Этого можно избежать, используя вместо margin свойство transform. А transform: translate(X, Y) позволяет регулировать смещение элемента относительно исходного положение. Например, так:</p>
21
<p>У применения свойства margin в этой ситуации существует один недостаток. При изменении свойств width и/или height модального окна вам придется вручную "подкручивать" значения отрицательного margin, чтобы добиться половины размера его ширины и высоты. Этого можно избежать, используя вместо margin свойство transform. А transform: translate(X, Y) позволяет регулировать смещение элемента относительно исходного положение. Например, так:</p>
22
<p>В отличие от свойства margin, значения которого вычисляются от ширины родительского элемента, transform: translate(X, Y) берет за основу габариты самого элемента - в данном случае, модального окна. А это то, что нам и нужно. В результате, модальное окно будет всегда находиться в центре. Независимо от своих размеров.</p>
22
<p>В отличие от свойства margin, значения которого вычисляются от ширины родительского элемента, transform: translate(X, Y) берет за основу габариты самого элемента - в данном случае, модального окна. А это то, что нам и нужно. В результате, модальное окно будет всегда находиться в центре. Независимо от своих размеров.</p>