Сделайте DIV или размер экрана или содержимого (в зависимости от того, что все больше)

У меня есть базовая страница с заголовком и контентом, скажем, с регистром:

<div>
    <nav>
       // header
    </nav>
    <div class = "container-index">
        // form
    <div>
</div>

Теперь проблема в том, что я хочу, чтобы div, окружающий форму, имел фоновое изображение, которое выравнивалось по нижней части страницы, поэтому я использую CSS следующим образом:

html,
body {
  height: 100%;
}

.container-index {
  background: url('../images/example.jpg') #e74a39;
  background-repeat: no-repeat;
  background-position: center 100%;
  display: flex;
  flex-flow: column;
  flex-grow: 1;
}

.contaier-index.full-height {
  height: 100vh;
}

Но это не работает, когда область просмотра становится меньше содержимого, вместо этого фоновое изображение заканчивается на полпути через форму, поэтому я сделал это:

$(window).on('resize scroll', function(e){
    var docH = parseInt($(document).height()),
        viewPortH = parseInt($(window).height());

    if (docH > viewPortH) {

        $('.container-index').removeClass('full-height');
    } else {
        $('.container-index').addClass('full-height');
    }
});
$(window).trigger('resize');

Это довольно ужасный способ сделать это.

Есть ли способ сделать это в CSS?

использовать ширину как 100vw

Vishwa 08.04.2019 11:52

@Vishwa, кажется, не работает

Sammaye 08.04.2019 11:55

если вы можете использовать начальную загрузку, попробуйте использовать класс css с поддержкой img

Vishwa 08.04.2019 11:57

@Vishwa Я использую начальную загрузку, и это не приведет к тому, что div заполнит пространство, а также это фоновое изображение, поэтому его нельзя использовать.

Sammaye 08.04.2019 11:57

Ваш вопрос достаточно двусмысленный. («Но это не работает, когда область просмотра становится меньше содержимого, вместо этого фоновое изображение заканчивается на полпути через форму»); означает ли это, что вы хотите, чтобы изображение соответствовало высота, а не ширине страницы?

Martin 01.07.2019 12:30

@Martin JS говорит сам за себя, это показывает, что я на самом деле слежу за высотой области просмотра, проблема связана с прокруткой содержимого, это работает, если содержимое никогда не прокручивается, но если на небольших экранах (мобильных) оно прокручивается, то CSS никогда работает правильно

Sammaye 01.07.2019 13:33
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
6
97
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я просто обновляю ваш код несколькими изменениями CSS и удаляю скрипт jQuery. Попробуйте это, я надеюсь, что это поможет вам. Спасибо

html,
body {
  margin: 0;
  min-height: 100%;
}

body {
  background: url('https://images.unsplash.com/photo-1476820865390-c52aeebb9891?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80') #e74a39;
  background-repeat: no-repeat;
  background-position: center 100%;
  background-size: cover;
}

.container-index {
  display: flex;
  flex-flow: column;
  flex-grow: 1;
  height: calc(100vh - 18px);
}
<div>
    <nav>
       // header
    </nav>
    <div class = "container-index">
        // form
    <div>
</div>

Не уверен, как это заставит div заполнить пространство, но это не так.

Sammaye 08.04.2019 11:55

@Sammaye извините за недоразумение. я просто обновляю приведенный выше фрагмент кода. Спасибо

Hassan Siddiqui 08.04.2019 12:09

Этот сатилл делает div размером с экран минус 18 пикселей, это то, что у меня сейчас есть, без js не работает.

Sammaye 08.04.2019 12:16

Это код, достаточный для создания проблемы, это действительно очень просто

Sammaye 08.04.2019 12:41

Если вы хотите окружить фоновое изображение сверху вниз, вы должны применить background-image к body, а не к contaier-index div.

Hassan Siddiqui 08.04.2019 12:59

только что попробовал это тоже, но тело заполняет только содержимое, если вы не используете тот же метод, что и выше, поэтому вы получаете одинаковые результаты как в теле, так и в div

Sammaye 08.04.2019 13:00

Все еще не работает, тело по-прежнему занимает высоту индекса контейнера на небольших экранах, что означает, что он имеет размер только одного окна просмотра.

Sammaye 08.04.2019 14:22

Можете ли вы развернуть свой полный код на любом сервере или скрипке? Спасибо

Hassan Siddiqui 08.04.2019 14:41

Вы можете попробовать различные доступные свойства background-size: https://www.w3schools.com/cssref/css3_pr_background-size.asp. В основном, background-size: cover должен решить вашу проблему.

Тогда это может быть проблема с соотношением сторон используемого изображения. Вы могли бы, вероятно, изменить изображение и проверить.

Pravalika Maram 08.04.2019 12:31

Нет, проблема в том, что div подходит к экрану, а не к содержимому, поэтому я добавил JS, чтобы исправить это, но JS — это хак, прочитайте вопрос

Sammaye 08.04.2019 12:40
Ответ принят как подходящий

В конце концов я не нашел разумного ответа CSS, поэтому единственным решением было остаться с JS для этого.

Похоже, все, что вам нужно, это background-size:cover;.

Martin 01.07.2019 12:30

@ Мартин нет, проверь другие ответы

Sammaye 01.07.2019 13:32

Вы не объяснили, как и почему не удалось выполнить background-size:cover. Мне непонятно, почему вы хотите, чтобы контент превышал размер области просмотра; если вы не пытаетесь масштабировать/масштабировать контент, и в этом случае буду будет решением CSS.

Martin 01.07.2019 14:36

@Мартин stackoverflow.com/questions/55570645/…

Sammaye 01.07.2019 14:44

Другие вопросы по теме