HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Блочная модель - правила, по которым браузер определяет размер элемента на странице, его ширину и высоту. В этом уроке рассмотрим все правила, которые влияют на блочную модель и научимся менять саму логику расчета размеров элемента.</p>
1 <p>Блочная модель - правила, по которым браузер определяет размер элемента на странице, его ширину и высоту. В этом уроке рассмотрим все правила, которые влияют на блочную модель и научимся менять саму логику расчета размеров элемента.</p>
2 <p>Вспомним, какие свойства отвечают за ширину и высоту блока:</p>
2 <p>Вспомним, какие свойства отвечают за ширину и высоту блока:</p>
3 <ul><li>Внутренние отступы. В CSS за их установку отвечает свойство padding</li>
3 <ul><li>Внутренние отступы. В CSS за их установку отвечает свойство padding</li>
4 <li>Границы, устанавливающиеся свойством border</li>
4 <li>Границы, устанавливающиеся свойством border</li>
5 <li>Внешние отступы. За них отвечает свойство margin</li>
5 <li>Внешние отступы. За них отвечает свойство margin</li>
6 <li>Высота и ширина блока, устанавливаемые свойствами height и width</li>
6 <li>Высота и ширина блока, устанавливаемые свойствами height и width</li>
7 </ul><p>Реальный размер элемента получится при сложении значений всех этих свойств. Рассмотрим их.</p>
7 </ul><p>Реальный размер элемента получится при сложении значений всех этих свойств. Рассмотрим их.</p>
8 <h2>Внутренние и внешние отступы</h2>
8 <h2>Внутренние и внешние отступы</h2>
9 <p>По своим значениям, свойства margin и padding достаточно похожи, за исключением того, "куда" устанавливаются отступы. padding делает отступы<em>внутри</em>элемента, тем самым увеличивая его в размерах</p>
9 <p>По своим значениям, свойства margin и padding достаточно похожи, за исключением того, "куда" устанавливаются отступы. padding делает отступы<em>внутри</em>элемента, тем самым увеличивая его в размерах</p>
10 <p><a>Codepen</a></p>
10 <p><a>Codepen</a></p>
11 <p>В качестве значения свойство padding принимает четыре числа в следующей последовательности:</p>
11 <p>В качестве значения свойство padding принимает четыре числа в следующей последовательности:</p>
12 <ul><li>отступ сверху. Можно установить отдельно свойством padding-top.</li>
12 <ul><li>отступ сверху. Можно установить отдельно свойством padding-top.</li>
13 <li>отступ справа. Можно установить отдельно свойством padding-right.</li>
13 <li>отступ справа. Можно установить отдельно свойством padding-right.</li>
14 <li>отступ снизу. Можно установить отдельно свойством padding-bottom.</li>
14 <li>отступ снизу. Можно установить отдельно свойством padding-bottom.</li>
15 <li>отступ слева. Можно установить отдельно свойством padding-left.</li>
15 <li>отступ слева. Можно установить отдельно свойством padding-left.</li>
16 </ul><p>Если внимательно посмотреть на пример выше, то можно заметить, что в качестве значения свойства padding использовалось только одно значение, а не четыре. Свойство padding может принимать несколько разных вариаций сокращенных записей:</p>
16 </ul><p>Если внимательно посмотреть на пример выше, то можно заметить, что в качестве значения свойства padding использовалось только одно значение, а не четыре. Свойство padding может принимать несколько разных вариаций сокращенных записей:</p>
17 <ul><li>Одно значение - устанавливает одинаковый отступ по всем сторонам сразу. Например, padding: 20px установит внутренний отступ в<em>20px</em>сверху/справа/снизу/слева.</li>
17 <ul><li>Одно значение - устанавливает одинаковый отступ по всем сторонам сразу. Например, padding: 20px установит внутренний отступ в<em>20px</em>сверху/справа/снизу/слева.</li>
18 <li>Два значения - устанавливает отступы по вертикали и горизонтали. Например, padding: 20px 30px установит внутренний отступ в<em>20px</em>сверху/снизу и<em>30px</em>справа/слева.</li>
18 <li>Два значения - устанавливает отступы по вертикали и горизонтали. Например, padding: 20px 30px установит внутренний отступ в<em>20px</em>сверху/снизу и<em>30px</em>справа/слева.</li>
19 <li>Три значения - устанавливает отступы сверху, по горизонтали и снизу. Например, padding: 20px 30px 40px установит внутренний отступ в<em>20px</em>сверху,<em>30px</em>справа/слева и<em>40px</em>снизу.</li>
19 <li>Три значения - устанавливает отступы сверху, по горизонтали и снизу. Например, padding: 20px 30px 40px установит внутренний отступ в<em>20px</em>сверху,<em>30px</em>справа/слева и<em>40px</em>снизу.</li>
20 </ul><p><a>Codepen</a></p>
20 </ul><p><a>Codepen</a></p>
21 <p>Все те же самые значения и сокращения используются для свойства margin, которое устанавливает внешние отступы.</p>
21 <p>Все те же самые значения и сокращения используются для свойства margin, которое устанавливает внешние отступы.</p>
22 <p>Свойство margin не влияет на видимые размеры элементов, но на место отступов не смогут встать другие элементы, поэтому оно входит в формирование общего размера</p>
22 <p>Свойство margin не влияет на видимые размеры элементов, но на место отступов не смогут встать другие элементы, поэтому оно входит в формирование общего размера</p>
23 <p><a>Codepen</a></p>
23 <p><a>Codepen</a></p>
24 <p>Сейчас использование этих свойств может показаться не таким очевидным, но впереди вас ждет множество упражнений, в которых будут использоваться эти свойства.</p>
24 <p>Сейчас использование этих свойств может показаться не таким очевидным, но впереди вас ждет множество упражнений, в которых будут использоваться эти свойства.</p>
25 <p>Заметьте, что отступ между вторым и третьим элементом всего 40 пикселей, а не 60, как могло бы подуматься, ведь используется нижний отступ в 40 пикселей от второго элемента и 20 пикселей сверху от третьего. При этом внешние отступы не сложились, а был выбран наибольший из них.</p>
25 <p>Заметьте, что отступ между вторым и третьим элементом всего 40 пикселей, а не 60, как могло бы подуматься, ведь используется нижний отступ в 40 пикселей от второго элемента и 20 пикселей сверху от третьего. При этом внешние отступы не сложились, а был выбран наибольший из них.</p>
26 <p>Этот эффект называется<em>схлопыванием внешних отступов</em>- если внешние отступы двух соседних элементов накладываются, то будет выбран тот, который больше. Схлопывание отступов происходит только по вертикали.</p>
26 <p>Этот эффект называется<em>схлопыванием внешних отступов</em>- если внешние отступы двух соседних элементов накладываются, то будет выбран тот, который больше. Схлопывание отступов происходит только по вертикали.</p>
27 <p>Также свойство margin используется для приема центрирования элементов по горизонтали. Прием заключается в установлении автоматических отступов для свойств margin-left и margin-right. Если блок, для которого установлены эти свойства обладает заданной шириной, то браузер автоматически сделает отступы слева и справа так, что блок встанет по центру. Этот прием повсеместно используется в верстке и вы часто будете его использовать при создании макетов.</p>
27 <p>Также свойство margin используется для приема центрирования элементов по горизонтали. Прием заключается в установлении автоматических отступов для свойств margin-left и margin-right. Если блок, для которого установлены эти свойства обладает заданной шириной, то браузер автоматически сделает отступы слева и справа так, что блок встанет по центру. Этот прием повсеместно используется в верстке и вы часто будете его использовать при создании макетов.</p>
28 <p><a>Codepen</a></p>
28 <p><a>Codepen</a></p>
29 <p>Для этого приёма важно, чтобы блок имел свойство ширины.</p>
29 <p>Для этого приёма важно, чтобы блок имел свойство ширины.</p>
30 <h2>Границы</h2>
30 <h2>Границы</h2>
31 <p>Видимые границы элемента можно задать одним из двух свойств:</p>
31 <p>Видимые границы элемента можно задать одним из двух свойств:</p>
32 <ul><li>border</li>
32 <ul><li>border</li>
33 <li>outline</li>
33 <li>outline</li>
34 </ul><p>Различие свойств в поведении:</p>
34 </ul><p>Различие свойств в поведении:</p>
35 <ul><li>border прямо влияет на блочную модель и размеры элемента</li>
35 <ul><li>border прямо влияет на блочную модель и размеры элемента</li>
36 <li>outline рисует границу "поверх" элемента и не влияет на его размеры</li>
36 <li>outline рисует границу "поверх" элемента и не влияет на его размеры</li>
37 </ul><p>Их синтаксис похож, поэтому разберем только свойство border, которое является обобщенным для трех свойств:</p>
37 </ul><p>Их синтаксис похож, поэтому разберем только свойство border, которое является обобщенным для трех свойств:</p>
38 <ul><li>border-width - ширина границы</li>
38 <ul><li>border-width - ширина границы</li>
39 <li>border-style - тип границы</li>
39 <li>border-style - тип границы</li>
40 <li>border-color - цвет границы</li>
40 <li>border-color - цвет границы</li>
41 </ul><p>Свойство border-width тоже сокращенное, что может сводить с ума. Если указано одно значение, то ширина устанавливается для всех сторон одновременно, что в большинстве случаев достаточно. Сокращения же повторяют сокращения свойств margin и padding:</p>
41 </ul><p>Свойство border-width тоже сокращенное, что может сводить с ума. Если указано одно значение, то ширина устанавливается для всех сторон одновременно, что в большинстве случаев достаточно. Сокращения же повторяют сокращения свойств margin и padding:</p>
42 <p>Границы могут быть разного типа: сплошные, пунктирные и т.д. За определение типа границы отвечает свойство border-style, которое может принимать одно из значений:</p>
42 <p>Границы могут быть разного типа: сплошные, пунктирные и т.д. За определение типа границы отвечает свойство border-style, которое может принимать одно из значений:</p>
43 <ul><li>dotted</li>
43 <ul><li>dotted</li>
44 <li>dashed</li>
44 <li>dashed</li>
45 <li>solid</li>
45 <li>solid</li>
46 <li>double</li>
46 <li>double</li>
47 <li>groove</li>
47 <li>groove</li>
48 <li>ridge</li>
48 <li>ridge</li>
49 <li>inset</li>
49 <li>inset</li>
50 <li>outset</li>
50 <li>outset</li>
51 <li>none - отсутствие типа границ. Можно назвать это удалением границы</li>
51 <li>none - отсутствие типа границ. Можно назвать это удалением границы</li>
52 </ul><p>Здесь работает принцип: "лучше один раз увидеть, чем сто раз услышать"</p>
52 </ul><p>Здесь работает принцип: "лучше один раз увидеть, чем сто раз услышать"</p>
53 <p><a>Codepen</a></p>
53 <p><a>Codepen</a></p>
54 <p>Последнее свойство - border-color, которое устанавливает цвет границы. Вы можете использовать инструмент разработчика<em>DevTools</em>или специальные сайты, где дается возможность выбрать цвет и получить его<em>hex</em>значение. Ссылка на один из таких сайтов будет в конце урока.</p>
54 <p>Последнее свойство - border-color, которое устанавливает цвет границы. Вы можете использовать инструмент разработчика<em>DevTools</em>или специальные сайты, где дается возможность выбрать цвет и получить его<em>hex</em>значение. Ссылка на один из таких сайтов будет в конце урока.</p>
55 <p>Зная все основные свойства, можно объединить их единым свойством border и записать значения границы, используя только его. Порядок указания не имеет значения, но обычно свойства указывают в той последовательности, в которой они были изучены: border: border-width border-style border-color.</p>
55 <p>Зная все основные свойства, можно объединить их единым свойством border и записать значения границы, используя только его. Порядок указания не имеет значения, но обычно свойства указывают в той последовательности, в которой они были изучены: border: border-width border-style border-color.</p>
56 <h2>Изменение блочной модели</h2>
56 <h2>Изменение блочной модели</h2>
57 <p>На<em>видимый</em>размер элемента влияют следующие свойства:</p>
57 <p>На<em>видимый</em>размер элемента влияют следующие свойства:</p>
58 <ul><li>width</li>
58 <ul><li>width</li>
59 <li>height</li>
59 <li>height</li>
60 <li>padding</li>
60 <li>padding</li>
61 <li>border</li>
61 <li>border</li>
62 </ul><p>Например, итоговая ширина элемента получается из складывания ширины (свойство width), левого и правого внутреннего отступа (свойства padding-left/padding-right), левой и правой границы (свойства border-left/border-right).</p>
62 </ul><p>Например, итоговая ширина элемента получается из складывания ширины (свойство width), левого и правого внутреннего отступа (свойства padding-left/padding-right), левой и правой границы (свойства border-left/border-right).</p>
63 <p>Такое поведение может вставлять палки в колеса, ведь задавая ширину элементу хочется ожидать, что она такой и будет, а не будет дополнительного сложения с другими свойствами. CSS может изменить это поведение и не давать изменять ширину другими свойствами.</p>
63 <p>Такое поведение может вставлять палки в колеса, ведь задавая ширину элементу хочется ожидать, что она такой и будет, а не будет дополнительного сложения с другими свойствами. CSS может изменить это поведение и не давать изменять ширину другими свойствами.</p>
64 <p>Таким свойством является box-sizing. Его роль - определить, будут ли влиять свойства padding/border на формирование конечного размера элемента. Свойство принимает одно из двух значений:</p>
64 <p>Таким свойством является box-sizing. Его роль - определить, будут ли влиять свойства padding/border на формирование конечного размера элемента. Свойство принимает одно из двух значений:</p>
65 <ul><li>content-box - значение по умолчанию. Значения padding и border<strong>будут добавлены</strong>к ширине и высоте блока</li>
65 <ul><li>content-box - значение по умолчанию. Значения padding и border<strong>будут добавлены</strong>к ширине и высоте блока</li>
66 <li>border-box - Значения padding и border<strong>не будут добавлены</strong>к ширине и высоте блока. Ширина и высота блока определяются только контентом внутри или значениями width/height</li>
66 <li>border-box - Значения padding и border<strong>не будут добавлены</strong>к ширине и высоте блока. Ширина и высота блока определяются только контентом внутри или значениями width/height</li>
67 </ul><p>Когда вы будете изучать верстку различных сайтов, то часто будете встречать вот такую запись в CSS:</p>
67 </ul><p>Когда вы будете изучать верстку различных сайтов, то часто будете встречать вот такую запись в CSS:</p>
68 <p>Это правило означает, что все элементы в HTML не будут добавлять внутренние отступы и границы к итоговым ширине и высоте</p>
68 <p>Это правило означает, что все элементы в HTML не будут добавлять внутренние отступы и границы к итоговым ширине и высоте</p>
69 <h2>Изменение типа отображения элемента</h2>
69 <h2>Изменение типа отображения элемента</h2>
70 <p>HTML элементы можно поделить на несколько условных групп:</p>
70 <p>HTML элементы можно поделить на несколько условных групп:</p>
71 <ul><li>Блочные</li>
71 <ul><li>Блочные</li>
72 <li>Строчные</li>
72 <li>Строчные</li>
73 </ul><p>На самом деле вариантов намного больше и со многими вы познакомитесь в процессе изучения курсов, но сейчас важно уметь изменять тип элемента.</p>
73 </ul><p>На самом деле вариантов намного больше и со многими вы познакомитесь в процессе изучения курсов, но сейчас важно уметь изменять тип элемента.</p>
74 <p>Для изменения типа отображения элемента используется свойство display. В качестве значения принимается тип отображения элемента: блочный, строчный, flex-контейнер, с которым вы скоро познакомитесь, и множество других значений. В этом уроке остановимся на трех:</p>
74 <p>Для изменения типа отображения элемента используется свойство display. В качестве значения принимается тип отображения элемента: блочный, строчный, flex-контейнер, с которым вы скоро познакомитесь, и множество других значений. В этом уроке остановимся на трех:</p>
75 <ul><li>block</li>
75 <ul><li>block</li>
76 <li>inline</li>
76 <li>inline</li>
77 <li>inline-block</li>
77 <li>inline-block</li>
78 </ul><p>Эти значения уже встречались вам, даже если это незаметно. Каждый HTML элемент, по умолчанию, имеет установленное свойство display, например:</p>
78 </ul><p>Эти значения уже встречались вам, даже если это незаметно. Каждый HTML элемент, по умолчанию, имеет установленное свойство display, например:</p>
79 <ul><li>&lt;p&gt;, &lt;div&gt;, &lt;section&gt;, &lt;ul&gt; - имеют значение block</li>
79 <ul><li>&lt;p&gt;, &lt;div&gt;, &lt;section&gt;, &lt;ul&gt; - имеют значение block</li>
80 <li>&lt;span&gt;, &lt;strong&gt;, &lt;a&gt; - имеют значение inline</li>
80 <li>&lt;span&gt;, &lt;strong&gt;, &lt;a&gt; - имеют значение inline</li>
81 </ul><p>Эти значения можно менять по своему усмотрению. Например, в определенном макете или на определенном разрешении необходимо &lt;span&gt; сделать блочным элементом. Для этого достаточно изменить одно свойство:</p>
81 </ul><p>Эти значения можно менять по своему усмотрению. Например, в определенном макете или на определенном разрешении необходимо &lt;span&gt; сделать блочным элементом. Для этого достаточно изменить одно свойство:</p>
82 <p>Можно проделать и обратную операцию - превратить блочный элемент в строчный, тогда используется значение inline</p>
82 <p>Можно проделать и обратную операцию - превратить блочный элемент в строчный, тогда используется значение inline</p>
83 <p>Поведение блоков будет таким, как уже было изучено: блочные элементы будут занимать всю доступную ширину, а строчные в зависимости от контента внутри, причем тип тега уже не будет играть роли.</p>
83 <p>Поведение блоков будет таким, как уже было изучено: блочные элементы будут занимать всю доступную ширину, а строчные в зависимости от контента внутри, причем тип тега уже не будет играть роли.</p>
84 <p>Интересным значением является inline-block. По его названию кажется, что это одновременно и блочный и строчный элемент, но это не так. Такое отображение создает совершенно новый тип элемента, который еще не встречался. Очень подробно про него можно прочитать в статье, которая указана в конце урока. Если вы хотите глубже в этом разобраться, то рекомендуем ознакомиться с ней.</p>
84 <p>Интересным значением является inline-block. По его названию кажется, что это одновременно и блочный и строчный элемент, но это не так. Такое отображение создает совершенно новый тип элемента, который еще не встречался. Очень подробно про него можно прочитать в статье, которая указана в конце урока. Если вы хотите глубже в этом разобраться, то рекомендуем ознакомиться с ней.</p>
85 <p>А что же в практическом плане дает значение inline-block?</p>
85 <p>А что же в практическом плане дает значение inline-block?</p>
86 <ol><li>В отличие от inline есть возможность использовать свойства width и height. Обычный строчный элемент игнорирует эти свойства, так как размер определяется контентом внутри и не может быть изменен с помощью CSS</li>
86 <ol><li>В отличие от inline есть возможность использовать свойства width и height. Обычный строчный элемент игнорирует эти свойства, так как размер определяется контентом внутри и не может быть изменен с помощью CSS</li>
87 <li>На такой элемент свойства margin/padding/border применяются как на обычный блочный элемент</li>
87 <li>На такой элемент свойства margin/padding/border применяются как на обычный блочный элемент</li>
88 <li>В отличие от блочного элемента его могут "обтекать" другие элементы, то есть он может вести себя как обычный inline элемент</li>
88 <li>В отличие от блочного элемента его могут "обтекать" другие элементы, то есть он может вести себя как обычный inline элемент</li>
89 </ol><p><a>Codepen</a></p>
89 </ol><p><a>Codepen</a></p>
90 <p><strong>Важно:</strong>на inline-block элемент действуют все свойства шрифта, в том числе и межстрочный интервал. Это может приводить к дополнительным отступам, которые не ожидаются у элемента. Подробнее о межстрочном интервале будет в будущих уроках</p>
90 <p><strong>Важно:</strong>на inline-block элемент действуют все свойства шрифта, в том числе и межстрочный интервал. Это может приводить к дополнительным отступам, которые не ожидаются у элемента. Подробнее о межстрочном интервале будет в будущих уроках</p>