HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#Руководства</a></p>
1 <p><a>#Руководства</a></p>
2 <ul><li>21 мар 2023</li>
2 <ul><li>21 мар 2023</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Как расположить что угодно по центру чего угодно с помощью каскадных таблиц стилей.</p>
4 </ul><p>Как расположить что угодно по центру чего угодно с помощью каскадных таблиц стилей.</p>
5 <p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5 <p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6 <p>Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.</p>
6 <p>Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.</p>
7 <p>CSS существует и развивается с 1996 года. За четверть века и три редакции в этом языке появилось много разных способов отцентрировать элемент - как костыльных, так и каноничных.</p>
7 <p>CSS существует и развивается с 1996 года. За четверть века и три редакции в этом языке появилось много разных способов отцентрировать элемент - как костыльных, так и каноничных.</p>
8 <p>В статье мы расскажем об основных приёмах для выравнивания по центру в CSS. Какой из них более удобен и приятен - решать вам.</p>
8 <p>В статье мы расскажем об основных приёмах для выравнивания по центру в CSS. Какой из них более удобен и приятен - решать вам.</p>
9 <ul><li><a>Горизонтальное центрирование</a></li>
9 <ul><li><a>Горизонтальное центрирование</a></li>
10 </ul><ul><li><a>С помощью Flexbox</a></li>
10 </ul><ul><li><a>С помощью Flexbox</a></li>
11 <li><a>Через автоотступы</a></li>
11 <li><a>Через автоотступы</a></li>
12 <li><a>С помощью inline-блоков</a></li>
12 <li><a>С помощью inline-блоков</a></li>
13 <li><a>Выравнивание нескольких элементов</a></li>
13 <li><a>Выравнивание нескольких элементов</a></li>
14 </ul><ul><li><a>Вертикальное центрирование</a></li>
14 </ul><ul><li><a>Вертикальное центрирование</a></li>
15 </ul><ul><li><a>С помощью Flexbox</a></li>
15 </ul><ul><li><a>С помощью Flexbox</a></li>
16 <li><a>С помощью свойств position и transform</a></li>
16 <li><a>С помощью свойств position и transform</a></li>
17 <li><a>Ячейки таблицы</a></li>
17 <li><a>Ячейки таблицы</a></li>
18 </ul><ul><li><a>Выравнивание по центру</a></li>
18 </ul><ul><li><a>Выравнивание по центру</a></li>
19 </ul><ul><li><a>С помощью Flexbox</a></li>
19 </ul><ul><li><a>С помощью Flexbox</a></li>
20 <li><a>С помощью свойств position и transform</a></li>
20 <li><a>С помощью свойств position и transform</a></li>
21 <li><a>Через CSS Grid</a></li>
21 <li><a>Через CSS Grid</a></li>
22 </ul><ul><li><a>Центрирование на примерах</a></li>
22 </ul><ul><li><a>Центрирование на примерах</a></li>
23 </ul><ul><li><a>Центрирование текста по горизонтали</a></li>
23 </ul><ul><li><a>Центрирование текста по горизонтали</a></li>
24 <li><a>Центрирование текста по вертикали</a></li>
24 <li><a>Центрирование текста по вертикали</a></li>
25 <li><a>Как выровнять заголовок, список или форму</a></li>
25 <li><a>Как выровнять заголовок, список или форму</a></li>
26 <li><a>Как центрировать блок</a></li>
26 <li><a>Как центрировать блок</a></li>
27 <li><a>Как разместить блок посередине страницы</a></li>
27 <li><a>Как разместить блок посередине страницы</a></li>
28 <li><a>Выравнивание картинок и кнопок по центру</a></li>
28 <li><a>Выравнивание картинок и кнопок по центру</a></li>
29 </ul><ul><li><a>Резюмируем</a></li>
29 </ul><ul><li><a>Резюмируем</a></li>
30 </ul><p>Как работают способы из этого раздела, мы покажем на примере блоков div, однако применять их можно и к другим элементам: заголовкам, абзацам, изображениям, кнопкам, формам, спискам и так далее.</p>
30 </ul><p>Как работают способы из этого раздела, мы покажем на примере блоков div, однако применять их можно и к другим элементам: заголовкам, абзацам, изображениям, кнопкам, формам, спискам и так далее.</p>
31 <p>Для наглядности мы добавим границы блоков: синие для родительских и чёрные для дочерних.</p>
31 <p>Для наглядности мы добавим границы блоков: синие для родительских и чёрные для дочерних.</p>
32 <p>Добавьте в родительский элемент свойства display: flex, чтобы сделать элемент flex-контейнером, и justify-content: center, чтобы контент внутри контейнера расположился посередине горизонтальной оси. Обратите внимание: justify-content действует только на flex-элементы, поэтому без display: flex он не заработает.</p>
32 <p>Добавьте в родительский элемент свойства display: flex, чтобы сделать элемент flex-контейнером, и justify-content: center, чтобы контент внутри контейнера расположился посередине горизонтальной оси. Обратите внимание: justify-content действует только на flex-элементы, поэтому без display: flex он не заработает.</p>
33 <p>HTML:</p>
33 <p>HTML:</p>
34 &lt;div class="parent"&gt; &lt;div class="child"&gt;Блок с текстом&lt;/div&gt; &lt;/div&gt;<p>CSS:</p>
34 &lt;div class="parent"&gt; &lt;div class="child"&gt;Блок с текстом&lt;/div&gt; &lt;/div&gt;<p>CSS:</p>
35 .parent { display: flex; justify-content: center; border: 2px solid blue; } .child { border: 2px solid black; }<p>Результат:</p>
35 .parent { display: flex; justify-content: center; border: 2px solid blue; } .child { border: 2px solid black; }<p>Результат:</p>
36 <em>Изображение: Skillbox Media</em><p>Преимущество такого метода в том, что дочерний блок будет автоматически подстраиваться под размеры содержимого. Если же нужно задать размеры явно, то сделать это можно с помощью width для ширины, и height для высоты.</p>
36 <em>Изображение: Skillbox Media</em><p>Преимущество такого метода в том, что дочерний блок будет автоматически подстраиваться под размеры содержимого. Если же нужно задать размеры явно, то сделать это можно с помощью width для ширины, и height для высоты.</p>
37 <p>Добавьте свойства margin-left: auto и margin-right: auto - они устанавливают автоматические отступы слева и справа. И укажите ширину с помощью width:</p>
37 <p>Добавьте свойства margin-left: auto и margin-right: auto - они устанавливают автоматические отступы слева и справа. И укажите ширину с помощью width:</p>
38 <p>CSS:</p>
38 <p>CSS:</p>
39 .block { width: 70px; margin-left: auto; margin-right: auto; border: 2px solid black; }<p>HTML:</p>
39 .block { width: 70px; margin-left: auto; margin-right: auto; border: 2px solid black; }<p>HTML:</p>
40 &lt;div class="block"&gt;Блок с текстом&lt;/div&gt;<p>Результат:</p>
40 &lt;div class="block"&gt;Блок с текстом&lt;/div&gt;<p>Результат:</p>
41 <em>Изображение: Skillbox Media</em><p>Преимущество метода состоит в том, что не нужно явно прописывать свойства родительского элемента (в нашем случае это<em>body</em>).</p>
41 <em>Изображение: Skillbox Media</em><p>Преимущество метода состоит в том, что не нужно явно прописывать свойства родительского элемента (в нашем случае это<em>body</em>).</p>
42 <p>Две строки с автоотступами можно заменить на одну: margin: 0 auto или margin: auto. В обоих случаях результат будет одинаковым.</p>
42 <p>Две строки с автоотступами можно заменить на одну: margin: 0 auto или margin: auto. В обоих случаях результат будет одинаковым.</p>
43 <p>Проще всего выравнивать текст по горизонтали. Для этого существует свойство text-align: center, которое применяется к родительскому элементу.</p>
43 <p>Проще всего выравнивать текст по горизонтали. Для этого существует свойство text-align: center, которое применяется к родительскому элементу.</p>
44 <p>CSS:</p>
44 <p>CSS:</p>
45 .parent { text-align: center; border: 2px solid blue; }<p>HTML:</p>
45 .parent { text-align: center; border: 2px solid blue; }<p>HTML:</p>
46 &lt;div class="parent"&gt;Текст&lt;/div&gt;<p>Результат:</p>
46 &lt;div class="parent"&gt;Текст&lt;/div&gt;<p>Результат:</p>
47 <em>Изображение: Skillbox Media</em><p>Несмотря на своё название, text-align можно применять не только к тексту. Для этого нужно сделать элементы, которые хотите выровнять, встроенными - с помощью display: inline-block.</p>
47 <em>Изображение: Skillbox Media</em><p>Несмотря на своё название, text-align можно применять не только к тексту. Для этого нужно сделать элементы, которые хотите выровнять, встроенными - с помощью display: inline-block.</p>
48 <p>CSS:</p>
48 <p>CSS:</p>
49 .parent { text-align: center; border: 2px solid blue; } .child { display: inline-block; border: 2px solid black; }<p>HTML:</p>
49 .parent { text-align: center; border: 2px solid blue; } .child { display: inline-block; border: 2px solid black; }<p>HTML:</p>
50 &lt;div class="parent"&gt; &lt;div class="child"&gt;Блок с текстом&lt;/div&gt; &lt;/div&gt;<p>Результат:</p>
50 &lt;div class="parent"&gt; &lt;div class="child"&gt;Блок с текстом&lt;/div&gt; &lt;/div&gt;<p>Результат:</p>
51 <em>Изображение: Skillbox Media</em><p>В этом методе так же, как и в первом, размеры блока подстраиваются под содержимое. Но при желании можно явно задать ширину и высоту.</p>
51 <em>Изображение: Skillbox Media</em><p>В этом методе так же, как и в первом, размеры блока подстраиваются под содержимое. Но при желании можно явно задать ширину и высоту.</p>
52 <p>Каждый из трёх способов будет вести себя по-разному, если мы будем размещать по центру сразу несколько элементов. Возьмём один и тот же HTML-код и последовательно применим к нему описанные выше методы:</p>
52 <p>Каждый из трёх способов будет вести себя по-разному, если мы будем размещать по центру сразу несколько элементов. Возьмём один и тот же HTML-код и последовательно применим к нему описанные выше методы:</p>
53 &lt;div class="parent"&gt; &lt;div class="child"&gt;Блок с текстом&lt;/div&gt; &lt;div class="child"&gt;Блок с текстом&lt;br&gt;в две строки&lt;/div&gt; &lt;div class="child"&gt;Блок с текстом&lt;br&gt;в три&lt;br&gt;строки&lt;/div&gt; &lt;/div&gt;<p><strong>Flex-элементы</strong>выстраиваются в один ряд и приобретают одинаковую высоту:</p>
53 &lt;div class="parent"&gt; &lt;div class="child"&gt;Блок с текстом&lt;/div&gt; &lt;div class="child"&gt;Блок с текстом&lt;br&gt;в две строки&lt;/div&gt; &lt;div class="child"&gt;Блок с текстом&lt;br&gt;в три&lt;br&gt;строки&lt;/div&gt; &lt;/div&gt;<p><strong>Flex-элементы</strong>выстраиваются в один ряд и приобретают одинаковую высоту:</p>
54 .parent { display: flex; justify-content: center; border: 2px solid blue; } .child { border: 2px solid black; }<em>Изображение: Skillbox Media</em><p><strong>С автоотступами</strong>каждый блочный элемент помещается в отдельную строку:</p>
54 .parent { display: flex; justify-content: center; border: 2px solid blue; } .child { border: 2px solid black; }<em>Изображение: Skillbox Media</em><p><strong>С автоотступами</strong>каждый блочный элемент помещается в отдельную строку:</p>
55 .block { width: 120px; margin: auto; border: 2px solid black; }<em>Изображение: Skillbox Media</em><p><strong>Инлайн-блоки</strong>остаются в одном ряду, но у них будет разная высота (у каждого - по размеру контента). Плюс текст в них автоматически выравнивается по центру.</p>
55 .block { width: 120px; margin: auto; border: 2px solid black; }<em>Изображение: Skillbox Media</em><p><strong>Инлайн-блоки</strong>остаются в одном ряду, но у них будет разная высота (у каждого - по размеру контента). Плюс текст в них автоматически выравнивается по центру.</p>
56 .parent { text-align: center; border: 2px solid blue; } .child { display: inline-block; border: 2px solid black; }<em>Изображение: Skillbox Media</em><p>При горизонтальном центрировании легко определить ширину родительского элемента: если она не задана явно, то обычно равна ширине экрана. При вертикальном центрировании всё немного сложнее: высоту родительского элемента приходится задавать явно с помощью свойства height.</p>
56 .parent { text-align: center; border: 2px solid blue; } .child { display: inline-block; border: 2px solid black; }<em>Изображение: Skillbox Media</em><p>При горизонтальном центрировании легко определить ширину родительского элемента: если она не задана явно, то обычно равна ширине экрана. При вертикальном центрировании всё немного сложнее: высоту родительского элемента приходится задавать явно с помощью свойства height.</p>
57 <p>Как и в прошлом разделе, мы будем показывать работу всех методов на примере блоков div и добавим те же границы: синие - для родительских и чёрные - для дочерних элементов. Во всех примерах будем использовать один и тот же HTML-код:</p>
57 <p>Как и в прошлом разделе, мы будем показывать работу всех методов на примере блоков div и добавим те же границы: синие - для родительских и чёрные - для дочерних элементов. Во всех примерах будем использовать один и тот же HTML-код:</p>
58 &lt;div class="parent"&gt; &lt;div class="child"&gt;Блок с текстом&lt;/div&gt; &lt;/div&gt;<p>Добавьте в родительский элемент свойства display: flex (превращает элемент во flex-контейнер) и align-items: center. Второе свойство отцентрирует весь контент внутри контейнера по вертикали.</p>
58 &lt;div class="parent"&gt; &lt;div class="child"&gt;Блок с текстом&lt;/div&gt; &lt;/div&gt;<p>Добавьте в родительский элемент свойства display: flex (превращает элемент во flex-контейнер) и align-items: center. Второе свойство отцентрирует весь контент внутри контейнера по вертикали.</p>
59 .parent { height: 100px; display: flex; align-items: center; border: 2px solid blue; } .child { border: 2px solid black; }<em>Изображение: Skillbox Media</em><p>Этот способ использует сразу много свойств для разных целей, поэтому разберём его по шагам.</p>
59 .parent { height: 100px; display: flex; align-items: center; border: 2px solid blue; } .child { border: 2px solid black; }<em>Изображение: Skillbox Media</em><p>Этот способ использует сразу много свойств для разных целей, поэтому разберём его по шагам.</p>
60 <p>Родительскому элементу нужно присвоить свойство position: relative, а дочернему - position: absolute. Благодаря этому мы сможем сдвинуть дочерний блок относительно верхнего края родительского, используя свойство top: 50%.</p>
60 <p>Родительскому элементу нужно присвоить свойство position: relative, а дочернему - position: absolute. Благодаря этому мы сможем сдвинуть дочерний блок относительно верхнего края родительского, используя свойство top: 50%.</p>
61 .parent { height: 100px; position: relative; border: 2px solid blue; } .child { position: absolute; top: 50%; border: 2px solid black; }<em>Изображение: Skillbox Media</em><p>Обратите внимание, что сейчас по центру расположена не середина блока с текстом, а его верхняя граница. Чтобы исправить это, дочерний элемент нужно сдвинуть на половину его высоты вверх. Делается это свойством transform: translate (0, -50%). Первое число означает смещение по горизонтали, второе - по вертикали.</p>
61 .parent { height: 100px; position: relative; border: 2px solid blue; } .child { position: absolute; top: 50%; border: 2px solid black; }<em>Изображение: Skillbox Media</em><p>Обратите внимание, что сейчас по центру расположена не середина блока с текстом, а его верхняя граница. Чтобы исправить это, дочерний элемент нужно сдвинуть на половину его высоты вверх. Делается это свойством transform: translate (0, -50%). Первое число означает смещение по горизонтали, второе - по вертикали.</p>
62 .parent { height: 100px; position: relative; border: 2px solid blue; } .child { position: absolute; top: 50%; transform: translate(0, -50%); border: 2px solid black; }<p>В результате получается так:</p>
62 .parent { height: 100px; position: relative; border: 2px solid blue; } .child { position: absolute; top: 50%; transform: translate(0, -50%); border: 2px solid black; }<p>В результате получается так:</p>
63 <em>Изображение: Skillbox Media</em><p>Если по какой-то причине вы не хотите использовать свойство transform, вместо него можно поставить margin. Но для этого необходимо знать размер дочернего элемента и установить отрицательный margin-top, равный половине его высоты.</p>
63 <em>Изображение: Skillbox Media</em><p>Если по какой-то причине вы не хотите использовать свойство transform, вместо него можно поставить margin. Но для этого необходимо знать размер дочернего элемента и установить отрицательный margin-top, равный половине его высоты.</p>
64 <p>Добавьте в родительский элемент display: table-cell, чтобы блок вёл себя как ячейка таблицы, и vertical-align: middle - это свойство центрирует содержимое блока по вертикали.</p>
64 <p>Добавьте в родительский элемент display: table-cell, чтобы блок вёл себя как ячейка таблицы, и vertical-align: middle - это свойство центрирует содержимое блока по вертикали.</p>
65 .parent { height: 100px; display: table-cell; vertical-align: middle; border: 2px solid blue; } .child { border: 2px solid black; }<em>Изображение: Skillbox Media</em><p>Это довольно костыльный и не очень удобный способ. Так как ячейка находится вне таблицы, мы не можем корректно управлять её шириной. Для этого нужно создать родительский элемент со свойством display: table и задавать width уже внутри него.</p>
65 .parent { height: 100px; display: table-cell; vertical-align: middle; border: 2px solid blue; } .child { border: 2px solid black; }<em>Изображение: Skillbox Media</em><p>Это довольно костыльный и не очень удобный способ. Так как ячейка находится вне таблицы, мы не можем корректно управлять её шириной. Для этого нужно создать родительский элемент со свойством display: table и задавать width уже внутри него.</p>
66 <p>Чтобы поместить элемент по центру родительского блока (то есть выровнять одновременно по горизонтали и вертикали), иногда достаточно объединить под одним селектором методы горизонтального и вертикального центрирования.</p>
66 <p>Чтобы поместить элемент по центру родительского блока (то есть выровнять одновременно по горизонтали и вертикали), иногда достаточно объединить под одним селектором методы горизонтального и вертикального центрирования.</p>
67 <p>Во всех примерах мы будем использовать один и тот же HTML-код и получать один и тот же результат.</p>
67 <p>Во всех примерах мы будем использовать один и тот же HTML-код и получать один и тот же результат.</p>
68 &lt;div class="parent"&gt; &lt;div class="child"&gt;Блок с текстом&lt;/div&gt; &lt;/div&gt;<em>Изображение: Skillbox Media</em><p>Чтобы центрировать элемент с помощью Flexbox, достаточно объединить горизонтальный и вертикальный способы:</p>
68 &lt;div class="parent"&gt; &lt;div class="child"&gt;Блок с текстом&lt;/div&gt; &lt;/div&gt;<em>Изображение: Skillbox Media</em><p>Чтобы центрировать элемент с помощью Flexbox, достаточно объединить горизонтальный и вертикальный способы:</p>
69 .parent { height: 100px; display: flex; justify-content: center; align-items: center; border: 2px solid blue; } .child { border: 2px solid black; }<p>В этом случае нужно сделать всё то же, что и при вертикальным центрировании, но с двумя изменениями в стилях дочернего элемента:</p>
69 .parent { height: 100px; display: flex; justify-content: center; align-items: center; border: 2px solid blue; } .child { border: 2px solid black; }<p>В этом случае нужно сделать всё то же, что и при вертикальным центрировании, но с двумя изменениями в стилях дочернего элемента:</p>
70 <ul><li>добавить свойство left: 50%;</li>
70 <ul><li>добавить свойство left: 50%;</li>
71 <li>установить свойству transform значение translate (-50%, -50%).</li>
71 <li>установить свойству transform значение translate (-50%, -50%).</li>
72 </ul>.parent { height: 100px; position: relative; border: 2px solid blue; } .child { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border: 2px solid black; }<p>Этот способ похож на вёрстку флексами. Нужно установить в родительском элементе свойство display: grid - оно превратит его в grid-контейнер. А в дочернем задать автоматические отступы с помощью margin: auto.</p>
72 </ul>.parent { height: 100px; position: relative; border: 2px solid blue; } .child { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border: 2px solid black; }<p>Этот способ похож на вёрстку флексами. Нужно установить в родительском элементе свойство display: grid - оно превратит его в grid-контейнер. А в дочернем задать автоматические отступы с помощью margin: auto.</p>
73 .parent { height: 100px; display: grid; border: 2px solid blue; } .child { margin: auto; border: 2px solid black; }<p>Теперь рассмотрим частные случаи, как отцентрировать текст, заголовок, список, форму, блок, изображение и кнопку.</p>
73 .parent { height: 100px; display: grid; border: 2px solid blue; } .child { margin: auto; border: 2px solid black; }<p>Теперь рассмотрим частные случаи, как отцентрировать текст, заголовок, список, форму, блок, изображение и кнопку.</p>
74 <p>Самый простой способ выровнять текст по горизонтали - использовать свойство text-align: center.</p>
74 <p>Самый простой способ выровнять текст по горизонтали - использовать свойство text-align: center.</p>
75 <p>HTML:</p>
75 <p>HTML:</p>
76 &lt;p class="center-text"&gt;Абзац текста, горизонтально выровненный по центру&lt;/p&gt;<p>CSS:</p>
76 &lt;p class="center-text"&gt;Абзац текста, горизонтально выровненный по центру&lt;/p&gt;<p>CSS:</p>
77 .center-text { text-align: center; }<p>Результат:</p>
77 .center-text { text-align: center; }<p>Результат:</p>
78 <em>Изображение: Skillbox Media</em><p>Если добавить в абзаце автоматические отступы, то у текста как будто появятся границы, за которые он не будет выходить.</p>
78 <em>Изображение: Skillbox Media</em><p>Если добавить в абзаце автоматические отступы, то у текста как будто появятся границы, за которые он не будет выходить.</p>
79 <p>HTML:</p>
79 <p>HTML:</p>
80 &lt;p class="center-text"&gt;Абзац текста, выровненный по центру, ограниченный справа и слева&lt;/p&gt;<p>CSS:</p>
80 &lt;p class="center-text"&gt;Абзац текста, выровненный по центру, ограниченный справа и слева&lt;/p&gt;<p>CSS:</p>
81 .center-text { width: 100px; margin: auto; text-align: center; }<p>Результат:</p>
81 .center-text { width: 100px; margin: auto; text-align: center; }<p>Результат:</p>
82 <em>Изображение: Skillbox Media</em><p>При желании также можно использовать флексбоксы, но это менее удобно, потому что в таком случае придётся явно задавать родительский элемент.</p>
82 <em>Изображение: Skillbox Media</em><p>При желании также можно использовать флексбоксы, но это менее удобно, потому что в таком случае придётся явно задавать родительский элемент.</p>
83 <p>Все способы вертикального центрирования можно использовать и для выравнивания текста. В приведённых ниже примерах голубой рамкой выделены родительские элементы.</p>
83 <p>Все способы вертикального центрирования можно использовать и для выравнивания текста. В приведённых ниже примерах голубой рамкой выделены родительские элементы.</p>
84 <p><strong>Flexbox.</strong>В этом случае нужно задать стили только для родительского элемента, а для дочернего CSS-кода можно не писать.</p>
84 <p><strong>Flexbox.</strong>В этом случае нужно задать стили только для родительского элемента, а для дочернего CSS-кода можно не писать.</p>
85 <p>HTML:</p>
85 <p>HTML:</p>
86 &lt;main class="parent"&gt; &lt;p class="child"&gt;Абзац с текстом, вертикально выровненный по центру&lt;/p&gt; &lt;/main&gt;<p>CSS:</p>
86 &lt;main class="parent"&gt; &lt;p class="child"&gt;Абзац с текстом, вертикально выровненный по центру&lt;/p&gt; &lt;/main&gt;<p>CSS:</p>
87 .parent { height: 100px; display: flex; align-items: center; border: 2px solid blue; }<p>Результат:</p>
87 .parent { height: 100px; display: flex; align-items: center; border: 2px solid blue; }<p>Результат:</p>
88 <em>Изображение: Skillbox Media</em><p><strong>Позиционирование.</strong>Если применить к элементу &lt;p&gt; свойства position и transform, позиционирование будет работать некорректно из-за того, что по умолчанию у него есть отступы. Решить это можно двумя путями.</p>
88 <em>Изображение: Skillbox Media</em><p><strong>Позиционирование.</strong>Если применить к элементу &lt;p&gt; свойства position и transform, позиционирование будет работать некорректно из-за того, что по умолчанию у него есть отступы. Решить это можно двумя путями.</p>
89 <p>Первый (рекомендуемый) - убрать из абзаца отступ свойством margin: 0.</p>
89 <p>Первый (рекомендуемый) - убрать из абзаца отступ свойством margin: 0.</p>
90 <p>HTML:</p>
90 <p>HTML:</p>
91 &lt;main class="parent"&gt; &lt;p class="child"&gt;Абзац с текстом, вертикально выровненный по центру&lt;/p&gt; &lt;/main&gt;<p>CSS:</p>
91 &lt;main class="parent"&gt; &lt;p class="child"&gt;Абзац с текстом, вертикально выровненный по центру&lt;/p&gt; &lt;/main&gt;<p>CSS:</p>
92 .parent { height: 100px; position: relative; border: 2px solid blue; } .child { position: absolute; top: 50%; transform: translate(0, -50%); margin: 0; }<p>Второй - применить стиль дочернего элемента к тегу &lt;span&gt; внутри &lt;p&gt;.</p>
92 .parent { height: 100px; position: relative; border: 2px solid blue; } .child { position: absolute; top: 50%; transform: translate(0, -50%); margin: 0; }<p>Второй - применить стиль дочернего элемента к тегу &lt;span&gt; внутри &lt;p&gt;.</p>
93 <p>HTML:</p>
93 <p>HTML:</p>
94 &lt;main class="parent"&gt; &lt;p&gt;&lt;span class="child"&gt;Абзац с текстом, вертикально выровненный по центру&lt;/span&gt;&lt;/p&gt; &lt;/main&gt;<p>CSS:</p>
94 &lt;main class="parent"&gt; &lt;p&gt;&lt;span class="child"&gt;Абзац с текстом, вертикально выровненный по центру&lt;/span&gt;&lt;/p&gt; &lt;/main&gt;<p>CSS:</p>
95 .parent { height: 100px; position: relative; border: 2px solid blue; } .child { position: absolute; top: 50%; transform: translate(0, -50%);<p>При обоих путях результат будет один и тот же:</p>
95 .parent { height: 100px; position: relative; border: 2px solid blue; } .child { position: absolute; top: 50%; transform: translate(0, -50%);<p>При обоих путях результат будет один и тот же:</p>
96 <em>Изображение: Skillbox Media</em><p><strong>Ячейки таблицы.</strong>Здесь так же, как и в случае с флексбоксами, нужно задать стиль только для родительского элемента.</p>
96 <em>Изображение: Skillbox Media</em><p><strong>Ячейки таблицы.</strong>Здесь так же, как и в случае с флексбоксами, нужно задать стиль только для родительского элемента.</p>
97 <p>HTML:</p>
97 <p>HTML:</p>
98 &lt;main class="parent"&gt; &lt;p&gt;Абзац с текстом, вертикально выровненный по центру &lt;/main&gt;<p>CSS:</p>
98 &lt;main class="parent"&gt; &lt;p&gt;Абзац с текстом, вертикально выровненный по центру &lt;/main&gt;<p>CSS:</p>
99 .parent { height: 100px; display: table-cell; vertical-align: middle; border: 2px solid blue; }<p>Результат:</p>
99 .parent { height: 100px; display: table-cell; vertical-align: middle; border: 2px solid blue; }<p>Результат:</p>
100 <em>Изображение: Skillbox Media</em><p>К заголовкам, спискам и формам применяются все те же способы позиционирования по центру, что и к обычному тексту: как по горизонтали, так и по вертикали.</p>
100 <em>Изображение: Skillbox Media</em><p>К заголовкам, спискам и формам применяются все те же способы позиционирования по центру, что и к обычному тексту: как по горизонтали, так и по вертикали.</p>
101 <p>Единственная особенность списков - их родителю не стоит присваивать свойство text-align: center. Выглядеть это будет плохо, можете убедиться в этом на следующем примере.</p>
101 <p>Единственная особенность списков - их родителю не стоит присваивать свойство text-align: center. Выглядеть это будет плохо, можете убедиться в этом на следующем примере.</p>
102 <p>HTML:</p>
102 <p>HTML:</p>
103 &lt;div class="parent"&gt; &lt;ul&gt; &lt;li&gt;Первый пункт&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Первый подпункт&lt;/li&gt; &lt;li&gt;Второй подпункт&lt;/li&gt; &lt;/ul&gt; &lt;li&gt;Второй пункт&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt;<p>CSS:</p>
103 &lt;div class="parent"&gt; &lt;ul&gt; &lt;li&gt;Первый пункт&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Первый подпункт&lt;/li&gt; &lt;li&gt;Второй подпункт&lt;/li&gt; &lt;/ul&gt; &lt;li&gt;Второй пункт&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt;<p>CSS:</p>
104 .parent { text-align: center; border: 2px solid blue; }<p>Результат:</p>
104 .parent { text-align: center; border: 2px solid blue; }<p>Результат:</p>
105 <em>Изображение: Skillbox Media</em><p>Когда мы рассказывали о способах выравнивания элементов, приводили примеры именно на блоках. Поэтому, если вы ищете ответ на этот вопрос, перейдите в один из предыдущих разделов:</p>
105 <em>Изображение: Skillbox Media</em><p>Когда мы рассказывали о способах выравнивания элементов, приводили примеры именно на блоках. Поэтому, если вы ищете ответ на этот вопрос, перейдите в один из предыдущих разделов:</p>
106 <ul><li><a>Горизонтальное центрирование</a></li>
106 <ul><li><a>Горизонтальное центрирование</a></li>
107 <li><a>Вертикальное центрирование</a></li>
107 <li><a>Вертикальное центрирование</a></li>
108 <li><a>Выравнивание по центру</a></li>
108 <li><a>Выравнивание по центру</a></li>
109 </ul><p>Чтобы поставить блок в центре веб-страницы, можно использовать любой из <a>перечисленных выше способов</a>. Однако будет два различия:</p>
109 </ul><p>Чтобы поставить блок в центре веб-страницы, можно использовать любой из <a>перечисленных выше способов</a>. Однако будет два различия:</p>
110 <ul><li>в качестве родительского элемента выступает всё тело веб-страницы (элемент &lt;body&gt;);</li>
110 <ul><li>в качестве родительского элемента выступает всё тело веб-страницы (элемент &lt;body&gt;);</li>
111 <li>необязательно явно указывать высоту блока.</li>
111 <li>необязательно явно указывать высоту блока.</li>
112 </ul><p>Во всех примерах результат будет одинаковым. Как и раньше, голубую и чёрную рамку используем для наглядности.</p>
112 </ul><p>Во всех примерах результат будет одинаковым. Как и раньше, голубую и чёрную рамку используем для наглядности.</p>
113 <em>Изображение: Skillbox Media</em><p><strong>Flexbox.</strong>Недостаток этого подхода в том, что такая страница будет выравнивать по центру все элементы внутри себя, а не только те, которые нам нужны.</p>
113 <em>Изображение: Skillbox Media</em><p><strong>Flexbox.</strong>Недостаток этого подхода в том, что такая страница будет выравнивать по центру все элементы внутри себя, а не только те, которые нам нужны.</p>
114 <p>HTML:</p>
114 <p>HTML:</p>
115 &lt;body&gt; &lt;div&gt;Блок посередине&lt;/div&gt; &lt;/body&gt;<p>CSS:</p>
115 &lt;body&gt; &lt;div&gt;Блок посередине&lt;/div&gt; &lt;/body&gt;<p>CSS:</p>
116 body { display: flex; align-items: center; justify-content: center; border: 2px solid blue; }<p><strong>Позиционирование.</strong>Дополнительное отличие от <a>описанного выше способа</a>в том, что не нужно указывать свойство position: relative - ведь расположение &lt;body&gt; не зависит ни от каких других элементов.</p>
116 body { display: flex; align-items: center; justify-content: center; border: 2px solid blue; }<p><strong>Позиционирование.</strong>Дополнительное отличие от <a>описанного выше способа</a>в том, что не нужно указывать свойство position: relative - ведь расположение &lt;body&gt; не зависит ни от каких других элементов.</p>
117 <p>В итоге для родительского элемента не нужно писать никаких свойств - достаточно задать их только тому блоку, который мы хотим разместить по центру.</p>
117 <p>В итоге для родительского элемента не нужно писать никаких свойств - достаточно задать их только тому блоку, который мы хотим разместить по центру.</p>
118 <p>HTML:</p>
118 <p>HTML:</p>
119 &lt;body&gt; &lt;div class="block"&gt;Блок посередине&lt;/div&gt; &lt;/body&gt;<p>CSS:</p>
119 &lt;body&gt; &lt;div class="block"&gt;Блок посередине&lt;/div&gt; &lt;/body&gt;<p>CSS:</p>
120 body { border: 2px solid blue; } .block { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border: 2px solid black; }<p><strong>Grid.</strong>Здесь мы задаём свойства как родительскому, так и дочернему элементу.</p>
120 body { border: 2px solid blue; } .block { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border: 2px solid black; }<p><strong>Grid.</strong>Здесь мы задаём свойства как родительскому, так и дочернему элементу.</p>
121 <p>HTML:</p>
121 <p>HTML:</p>
122 &lt;body&gt; &lt;div class="block"&gt;Блок посередине&lt;/div&gt; &lt;/body&gt;<p>CSS:</p>
122 &lt;body&gt; &lt;div class="block"&gt;Блок посередине&lt;/div&gt; &lt;/body&gt;<p>CSS:</p>
123 body { display: grid; border: 2px solid blue; } .block { margin: auto; border: 2px solid black; }<p>Центрирование изображений &lt;img&gt; и кнопок &lt;button&gt; в CSS работает почти так же, как и с блоками. В большинстве случаев вы можете просто использовать те же методы, о которых мы рассказывали ранее:</p>
123 body { display: grid; border: 2px solid blue; } .block { margin: auto; border: 2px solid black; }<p>Центрирование изображений &lt;img&gt; и кнопок &lt;button&gt; в CSS работает почти так же, как и с блоками. В большинстве случаев вы можете просто использовать те же методы, о которых мы рассказывали ранее:</p>
124 <ul><li>для<a>горизонтального центрирования</a> (кроме автоотступов);</li>
124 <ul><li>для<a>горизонтального центрирования</a> (кроме автоотступов);</li>
125 <li>для<a>вертикального центрирования</a>(кроме некоторых случаев во флексбоксах);</li>
125 <li>для<a>вертикального центрирования</a>(кроме некоторых случаев во флексбоксах);</li>
126 <li>для<a>выравнивания посередине</a>(кроме некоторых случаев во флексбоксах).</li>
126 <li>для<a>выравнивания посередине</a>(кроме некоторых случаев во флексбоксах).</li>
127 </ul><p>Если вы выравниваете картинку или кнопку по горизонтали с помощью<a>автоотступов</a>, добавьте ей свойство display: block, чтобы она вела себя как блок.</p>
127 </ul><p>Если вы выравниваете картинку или кнопку по горизонтали с помощью<a>автоотступов</a>, добавьте ей свойство display: block, чтобы она вела себя как блок.</p>
128 <p>HTML:</p>
128 <p>HTML:</p>
129 &lt;img src="https://skillbox.ru/local/templates/media/images/common/menu-icon-3.svg"&gt;<p>CSS:</p>
129 &lt;img src="https://skillbox.ru/local/templates/media/images/common/menu-icon-3.svg"&gt;<p>CSS:</p>
130 &lt;img src="https://skillbox.ru/local/templates/media/images/commonimg { height:150px; display: block; margin: auto; }/menu-icon-3.svg"&gt;<p>Результат:</p>
130 &lt;img src="https://skillbox.ru/local/templates/media/images/commonimg { height:150px; display: block; margin: auto; }/menu-icon-3.svg"&gt;<p>Результат:</p>
131 <em>Изображение: Skillbox Media</em><p>При выравнивании с помощью<a>Flexbox</a>изображения или кнопки могут вести себя необычно. Вот в каких случаях это происходит:</p>
131 <em>Изображение: Skillbox Media</em><p>При выравнивании с помощью<a>Flexbox</a>изображения или кнопки могут вести себя необычно. Вот в каких случаях это происходит:</p>
132 <ul><li>задана высота родительского блока;</li>
132 <ul><li>задана высота родительского блока;</li>
133 <li>не заданы размеры картинки;</li>
133 <li>не заданы размеры картинки;</li>
134 <li>не указано свойство align-items.</li>
134 <li>не указано свойство align-items.</li>
135 </ul><p>При выполнении всех трёх условий изображение или кнопка растянутся, чтобы занять всё пространство родительского элемента - от верхней границы до нижней.</p>
135 </ul><p>При выполнении всех трёх условий изображение или кнопка растянутся, чтобы занять всё пространство родительского элемента - от верхней границы до нижней.</p>
136 <p>CSS:</p>
136 <p>CSS:</p>
137 .parent { height: 300px; display: flex; justify-content: center; border: 2px solid blue; }<p>HTML:</p>
137 .parent { height: 300px; display: flex; justify-content: center; border: 2px solid blue; }<p>HTML:</p>
138 &lt;div class="parent"&gt; &lt;img src="https://skillbox.ru/local/templates/media/images/common/menu-icon-3.svg"&gt; &lt;/div&gt;<p>Результат:</p>
138 &lt;div class="parent"&gt; &lt;img src="https://skillbox.ru/local/templates/media/images/common/menu-icon-3.svg"&gt; &lt;/div&gt;<p>Результат:</p>
139 Стандартный размер этого изображения - 17 на 24 пикселя. Но здесь оно автоматически растянулось<em>Изображение: Skillbox Media</em><p>В остальных случаях флексбоксы будут работать так же, как и с блочными элементами.</p>
139 Стандартный размер этого изображения - 17 на 24 пикселя. Но здесь оно автоматически растянулось<em>Изображение: Skillbox Media</em><p>В остальных случаях флексбоксы будут работать так же, как и с блочными элементами.</p>
140 <p>Основная сложность при выравнивании элементов веб-страницы по центру - обилие подходов, у каждого из которых свои тонкости и ограничения:</p>
140 <p>Основная сложность при выравнивании элементов веб-страницы по центру - обилие подходов, у каждого из которых свои тонкости и ограничения:</p>
141 <ul><li>Flexbox удобен для любого вида выравнивания. При таком подходе необходимо задавать стили только родительскому элементу.</li>
141 <ul><li>Flexbox удобен для любого вида выравнивания. При таком подходе необходимо задавать стили только родительскому элементу.</li>
142 <li>Позиционирование можно использовать для выравнивания по вертикали и размещения элемента по центру блока (выравнивания по вертикали и горизонтали одновременно).</li>
142 <li>Позиционирование можно использовать для выравнивания по вертикали и размещения элемента по центру блока (выравнивания по вертикали и горизонтали одновременно).</li>
143 <li>Автоотступы и inline-блоки удобно использовать для горизонтального выравнивания, ячейки таблицы - для вертикального, Grid - для размещения элемента по центру родительского блока.</li>
143 <li>Автоотступы и inline-блоки удобно использовать для горизонтального выравнивания, ячейки таблицы - для вертикального, Grid - для размещения элемента по центру родительского блока.</li>
144 </ul><a>Курс с трудоустройством: "Профессия Фронтенд-разработчик + ИИ" Узнать о курсе</a>
144 </ul><a>Курс с трудоустройством: "Профессия Фронтенд-разработчик + ИИ" Узнать о курсе</a>