#html #css #flexbox #safari
#HTML #css — код #гибкий ящик #safari #css #flexbox
Вопрос:
Я получил этот код, работающий в Chrome, где содержимое первого гибкого элемента должно быть выровнено по низу и при необходимости растягивается:
body {
height:100vh;
color: white;
font-weight: bold;
font-size: 2em;
text-align: center;
}
.flex-container {
padding: 0;
margin: 0;
height: 100%;
display: flex;
flex-direction: column;
}
.flex-item {
background: tomato;
padding: 10px;
border: 5px solid red;
flex: 0 1 auto;
}
.flex-stretch {
height: 100%;
display: flex;
flex-direction: column;
justify-content: flex-end;
flex: 1 1 auto;
}
<div class="flex-container">
<div class="flex-item flex-stretch">1</div>
<div class="flex-item">2<br>2<br>2<br>2<br>2<br>2<br>2<br>2</div>
<div class="flex-item">3</div>
</div>
но в Safari он не учитывает содержимое первого гибкого элемента и сворачивается, если область просмотра меньше гибкого контейнера и требуется прокрутка.
Есть ли какая-то работа по решению этой проблемы?
Спасибо, это мой первый вопрос здесь 🙂
Вот кодовое имя: https://codepen.io/felphos/pen/GRZVKwY
Комментарии:
1. Вы установили
flex-shrink
значение 1 вflex-stretch
стилях класса. Попробуйтеflex: 1 0 auto
или дайте емуmin-height
значение, ниже которого он не должен сжиматься.2. Я не могу установить минимальную высоту, потому что это зависит от содержимого этого div, и мне также нужно, чтобы этот div уменьшался или увеличивался в соответствии с оставленным пространством. Если вы запустите фрагмент кода и нажмете на полную страницу, вы сможете увидеть желаемое поведение, когда есть место для увеличения div, в Chrome, очевидно 🙂
3. Я «решил» это с помощью JavaScript, где у меня есть div с содержимым внутри .flex-stretch div, и если высота этого div равна>= высоте .flex-stretch div, я меняю отображение .flex-stretch на block вместо flex. Пока все в порядке, но я бы хотел решить это с помощью CSS.
Ответ №1:
Поскольку вы используете flexbox, вы не должны определять высоту явно. Я думаю, что удаление height: "100%"
, а также установка .flex-stretch{flex: 1 0 auto;}
(0 flex-shrink) даст вам то, что вы хотите.
Комментарии:
1. Спасибо! Это именно то, что мне нужно!