Элементы сетки CSS переполняют контейнер сетки при использовании «align-content: space -ween» и липкого заголовка - PullRequest
0 голосов
/ 15 января 2019

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

Заголовок позиционируется с position: sticky;.

Элементы в сетке , а не занимают всю высоту, доступную в сетке.

В моем макете сетки CSS я использую align-content: space-between;, чтобы оба элемента располагались сверху и снизу сетки с некоторым пробелом между ними.

Это хорошо смотрится в Chrome и FF, но в Safari (Mac и iOS) второй элемент сетки помещается вне сетки (по высоте моего липкого заголовка).

body {
  margin: 0;
  padding: 0;
  font-family: sans-serif;
  text-align: center;
}

.flex {
  min-height: 100vh;
  width: 100%;
  display: flex;
  flex-direction: column;
}

header {
  position: sticky;
  position: -webkit-sticky;
  top: 0;
  z-index: 999999;
  padding: 3em;
  background-color: tomato;
}


footer {
  padding: 1em;
  background-color: tomato;
}

.grid {
  width: 100%;
  -webkit-flex: 1;
  flex: 1;
  display: grid;
  grid-template-columns: 100%;
  grid-template-rows: auto auto;
  -webkit-align-content: space-between;
  align-content: space-between;
  background-color: khaki;
}

.item {
  box-sizing: border-box;
  padding: 0.6em;
}

.pink {
  background-color: pink;
}

.orange {
  background-color: orange;
}
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>JS Bin</title>
  </head>
  <body>
    <div class="flex">
      <header>Header</header>
      <div class="grid">
        <div class="item pink">Item 1</div>
        <div class="item orange">Item 2</div>
      </div>
      <footer>Footer</footer>
    </div>  
  </body>
</html>

1 Ответ

0 голосов
/ 15 января 2019

Я как-то «исправил» это, обернув всю свою страницу в другую сетку. Но я был бы очень признателен, если бы кто-то придумал лучшее / более чистое решение для этого.

body {
  margin: 0;
  padding: 0;
  font-family: sans-serif;
  text-align: center;
}

.wrapper {
  min-height: 100vh;
  width: 100%;
  display: grid;
  flex-direction: column;
  grid-template-columns: 100%;
  grid-template-rows: 100%;
}

.flex {
  align-self: stretch;
  justify-self: stretch;
  background-color: lime;
  display: flex;
  flex-direction: column;
}

header {
  position: sticky;
  position: -webkit-sticky;
  top: 0;
  z-index: 999999;
  padding: 3em;
  background-color: tomato;
}


footer {
  padding: 1em;
  background-color: tomato;
}

.grid {
  width: 100%;
  -webkit-flex: 1;
  flex: 1;
  display: grid;
  grid-template-columns: 100%;
  grid-template-rows: auto auto;
  -webkit-align-content: space-between;
  align-content: space-between;
  background-color: khaki;
}

.item {
  box-sizing: border-box;
  padding: 0.6em;
}

.pink {
  background-color: pink;
}

.orange {
  background-color: orange;
}
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>JS Bin</title>
  </head>
  <body>
    <div class="wrapper">
      <div class="flex">
        <header>Header</header>
        <div class="grid">
          <div class="item pink">Item 2</div>
          <div class="item orange">Item 2</div>
        </div>
        <footer>Footer</footer>
      </div>  
    </div>
  </body>
</html>

UPDATE: Благодаря комментарию @Michael_B я нашел более понятный способ исправить это, изменив min-height: 100%; на height: 100%; в контейнере .flex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...