Веб

Как разместить .main-illustration в правом нижнем углу

Если элемент находится внутри .header с position: relative, bottom:0; right:0; уже ставит его в правый нижний угол. Проверьте вложенность, z-index и overflow.

Как правильно позиционировать элемент .main-illustration, чтобы он оказался в правом нижнем углу блока .header, а не висел сверху? Ниже привожу текущий CSS, но элемент всё равно выходит над остальными элементами. Что надо изменить?

css
.page {
   font-family: 'Helvetica Neue', 'Arial', sans-serif;
  min-width:1100px;
  max-width:1600px;
}
.header {
  position: relative;
  display:flex;
  align-items: center;
  background-color: #f2f2f2;
  min-height:600px;
  max-height:756px;
}

.logo_place_header {
  width:228px;
  height:32px;
  position:absolute;
  top:30px;
  left:64px;
}

.title {
  display:flex;
  line-height: 96px; 
  font-size: 102px;
  font-weight: bold;
  align-items: center;
  margin-left:64px;
  width:730px;
}

.subtitle {
  position:absolute;
  left:64px;
  width:388px;
  bottom:30px;
  line-height: 25px;        
  font-size: 18px;          
  font-weight: normal;
}

.main-illustration{
  position:absolute;
  bottom: 0; 
  right: 0;
  width:765px;
  height:608px;
}

Коротко
Если элемент находится внутри блока‑родителя с position: relative, то bottom: 0; right: 0; уже помещает его в правый нижний угол.
Проблема появляется, когда:

  1. .main‑illustration не вложен в .header – тогда он позиционируется относительно ближайшего позиционированного предка (обычно <body>).
  2. Отсутствует z‑index – элемент может оказаться поверх остальных, потому что по умолчанию все элементы находятся в одном контексте наложения.

Ниже — пошаговый рецепт, как исправить.


1. Убедитесь, что элемент вложен в .header

html
<header class="header">
  <div class="logo_place_header"></div>
  <div class="title"></div>
  <div class="subtitle"></div>

  <!-- иллюстрация должна находиться внутри header -->
  <img src="illustration.svg" alt="Illustration" class="main-illustration">
</header>

Если вы оставили её вне <header>, добавьте position: relative к ближайшему родителю (обычно <body>), но лучше просто переместить элемент внутрь.


2. Заводим контекст наложения

css
.header {
  position: relative;          /* уже задано */
  z-index: 1;                  /* создаём новый контекст */
  overflow: hidden;            /* чтобы иллюстрация не выходила за пределы */
}

Почему overflow: hidden?
Ваши границы min-height: 600px; max-height: 756px; могут быть недостаточны, если изображение 608 px по высоте. С overflow: hidden лишняя часть просто будет скрыта.


3. Позиционируем иллюстрацию и ставим её за остальными

css
.main-illustration {
  position: absolute;
  bottom: 0;
  right: 0;
  width: 765px;
  height: 608px;

  /* ставим за контентом header */
  z-index: -1;          /* или 0 – если остальные элементы без z-index */
  pointer-events: none; /* чтобы клики проходили сквозь рисунок */
}

Почему z-index: -1?
Это гарантирует, что рисунок будет «под» всеми другими элементами внутри .header. Если другие элементы уже используют z-index, можно поднять их до 1/2 и оставить рисунок на 0.


4. Итоговый CSS

css
.page {
  font-family: 'Helvetica Neue', 'Arial', sans-serif;
  min-width: 1100px;
  max-width: 1600px;
}

.header {
  position: relative;
  display: flex;
  align-items: center;
  background-color: #f2f2f2;
  min-height: 600px;
  max-height: 756px;
  overflow: hidden;   /* скрываем выходы иллюстрации */
  z-index: 1;         /* создаём новый контекст */
}

.logo_place_header {
  width: 228px;
  height: 32px;
  position: absolute;
  top: 30px;
  left: 64px;
}

.title {
  display: flex;
  line-height: 96px; 
  font-size: 102px;
  font-weight: bold;
  align-items: center;
  margin-left: 64px;
  width: 730px;
}

.subtitle {
  position: absolute;
  left: 64px;
  width: 388px;
  bottom: 30px;
  line-height: 25px;        
  font-size: 18px;          
  font-weight: normal;
}

.main-illustration{
  position: absolute;
  bottom: 0;
  right: 0;
  width: 765px;
  height: 608px;
  z-index: -1;          /* находится за остальными элементами */
  pointer-events: none;
}

5. Проверка

  1. Проверьте структуру DOM – убедитесь, что <img class="main-illustration"> находится внутри <header class="header">.
  2. Смотрите в DevTools – в инспекторе должна быть видна область z-index и контекст наложения.
  3. Проверьте размеры – если иллюстрация всё равно «выходит» — увеличьте height/width header либо уменьшите размеры изображения.

Что ещё можно сделать?

Подход Когда использовать Пример
Псевдоэлемент ::after Если иллюстрация не должна быть семантически частью контента header::after { content: ''; background: url(illustration.svg); position: absolute; bottom:0; right:0; width: 765px; height: 608px; z-index:-1; }
CSS‑grid Если вам нужен гибкий «dock‑style» макет header { display:grid; grid-template-columns: 1fr auto; grid-template-rows: 1fr; } .main-illustration { grid-column: 2; grid-row: 1; justify-self: end; align-self: end; }
object-fit: cover Чтобы растянуть изображение до размеров блока <img src="…" class="main-illustration" style="object-fit: cover;">

Заключение

  • Вложите .main-illustration внутрь .header.
  • Создайте контекст наложения через z-index на .header.
  • Поставьте иллюстрацию за контентом: z-index: -1.
  • При необходимости ограничьте выходы overflow: hidden.

После этих изменений элемент будет надёжно закреплён в правом нижнем углу блока и будет лежать «под» остальными элементами, как задумано.

Авторы
Проверено модерацией
Модерация