Заполнить весь вид страницы с помощью CSS / Flexbox

Высота меня до сих пор смущает и когда и куда ее ставить.

https://jsfiddle.net/3pxmm0mz/

<div id = "app"> 
     <div className = "wrapper">
        <header>Header</header>
        <nav>
              Nav
          </nav>
        <div className = "main-wrapper">
          <main>
            main
          </main>
          <footer>
            footer
          </footer>
        </div>
      </div>
</div>



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

.wrapper {
    display: flex;
    flex-wrap: wrap;
    header {
      background: red;
      flex: 0 0 100%;
    }

    nav {
      background: blue;
      flex: 0 0 5%;
    }

    .main-wrapper {
      background: gray;
      display: flex;
      flex: 0 0 95%;
      flex-wrap: wrap;
      main {
        background:  yellow;
        flex: 0 0 100%;
      }

      footer {
        background: darkorange;
        flex: 0 0 100%;
      }
    }
}

Я пытаюсь добиться того, чтобы все области заполняли весь экран (без полос прокрутки).

Я бы хотел, чтобы заголовок был максимум-25%. Нижний колонтитул, вероятно, 25% (хотя я все еще не уверен, хочу ли я, чтобы нижний колонтитул всегда отображался).

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

так как ваш html и тело имеют общие 100vh, вы можете передать высоту детям, используя height 100% на div#app и div.wrapper, оттуда вы можете установить height:25% в заголовке и так далее.

Zohir Salak 30.05.2018 21:15
jsfiddle.net/sr4qykdg
Michael Benjamin 31.05.2018 05:21
Улучшение производительности загрузки с помощью 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
2
57
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

https://jsfiddle.net/3pxmm0mz/1/

body,
html {
  height: 100vh;
  margin: 0;
}

.wrapper {
  display: flex;
  flex-wrap: wrap;
  header {
    background: red;
    flex: 0 0 100%;
    height: 100px;
  }
  nav {
    background: blue;
    flex: 0 0 5%;
  }
  .main-wrapper {
    background: gray;
    display: flex;
    flex: 0 0 95%;
    flex-wrap: wrap;
    main {
      background: yellow;
      flex: 0 0 100%;
      min-height: calc(100vh - 200px);
      overflow: auto;
    }
  }
  footer {
    background: darkorange;
    flex: 0 0 100%;
    height: 100px;
  }
}
<div id = "app">
  <div class = "wrapper">
    <header>Header</header>
    <nav>
      Nav
    </nav>
    <div class = "main-wrapper">
      <main>
        main
      </main>
    </div>
    <footer>
      footer
    </footer>
  </div>
</div>

Вы можете настроить calc (), чтобы вычесть процент или фиксированное количество пикселей в зависимости от того, что вы хотите.

Откуда берется 200 пикселей?

chobo2 30.05.2018 21:19

Также я вижу, что у вас переполнение в основной области, но как насчет области навигации?

chobo2 30.05.2018 21:25

заголовок 100 пикселей + нижний колонтитул 100 пикселей = 200 пикселей С помощью функции calc () я вычитаю высоту заголовка + нижнего колонтитула.

Dan H 30.05.2018 21:25

Вы действительно можете избавиться от переполнения. Я попробовал удалить его, и вы получили красивый свиток в теле, который более аккуратный.

Dan H 30.05.2018 21:26

Я должен проверить это сам, но я вижу, что навигационная система не справляется с этим. Экран будет расширяться, чтобы освободить место для всего, что я добавлю к нему.

chobo2 30.05.2018 21:27

Хм, прокрутки даже в теле не вижу. jsfiddle.net/8pjx71ty

chobo2 30.05.2018 21:30
Ответ принят как подходящий

почему бы не передать этот 100vh детям и установить высоту в процентах по своему усмотрению.

body, html {
    height: 100vh;
    margin: 0;
}


.wrapper {
    display: flex;
    flex-wrap: wrap;
    height: 100vh;
}

header {
    background: red;
    flex: 0 0 100%;
    max-height:25%;
 height:25%;
}

nav {
    background: blue;
    flex: 0 0 5%;
    height:75%;
}

.main-wrapper {
    background: gray;
    display: flex;
    flex: 0 0 95%;
    flex-wrap: wrap;
    height:75%;    
}

main {
    background: yellow;
    flex: 0 0 100%;
    height:75%;
    overflow-y: auto;
}

footer {
    background: darkorange;
    flex: 0 0 100%;
    height:25%;
    max-height:25%;
}
<div id = "app">
  <div class = "wrapper">
    <header>Header</header>
    <nav>
      Nav
    </nav>
    <div class = "main-wrapper">
      <main>
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
      </main>
      <footer>
      footer
    </footer>
    </div>
    
  </div>
</div>

Первоначально я пытался пойти по этому пути, но по какой-то причине мне было трудно правильно установить%, и это выглядело неправильно.

chobo2 01.06.2018 00:46

с процентами будет странно иметь дело, потому что ваш нижний колонтитул не имеет того же родителя, что и ваш верхний колонтитул.

Zohir Salak 01.06.2018 00:53

Ах, это может быть так, да, я все еще не уверен, как будет идти нижний колонтитул, будет ли он снаружи с заголовком или больше внутри с основной областью.

chobo2 01.06.2018 01:12

Макет сетки действительно многообещающий для того, чего вы пытаетесь достичь.

Zohir Salak 01.06.2018 01:13

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

chobo2 01.06.2018 18:38

Я вижу, что вы используете CSS Flexboxflex и flex-wrap для создания полноэкранного двухмерного макета, но модуль flexbox - это фундаментально предназначенный, чтобы управлять отображением конкретных дискретных элементов на странице здесь и там по всей странице.

В идеале в этой настройке вы можете - и, возможно, должны - использовать CSS-сетка.

Это даст вам всевозможную гибкость, не говоря уже о простота, к которой у вас не будет доступа через flexbox.

Рабочий пример:

#app {
display: grid;
grid-template-rows: 25% 50% 25%;
grid-template-columns: 10% 90%;
position: absolute;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
}

header {
grid-area: 1 / 1 / 2 / 3;
background-color: red;
}

nav {
grid-area: 2 / 1 / 3 / 2;
background-color: blue;
}

main {
grid-area: 2 / 2 / 3 / 3;
background-color:  yellow;
}

footer {
grid-area: 3 / 1 / 4 / 3;
background-color: darkorange;
}
<div id = "app"> 
<header>Header</header>
<nav>Nav</nav>
<main>main</main>
<footer>footer</footer>
</div>

Я бы хотел использовать сетку, но с 40% пользователей, использующих сайт, используют IE 11, это невозможно без написания альтернативного варианта с использованием фреймворка или чего-то еще.

chobo2 31.05.2018 21:16

Справедливо. Я понимаю, что это исключает использование CSS Grid.

Rounin 31.05.2018 21:30

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

chobo2 01.06.2018 00:47

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