Блочная модель
Размеры элемента = размеры вложенного контента + padding + border
Также на расположение элемента в потоке влияют внешние отступы (margin) и позиционирование.
Ширина, высота
Если у элемента есть вложенный контент (например текста), то он будет отталивать дочерние элементы своими размерами.
Высота, минимальная и максимальная высота. По умолчанию auto.
min-height: 20px;
height: 100%;
max-width: 200px;
Ширина, минимальная и максимальная ширина. По умолчанию auto.
min-width: 30%;
width: 100px;
max-width: 40%;
Внутренние отступы (padding)
Горизонтальные и вертикальные - складываются. По умолчанию 0.
padding-left: 5px;
padding-top: 6px;
padding-right: 7px;
padding-bottom: 8px;
/* shortcut */
padding: 5px 6px 7px 8px;
padding-left: 5px;
padding-top: 5px;
padding-right: 10px;
padding-bottom: 10px;
/* shortcut */
padding: 5px 10px;
Внешние (margin)
Горизонтальные - складываются. Вертикальные - больший из двух. По умолчанию 0.
margin-left: 5px;
margin-top: 6px;
margin-right: 7px;
margin-bottom: 8px;
/* shortcut */
margin: 5px 6px 7px 8px;
margin-left: 5px;
margin-top: 5px;
margin-right: 10px;
margin-bottom: 10px;
/* shortcut */
margin: 5px 10px;
Выравн ивает фикс. блочный элемент по горизонтали
margin-left: auto;
margin-right: auto;
/* shortcut */
margin: 0 auto;
margin: auto;
Схлопывание маргинов
Внутренний контейнер не оттолкнется от родителя, а это свойство передатся родителю, и уже родитель оттолкнется от верхнего содержимого, при этом внутренний контейнер прижмётся к верхней границе родителя.
Как это лечится?
padding-top: 1px;
border-top: 1px solid transparent;
Текст внутри родителя, также можно прозрачный
Управление блочной моделью
По ум. стоит content-box (width и height не включает padding и border). Но это можно изменить
*,
*::before,
*::after {
box-sizing: border-box;
}
Блочные элементы
<!-- Универсальный блочный контейнер -->
<div>BLOCK-1</div>
<div>BLOCK-2</div>
<div>BLOCK-3</div>
К блочным тэгам также относятся: <html>, <body>, <section>, <main>, <nav>, <article>, <header>, <footer>, <aside>, <p>, <h1> - <h6> и др.
.box {
display: block; /*по ум.*/
height: 50px;
padding: 5px;
margin: 5px;
}
- До и после блочного элемента существует перенос строки;
- Блочным элементам можно задавать ширину, высоту, внутренние и внешние отступы;
- Занимают всю доступную ширину по умолчанию.
Блочные элементы применяют
- Создание сеток страницы
- Контейнеры
Строчные
<!-- Универсальный строчный контейнер -->
<span>INLINE-1</span> <span>INLINE-2</span> <span>INLINE-3</span>
INLINE-1 INLINE-2 INLINE-3
.string {
display: inline; /* по ум. */
height: 50px; /* не реагируют */
width: 50px; /* не реагируют */
background-color: maroon; /* действует */
border: 1px solid orange; /* действует */
margin-top: 5px; /* не реагируют */
margin-bottom: 5px; /* не реагируют */
margin-left: 5px; /* действует + пробелы учитываются */
margin-right: 5px; /* действует + пробелы учитываются */
padding-left: 10px; /* действует */
padding-right: 10px; /* действует */
padding-top: 10px; /* фон увеличивается, но контент не отодвигает */
padding-bottom: 10px; /* фон увеличивается, но контент не отодвигает */
}
- До и после строчного элемента отсутствуют переносы строки;
- Ширина и высота строчного элемента з ависит только от его содержания, задать размеры с помощью CSS нельзя (width и height не действуют);
- Можно задавать только горизонтальные отступы.
- Не действуют margin-top, margin-bottom.
- padding-top и padding-bottom влияют на фон, на поток не влияют.
- Как правило, к строчным элементам свойства блочной модели не применяют (width, height, margin, padding, border)
- Для строчных элементов лучше не задавать вертикальных отступов, т.к. они ведут себя непредсказуемо.
- Границы строчных элементов полностью реагируют на padding, но вертикальный padding не отталкивает другие элементы, выпадает из потока.
- Если заFLOATить строчный элемент, то он станет БЛОЧНЫМ
Строчные элементы применяют
- Оформление частей текста
- Контейнеры для небольших текстовых фраз