Skip to content

Latest commit

 

History

History
58 lines (30 loc) · 4.14 KB

08. Позиционирование в ЦСС.md

File metadata and controls

58 lines (30 loc) · 4.14 KB

Позиционирование в ЦСС

Не весь ЦСС умещается в блочную модель

Помните про флоу документа и блочную модель из пятого урока? Элементы идут друг за другом, между ними есть марджины, а внутри них — паддинги.

Но что делать, когда вам нужно элемент выбить из потока? Допустим, расположить кнопку где-нибудь слева снизу? Как у Гугла кнопка FAB в Материал дизайне.

Позиционирование

Для этого в ЦСС есть методы позиционирования: позицией блока можно управлять через свойства position и top, left, right, bottom.

Дефолтное поведение position: static — блок учитывает флоу документа и всё у него хорошо. Топ/лефт/райт/боттом не работают.

Другие значения: absolute, relative, fixed и sticky.

Абсолютное absolute

Если вы укажете position: absolute и какие-нибудь значения из топ-лефт-райт-боттом, то элемент будет спозиционирован относительно экрана: top: 2px; left: 10px вынесет его сверху влево.

iframe: https://jsfiddle.net/8qp226xv/2/embedded/result,html,css/

Про блочную модель

Как вы видите, абсолютное позиционирование ломает блочную модель: блочные элементы начинают вести себя как инлайн-блочные — занимают не всю ширину, а только контент текста и паддингов.

Как исправить это? Вам нужно, чтобы блок всё равно занимал 100% ширины, а width: 100% не помогает (конечно, 100% от чего?).

Растяните блок через left: 0; right: 0 .

Относительное relative

Если родителю задать position: relative, то его ребёнок с position: absolute будет учитываться относительно родителя.

iframe: https://jsfiddle.net/8qp226xv/1/embedded/result,html,css/

Зафиксированное fixed

При fixed элемент остается фиксированным при скролле.

iframe: https://jsfiddle.net/8qp226xv/3/embedded/result,html,css/

Стики sticky

Пока ещё не во всех браузерах работает (caniuse.com/position-sticky), но в будущем — очень полезная вещь.

До того, пока блок находится на экране — он ведёт себя в потоке. Когда вы его скроллите и он должен пропасть — он фиксируется как будто position: fixed.

(демка будет работать только в браузерах, которые указаны на (caniuse.com/position-sticky)

iframe: https://jsfiddle.net/8qp226xv/6/embedded/result,html,css/

z-index

Когда мы говорим про позиционирование, нужно помнить, что блок размещается по трём сторонам: x, y, z. За x и y отвечают left, right и top, bottom, а как наложить один элемент поверх другого? Используйте z-index.

iframe: https://jsfiddle.net/8qp226xv/7/embedded/result,html,css/