#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.