Как сделать так, чтобы элемент занимал всю высоту области прокрутки (скролла) страницы?

Добрый день! Извините за, возможно, глупый вопрос, но я не нашел подходящего решения. У меня есть фон, который позиционируется абсолютно относительно body. Мне нужно растянуть этот фон на всю ширину body, даже во время скролла. Я пробовал устанавливать 100% и 100vh для фона, но он растягивается только до конца области просмотра. Я не хочу использовать фиксированное положение, а хочу, чтобы фон охватывал весь контент сайта, который находится за пределами области просмотра.
  • 27 октября 2024 г. 12:22
Ответы на вопрос 3
Добрый день!

Чтобы сделать элемент, например, фон, который будет занимать всю высоту области прокрутки, даже когда контент выходит за пределы видимой области, вы можете использовать свойство CSS `min-height`. Для этого задайте соответствующее значение для вашего элемента. Давайте разберем пример.

Предположим, у вас есть HTML структура, где `body` - это основной контейнер, а фон - это элемент с классом `.background`.

```html
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Пример</title>
    <style>
        body {
            margin: 0;
            padding: 0;
        }
        .background {
            position: absolute; /* Позиционирование относительно body */
            top: 0; /* Прикрепляем к верху */
            left: 0; /* Прикрепляем к левому краю */
            width: 100%; /* Полная ширина */
            min-height: 100%; /* Минимальная высота 100% от высоты контента body */
            background: url('path/to/your/background.jpg') no-repeat center center / cover;
            z-index: -1; /* Убедитесь, что фон находится позади контента */
        }
        .content {
            position: relative; /* Создаем контекст для размещения контента */
            z-index: 1; /* Это делает контент выше фона */
        }
    </style>
</head>
<body>
    <div class="background"></div>
    <div class="content">
        <h1>Добро пожаловать на мой сайт!</h1>
        <p>Это пример контента.</p>
        <p>Добавьте больше контента, чтобы увидеть, как фон растягивается.</p>
        <p>....</p>
    </div>
</body>
</html>
```

### Объяснение:
1. **Позиционирование**: Используем `position: absolute;` для фона, чтобы он располагался относительно `body`. Это позволит ему занимать всю ширину и высоту.
  
2. **Ширина и высота**: Устанавливаем `width: 100%;`, чтобы фон занимал всю ширину, и `min-height: 100%;`, чтобы он занимал не менее высоты всего контента.

3. **Z-индексы**: Используем `z-index` для управления слоем элементов. Убедитесь, что фон находится ниже по значению зависящих от `z-index`, чтобы он не накладывался на ваш контент.

### Замечание:
Если вы хотите, чтобы фон оставался неразрывным при прокрутке, также можно использовать `position: fixed;`, но в вашем случае вы хотите, чтобы фон охватывал весь контент. В приведённом примере фон будет оставаться на месте, когда вы прокручиваете страницу. 

Попробуйте этот код и в зависимости от ваших требований внести изменения!
Так vh и есть размер " области просмотра ". Задайте top, right, bottom, left равное 0 (или inset: 0 ), а body позицию relative, чтобы растянуть на весь родитель (body): 
Моя задача растянуть фон на всю ширину body даже при скролле

указывал для фона и 100% и 100vh

vh вообще не имеют отношения к ширине.

Если всё таки речь про высоту, то 100vh очевидно не поможет, потому что это размер вьюпорта, а не контента body.
А вот 100% поможет. И cover тоже поможет.
Но для этого, body не должно быть ограничено вьюпортом или чем-то ещё.
Обычно для body задают min-height: 100vh или развлекаются с процентами от html. Но это делают для эффекта липкого футера.

Самое интересное, что по умолчанию body как раз таки растягивается по высоту контента. И соответственно, фон со 100% или cover поступит аналогично (если он не svg, у svg ещё нужно разрешить изменять пропорции).
Так что ищите где перемудрили.
Похожие вопросы