Position в CSS
Уроки потока учили блоки, как вставать в строку. position отвечает на другой вопрос: где этот блок сидит относительно обычного места, предка или экрана? Освойте пять повседневных значений, прежде чем браться за stacking или float.
Набор инструментов position
📊 Position одним взглядом
| Значение | Повседневная роль |
|---|---|
static |
По умолчанию — смещения вроде top/left почти бесполезны |
relative |
Сдвигается с обычного места; сохраняет пространство; может якорить absolute-детей |
absolute |
Вне обычного потока; размещается относительно ближайшего позиционированного предка |
fixed |
Вне потока; прикреплён к viewport при прокрутке |
sticky |
Ведёт себя как relative до порога прокрутки, затем липнет внутри контейнера |
Смещения top, right, bottom и left имеют смысл только когда position не static. Сначала выберите режим, потом уточните смещение.
Relative — вежливый сдвиг
relative оставляет элемент в потоке. Исходное место остаётся зарезервированным. Малые смещения хороши для оптической подстройки — и чтобы пометить родителя, которому должны подчиняться absolute-дети.
.card {
position: relative;
top: 0.25rem;
left: 0.25rem;
padding: 1rem;
border: 1px solid #ddd;
}
Absolute — выйти из потока
absolute вытягивает блок из обычного потока. Соседи закрывают щель. Размещение опирается на ближайшего предка с position не static — часто родителя relative. Без этого якоря элемент может подняться к более крупному containing block.
.badge {
position: absolute;
top: 0.5rem;
right: 0.5rem;
padding: 0.2rem 0.45rem;
font-size: 0.75rem;
background: #0b5fff;
color: #fff;
border-radius: 0.25rem;
}
Дайте absolute дом
Связывайте absolute-детей с намеренным родителем. Назовите отношение классами, чтобы вёрстка оставалась читаемой.
.media {
position: relative;
padding: 1rem;
border: 1px solid #e5e5e5;
}
.media .badge {
position: absolute;
top: 0.5rem;
right: 0.5rem;
}
Fixed — прилипнуть к viewport
fixed прикрепляет элемент к экрану. Прокрутка страницы его не сдвигает. Используйте для спокойных уведомлений или панелей — не как ярлык для любой колоночной вёрстки.
.notice {
position: fixed;
bottom: 1rem;
right: 1rem;
padding: 0.75rem 1rem;
background: #111;
color: #fff;
border-radius: 0.5rem;
}
Sticky — сначала relative, потом липкий
sticky остаётся в потоке, пока не пройдёте порог прокрутки (top обычен), затем липнет внутри прокручиваемого предка. Нужно место для скролла и разумный родитель — иначе кажется сломанным.
.section-label {
position: sticky;
top: 0;
padding: 0.5rem 0;
background: #fff;
border-bottom: 1px solid #eee;
}
Спокойная привычка position
Используйте relative для малых сдвигов и якорей absolute. Используйте absolute для значков и наложений внутри известного родителя. Оставьте fixed и sticky для намеренного chrome. Stacking через z-index и очистку float — для отдельных уроков.
.panel {
position: relative;
}
.panel__tag {
position: absolute;
top: 0;
left: 0;
}
Попробуйте сами
- Сдвиньте
.cardсposition: relativeи крошечнымиtop/left. - Поместите
.badgeсabsoluteвнутриrelative-родителя.media. - Добавьте небольшое уведомление
fixedв угол — прокрутите и смотрите, как остаётся. - Попробуйте метку
stickyсtop: 0в высокой прокручиваемой секции. - Напишите одно предложение: когда absolute безопаснее fixed?
Частые ошибки
absoluteбез позиционированного родителя и удивление, почему улетает далеко- Хвататься за
fixed, чтобы решить обычную вёрстку страницы - Ждать работы
stickyбез переполнения скроллом или с конфликтующими предками - Считать этот урок уроком строк inline-block (другая задача)
- Сваливать сюда рецепты z-index или float вместо изучения режимов размещения
Итог
positionуправляет размещением относительно потока, предков или viewportrelativeсдвигает и якорит;absoluteвыходит из потока внутри этого якоряfixedкрепится к viewport;stickyсмешивает relative и липкое поведение- Смещения важны только когда position не
static - Stacking и float оставьте на потом — сначала освойте пять режимов
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху