CSS: блочная модель, управление отображением элементов, позиционирование
Боксовая модель (box model)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/374602/images/1721214/boxmodel-image.png)
Расчет ширины
Место, отводимое под ВЕСЬ элемент рассчитывается следующим образом:
15px + 1px + 10px + 100px + 10px + 1px + 15px
margin-left + border-left + padding-left + width + padding-right + border-right + margin-right
Фактическая ширина элемента:
1px + 10px + 100px + 10px + 1px (чтобы визуально получить 100рх по ширине, в стилях следует указать ширину с вычетом border-ов и padding-ов: width: 78px)
border-left + padding-left + width + padding-right + border-right
.element {
width: 100px;
padding: 20px 10px;
margin: 5px 15px;
border: 1px solid #000;}
Width & Height
Синтаксис:
значение | проценты | auto | inherit
Не рекомендуется напрямую задавать элементам высоту, поскольку содержимое, как правило, динамическое. Целесообразно задавать высоту только тем элементам, которые содержат статический контент
Дополнительные свойства для работы с шириной и высотой:
min-width минимальная ширина
max-width максимальная ширина
min-height минимальная высота
max-height максимальная высота
![](https://s3.amazonaws.com/media-p.slid.es/uploads/374602/images/1721311/height.png)
Margin
Устанавливает величину отступа от каждого края элемента. Отступом является пространство от границы текущего элемента до внутренней границы его родительского элемента
Padding
Устанавливает значение полей вокруг содержимого элемента. Полем называется расстояние от внутреннего края рамки элемента до воображаемого прямоугольника, ограничивающего его содержимое
Как запомнить порядок сторон: TRouBLe
![](https://s3.amazonaws.com/media-p.slid.es/uploads/374602/images/1721322/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/374602/images/1721323/pasted-from-clipboard.png)
p { margin: top right bottom left; }
p { padding: top right bottom left; }
![](https://s3.amazonaws.com/media-p.slid.es/uploads/374602/images/1721339/_______2.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/374602/images/1721342/_______3.png)
Border
div {
border-width:1px;
border-color: #000;
border-style: solid
}
Краткая запись:
div { border: 1px solid #000;}
Для одной стороны -
border-top, border-bottom, border-left, border-right
Варианты border-style:
![](https://s3.amazonaws.com/media-p.slid.es/uploads/374602/images/1721382/border_style.png)
Box- sizing
При значении border-box ширина начинает включать
поля и границы, но не отступы. Таким образом,
подключая box-sizing со значением border-box к
своему стилю, мы можем задавать ширину в
процентах и спокойно указывать border и padding, не
боясь, что изменится ширина блока
![](https://s3.amazonaws.com/media-p.slid.es/uploads/374602/images/1721251/pasted-from-clipboard.png)
Display
определяет, как элемент должен быть показан в документе
Важно! Display не переопределяет блочность/строчность элемента, а всего лишь управляет его свойствами при отображении
Значения:
none - элемент не отображается
block - элемент показывается как блочный
inline - элемент показывается как строчный
inline-block - внутренняя часть форматируется как блочный элемент, а сам элемент - как встроенный
"Табличные" значения (основные):
table
table-row
table-cell
table-column
Visibility
Предназначен для отображения или скрытия элемента, включая рамку вокруг него и фон. При скрытии элемента, хотя он и становится не виден, место, которое элемент занимает, остается за ним
![](https://s3.amazonaws.com/media-p.slid.es/uploads/374602/images/1723626/Picture1.png)
{ visibility: hidden; } { visibility: visible; } { visibility: collapse; }
Overflow
Управляет отображением содержания блочного элемента, если оно целиком не помещается и выходит за область заданных размеров.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/374602/images/1723620/overflow.png)
браузеры поддерживают и свойства overflow-x, overflow-y, которые определяют поведение при переполнении по каждой из осей: x и y.
Float
Определяет, по какой стороне будет выравниваться элемент, при этом остальные элементы будут обтекать его с других сторон.
Синтаксис:
float:
left
right
none
![](https://s3.amazonaws.com/media-p.slid.es/uploads/374602/images/1721407/floats.png)
Что нужно знать о Float
- У плавающего объекта обязательно должна быть задана ширина
- Если плавающих элементов будет больше, чем ширина окна, следующий из них, который не вмещается, будет перемещен на следующую строку
- Плавающий элемент ведет себя как блочный
- Плавающий элемент выпадает из нормального потока
- "float first" - располагайте плавающий элемент в коде первым
Запрет обтекания. Clear
<div id="container">
<img src="image.gif" />
<img src="image.gif" />
<img src="image.gif" />
</div>
#container {
width: 260px;
margin: 0 auto;
padding: 10px 0 10px 10px;
background: #aaa;
border: 1px solid #999;
}
img {
float: left;
margin: 0 5px 0 0;
}
![](https://s3.amazonaws.com/media-p.slid.es/uploads/374602/images/1721505/floated.png)
Проблема, возникающая при float
Необходимо очистить поток
Clear
Свойство clear устанавливает, с какой стороны элемента запрещено его обтекание другими элементами. Если задано обтекание элемента с помощью свойства float, то clear отменяет его действие для указанных сторон.
Синтаксис:
clear:
none
left
right
both
Способы очистки
-
дополнительный элемент, помещенный в конце блока родителя со свойством clear
-
используя псевдоэлемент :after
- добавить правило overflow: hidden родителю,
который содержит плавающие элементы:
<div class="parent">
<div class="floatBlock">Этот блок с float: left;</div>
текст, который задаст высоту родителю
<div class="clear"></div>
</div>
<div class="nextStaticBlock">Это следующий блок в общем потоке</div>
<div class="parent">
<div class="floatBlock">Этот блок с float: left;</div>
текст, который задаст высоту родителю
</div>
<div class="nextStaticBlock">Это следующий блок в общем потоке</div>
.parent:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.parent {
overflow: hidden;
zoom: 1; /* for IE */
}
.parent {
zoom: 1; /* set hasLayout */
display: block; /* resets display for IE/Win */
}
Для IE:
.clear {
clear:both
}
Position
Устанавливает способ позиционирования элемента относительно окна браузера или других объектов на веб-странице.
static | Элементы отображаются как обычно. Использование атрибутов left, top, right и bottom не приводит к каким-либо результатам. значение по умолчанию |
fixed | Привязывается к указанной свойствами left, top, right и bottom точке на экране и не меняет своего положения при прокрутке веб-страницы |
relative | Положение элемента устанавливается относительно его исходного места. Добавление атрибутов left, top, right и bottom изменяет позицию элемента и сдвигает его в ту или иную сторону от первоначального расположения. Также устанавливает новую точку привязки для абсолютно позиционированных элементов |
absolute | Указывает, что элемент абсолютно позиционирован, при этом другие элементы отображаются на веб-странице словно абсолютно позиционированного элемента и нет. Положение элемента задается свойствами left, top, right и bottom, также на положение влияет значение свойства position родительского элемента. |
Position:absolute
Если у родительского элемента
position static
Если у родительского элемента
position relative/absolute/fixed
Элемент позиционируется относительно <body>
Элемент позиционируется относительно родителя
Единицы изменения для координат: пиксели, проценты, em и т.д. В том чисте отрицательные значения
Что нужно знать
- нельзя применять position (кроме static) к элементам с float (не сработает)
- при сдвиге элемента с помощью position:relative остается "дыра" на месте, где элемент должен был находиться в потоке (в отличие от отрицательного margin, который не оставляет пустого места)
- если не задать вертикальную или горизонтальную позицию, элемент останется в месте ДО позиционирования (по соответствующей оси). Absolute без координат не даст эффекта, рекомендуется задать хотя бы по одной координате для каждой оси
- очень желательно указывать ширину элемента для position:absolute
![](https://s3.amazonaws.com/media-p.slid.es/uploads/374602/images/3487629/1-ZoRoAU2rrzf5IdHuz-xmtg.png)
Z-INDEX
позволяет менять способ перекрытия элементов друг другом. Чем значение z-index больше, тем ближе к читателю находится элемент
Работает только если задано position absolute, relative или fixed
![](https://s3.amazonaws.com/media-p.slid.es/uploads/374602/images/1723958/basicz-index.png)
Каждый элемент может находиться как ниже, так и выше других объектов веб-страницы, их размещением по z-оси и управляет z-index
CSS. Отображение и позиционирование элементов
By Maria Putyrskaya
CSS. Отображение и позиционирование элементов
Box model. Display. Float & Clear. Position
- 5,495