Перекрытие div элементов в CSS: позиционирование и выравнивание
Быстрый ответ
Для того чтобы накрыть один div другим, нужно установить значение position
у перекрывающего div
на absolute
. При этом это должно выполниться внутри контейнера с атрибутом position
, установленным на relative
.
.container {
position: relative;
}
.overlay {
position: absolute;
top: 0;
left: 0;
}
<div class="container">
<div class="overlay">Содержимое перекрывающего div</div>
Основное содержимое
</div>
Своё содержимое необходимо разместить внутри div с классом .overlay
, чтобы создать многослойный эффект.
Искусство создания эффекта перекрытия
Перекрывающий слой по центру
Если вам требуется сместить перекрывающий слой к центру, настройте параметры top
и left
следующим образом:
.overlay {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
Растяжение на весь контейнер
Для того чтобы растянуть перекрывающий слой, занимающий весь контейнер, настройте параметры следующим образом:
.overlay {
position: absolute;
width: 100%;
height: 100%;
z-index: 1;
}
Для предотвращения возникновения скроллбаров используйте следующее:
html, body {
overflow: hidden;
}
Методы динамического позиционирования
Функция calc()
будет полезна в более сложных случаях:
.overlay {
position: absolute;
top: calc(50% – 20px);
left: calc(50% – 30px);
}
Метод CSS Grid
Для центрирования перекрывающего слоя без использования абсолютного позиционирования:
.container {
display: grid;
place-items: center;
}
Для большей гибкости в управлении колонками:
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
.overlay {
grid-column-start: 2;
grid-column-end: 3;
}
CSS Grid обеспечивает отзывчивость, избегая перекрытий и проблем с масштабированием.
Визуализация
Можно представлять перекрывающий div как наклейку на ноутбуке 🎨:
🌀 Крышка ноутбука = базовый слой, первый div
(с position: static)
💻🔲 Наклейка Django = следующий div
, нужен для перекрытия основного слоя
🔄 Наклейка Electron = второй div
, перекрывается сверху (с position: absolute
и z-index
)
Так же, как с наклейками, директивы CSS создают слои:
.Base-Div { position: relative; }
.Overlay-Div { position: absolute; top: 0; left: 0; z-index: 10; }
Продвинутые методы перекрытия и корректировки
Наложение слоев и z-index
При множественном перекрытии стоит помнить о Правиле Ethereum: чем выше значение z-index
, тем больше видимость перекрывающего слоя.
.overlay-one {
position: absolute;
z-index: 2;
}
.overlay-two {
position: absolute;
z-index: 1;
}
Размеры родительского контейнера
Особое внимание стоит уделить размерам родительского контейнера при точном позиционировании перекрывающего слоя:
.container {
position: relative;
width: 500px;
height: 300px;
}
Адаптивный дизайн
Для плавного перекрытия рекомендуется использовать проценты или viewport-единицы, вместо фиксированных значений:
.overlay {
position: absolute;
top: 10%;
left: 10%;
width: 80vw;
height: 80vh;
}
Проблемы совместимости
Если вам до сих пор нужна поддержка Internet Explorer, стоит учесть, что Grid CSS может не работать в этом баузере.
.container {
display: -ms-grid;
display: grid;
}
Полезные материалы
- CSS Layout – The position Property — основы позиционирования в CSS от W3Schools.
- z-index – CSS: Cascading Style Sheets | MDN — подробное описание контекста наложения (stacking context) и z-index.
- z-index | CSS-Tricks – CSS-Tricks — разъяснение механизма наложения элементов с помощью z-index.
- position | CSS-Tricks – CSS-Tricks — помощник в изучении свойства position из CSS.
- A Complete Guide to Flexbox | CSS-Tricks – CSS-Tricks — быстрый путь к освоению раскладки Flexbox.
- html – How to overlay one div over another div – Stack Overflow — простое объяснение механизма перекрытия div, данное сообществом.
- How To Create an Overlay — простые шаги от W3Schools по созданию эффектов перекрытия с помощью CSS.