logo

Перекрытие div элементов в CSS: позиционирование и выравнивание

Быстрый ответ

Для того чтобы накрыть один div другим, нужно установить значение position у перекрывающего div на absolute. При этом это должно выполниться внутри контейнера с атрибутом position, установленным на relative.

CSS
Скопировать код
.container {
  position: relative;
}
.overlay {
  position: absolute;
  top: 0;
  left: 0;
}
HTML
Скопировать код
<div class="container">
  <div class="overlay">Содержимое перекрывающего div</div>
  Основное содержимое
</div>

Своё содержимое необходимо разместить внутри div с классом .overlay, чтобы создать многослойный эффект.

Искусство создания эффекта перекрытия

Перекрывающий слой по центру

Если вам требуется сместить перекрывающий слой к центру, настройте параметры top и left следующим образом:

CSS
Скопировать код
.overlay {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

Растяжение на весь контейнер

Для того чтобы растянуть перекрывающий слой, занимающий весь контейнер, настройте параметры следующим образом:

CSS
Скопировать код
.overlay {
   position: absolute;
   width: 100%;
   height: 100%;
   z-index: 1;
}

Для предотвращения возникновения скроллбаров используйте следующее:

CSS
Скопировать код
html, body {
  overflow: hidden;
}

Методы динамического позиционирования

Функция calc() будет полезна в более сложных случаях:

CSS
Скопировать код
.overlay {
  position: absolute;
  top: calc(50% – 20px);
  left: calc(50% – 30px);
}

Метод CSS Grid

Для центрирования перекрывающего слоя без использования абсолютного позиционирования:

CSS
Скопировать код
.container {
  display: grid;
  place-items: center;
}

Для большей гибкости в управлении колонками:

CSS
Скопировать код
.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 создают слои:

CSS
Скопировать код
.Base-Div { position: relative; }
.Overlay-Div { position: absolute; top: 0; left: 0; z-index: 10; }

Продвинутые методы перекрытия и корректировки

Наложение слоев и z-index

При множественном перекрытии стоит помнить о Правиле Ethereum: чем выше значение z-index, тем больше видимость перекрывающего слоя.

CSS
Скопировать код
.overlay-one {
  position: absolute;
  z-index: 2; 
}
.overlay-two {
  position: absolute;
  z-index: 1; 
}

Размеры родительского контейнера

Особое внимание стоит уделить размерам родительского контейнера при точном позиционировании перекрывающего слоя:

CSS
Скопировать код
.container {
  position: relative;
  width: 500px; 
  height: 300px; 
}

Адаптивный дизайн

Для плавного перекрытия рекомендуется использовать проценты или viewport-единицы, вместо фиксированных значений:

CSS
Скопировать код
.overlay {
  position: absolute;
  top: 10%;
  left: 10%;
  width: 80vw;
  height: 80vh;
}

Проблемы совместимости

Если вам до сих пор нужна поддержка Internet Explorer, стоит учесть, что Grid CSS может не работать в этом баузере.

CSS
Скопировать код
.container {
  display: -ms-grid; 
  display: grid;
}

Полезные материалы

  1. CSS Layout – The position Propertyосновы позиционирования в CSS от W3Schools.
  2. z-index – CSS: Cascading Style Sheets | MDN — подробное описание контекста наложения (stacking context) и z-index.
  3. z-index | CSS-Tricks – CSS-Tricks — разъяснение механизма наложения элементов с помощью z-index.
  4. position | CSS-Tricks – CSS-Tricks — помощник в изучении свойства position из CSS.
  5. A Complete Guide to Flexbox | CSS-Tricks – CSS-Tricks — быстрый путь к освоению раскладки Flexbox.
  6. html – How to overlay one div over another div – Stack Overflow — простое объяснение механизма перекрытия div, данное сообществом.
  7. How To Create an Overlay — простые шаги от W3Schools по созданию эффектов перекрытия с помощью CSS.