Почему (стандартный способ) создания элемента, на 100% превышающего высоту его родительского элемента, не работает в Safari, когда родительский элемент является гибким элементом?

#css #css-position #absolute

#css #css-position #абсолютный

Вопрос:

Я использую метод создания дочернего элемента на 100% выше его родительского элемента, который чаще всего задается в ответах StackOverflow, а именно относительное позиционирование родительского элемента, а затем предоставление дочернему элементу этих стилей:

 position: absolute;
top: 0px;
bottom: 0px;
width: 100%;
height: 100%;
  

Но, пожалуйста, взгляните на эту реализацию Codepen выше. В нем я делаю родительский элемент гибким элементом, а дочерний элемент таблицей (или <div> с display: table помощью ). Мне нужно сделать это для реального случая проектирования моего клиента, частично для выравнивания текста по вертикали посередине, что, я считаю, могут делать только таблицы.

Как вы можете видеть, он ломается в Safari. Но похоже, что CSS должен работать, и это работает в Chrome. Почему он ломается в Safari? Как я могу это исправить?

PS: Я открыт для альтернативных подходов к созданию дочернего элемента на 100% высотой его родительского элемента flex, если это необходимо.

Ответ №1:

Если вы создадите родительский дисплей: flex; flex-direction: column; и дочерний flex-grow:1; это должно сработать.

 <div class="parent">
  <div class="child">
      Content
  </div>
</div>
  
 .parent{
  display:flex;
  flex-direction: column;
  background:blue;
  height: 300px;
}

.child{
  flex-grow:1;
  background:red;
  display:flex;
  align-items:center;
}
  

Проверьте этот код

Комментарии:

1. Это то, что у меня уже есть в Codepen : #flex_outer_container { display: flex; flex-direction: column;} .flex_item { flex-grow: 1;} . Вы пробовали редактировать Codepen, и какие изменения работают, если да?

2. @tog22 вы должны удалить таблицы, проверьте код пера в моем ответе

3. Ах, спасибо, но суть моего вопроса заключалась в том, что мне нужна таблица (или display: table элемент), чтобы выровнять текст по вертикали посередине. Извините, мой вопрос был недостаточно ясен, отредактирован. Можете ли вы увидеть, что происходит не так в моем конкретном Codepen?

4. Вам не нужна таблица для выравнивания текста по вертикали. Просто используйте гибкий контейнер. Я обновил свой code pen.

5. О, здорово, я не знал о align-items возможностях flexbox! Я очень ценю вашу помощь, искреннее спасибо, Габриэль 🙏 Я бы принял ваш ответ, но я оставлю свой вопрос открытым на случай, если кто-нибудь сможет объяснить, было ли что-то не так с моим оригинальным CSS или это была просто ошибка Safari, поскольку это поможет мне лучше понять CSS.