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><p>, <div>, <section>, <ul> - имеют значение block</li>
79
<ul><li><p>, <div>, <section>, <ul> - имеют значение block</li>
80
<li><span>, <strong>, <a> - имеют значение inline</li>
80
<li><span>, <strong>, <a> - имеют значение inline</li>
81
</ul><p>Эти значения можно менять по своему усмотрению. Например, в определенном макете или на определенном разрешении необходимо <span> сделать блочным элементом. Для этого достаточно изменить одно свойство:</p>
81
</ul><p>Эти значения можно менять по своему усмотрению. Например, в определенном макете или на определенном разрешении необходимо <span> сделать блочным элементом. Для этого достаточно изменить одно свойство:</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>