Как разместить .main-illustration в правом нижнем углу
Если элемент находится внутри .header с position: relative, bottom:0; right:0; уже ставит его в правый нижний угол. Проверьте вложенность, z-index и overflow.
Как правильно позиционировать элемент .main-illustration, чтобы он оказался в правом нижнем углу блока .header, а не висел сверху? Ниже привожу текущий 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; уже помещает его в правый нижний угол.
Проблема появляется, когда:
.main‑illustrationне вложен в.header– тогда он позиционируется относительно ближайшего позиционированного предка (обычно<body>).- Отсутствует
z‑index– элемент может оказаться поверх остальных, потому что по умолчанию все элементы находятся в одном контексте наложения.
Ниже — пошаговый рецепт, как исправить.
1. Убедитесь, что элемент вложен в .header
<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. Заводим контекст наложения
.header {
position: relative; /* уже задано */
z-index: 1; /* создаём новый контекст */
overflow: hidden; /* чтобы иллюстрация не выходила за пределы */
}
Почему
overflow: hidden?
Ваши границыmin-height: 600px; max-height: 756px;могут быть недостаточны, если изображение 608 px по высоте. Сoverflow: hiddenлишняя часть просто будет скрыта.
3. Позиционируем иллюстрацию и ставим её за остальными
.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
.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. Проверка
- Проверьте структуру DOM – убедитесь, что
<img class="main-illustration">находится внутри<header class="header">. - Смотрите в DevTools – в инспекторе должна быть видна область
z-indexи контекст наложения. - Проверьте размеры – если иллюстрация всё равно «выходит» — увеличьте
height/widthheader либо уменьшите размеры изображения.
Что ещё можно сделать?
| Подход | Когда использовать | Пример |
|---|---|---|
Псевдоэлемент ::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.
После этих изменений элемент будет надёжно закреплён в правом нижнем углу блока и будет лежать «под» остальными элементами, как задумано.