Как работают позиционирования static, relative, absolute и fixed в CSS
CSSfrontendвеб-разработкапозиционированиесвойства CSS
Что проверяют
Понимаете ли вы, относительно чего позиционируется элемент в каждом случае, и знаете ли про контекст наложения.
Как отвечать
- static: значение по умолчанию. Элемент в обычном потоке, свойства
top,leftиz-indexне действуют; - relative: остаётся в потоке и занимает своё место, но визуально смещается относительно него. Главное применение не смещение, а роль точки отсчёта для вложенных абсолютных элементов;
- absolute: выпадает из потока (соседи занимают освободившееся место) и позиционируется относительно ближайшего предка с позиционированием, отличным от
static. Нет такого предка, значит относительно начального содержащего блока; - fixed: выпадает из потока и позиционируется относительно окна, поэтому остаётся на месте при прокрутке;
- sticky: гибрид, ведёт себя как
relative, пока не достигнет заданного порога, дальше какfixedв пределах родителя.
Тонкости, на которых ловят:
fixedперестаёт быть привязанным к окну, если у предка естьtransform,filter,perspective,will-changeилиcontain: такой предок создаёт новый содержащий блок. Классическая причина «почему модальное окно уехало»;stickyне работает, если у родителяoverflow: hiddenили не задан размер, в котором элементу есть куда прилипать;z-indexдействует только на позиционированные элементы и работает внутри контекста наложения: элемент не может перекрыть соседа своего родителя, каким бы большим ни было число.
Где спотыкаются
Ставят absolute без позиционированного предка и получают привязку к странице.
Наращивают z-index вместо разбора контекста наложения.
Не понимают, почему fixed ведёт себя как absolute внутри блока с transform.
Ждут от sticky работы без указания порога (top).