В iOS Safari, когда я создаю div, это гибкий элемент, а также делает его гибким контейнером, его высота не растягивается, чтобы соответствовать его содержимому.Однако, если он не сделан из гибкого контейнера, его высота растягивается, чтобы соответствовать его содержимому.
Для уточнения - я использую css flexbox, чтобы поместить нижний колонтитул внизу страницы.Тело страницы имеет два элемента div - «maincontents» и «footer».Даже если в div «maincontents» мало или нет содержимого, нижний колонтитул все равно останется в нижней части окна.И если div «maincontents» имеет много контента, он может сдвинуть нижний колонтитул по мере необходимости.Эта идея была легко реализована во flexbox, сделав тело страницы флекс-контейнером и установив для «maincontents» значение «flex: 1» и «footer» в значение «flex: 0», чтобы «maincontents» занимал все доступное пространство, а«нижний колонтитул» выдвигается к нижней части окна.Он хорошо работает во всех современных браузерах, включая iOS Safari.
Проблема возникает, если я также сам делаю «maincontents» во флексбоксе (используя display: flex).В iOS Safari нижний колонтитул теперь всегда остается в нижней части окна, даже если в основном контенте много контента, который должен еще больше подтолкнуть нижний колонтитул;вместо этого «maincontents» в конечном итоге продолжает находиться под «нижним колонтитулом», а не толкает его вниз.
Я сделал макет barebones этого на jsfiddle.https://jsfiddle.net/8xs1rocu/
Вот что вы увидите, если откроете эту скрипку на рабочем столе окна (chrome / ff / ie11)
И вот чтовы бы увидели, открываете ли вы его на ipad или iphone (сафари).
Обратите внимание, что в iOS-сафари нижний колонтитул не вытесняется контентом, и вместо этого контент попадает под него .Это не происходит в Chrome / FF / IE11 на рабочем столе;в этих браузерах нижний колонтитул сдавливается содержимым «maincontents».
Если вы удалите строку «display: flex», то она отлично работает и в ios safari, так же, как и в других браузерах.Однако мне нужна эта строка «display: flex», потому что я буду помещать другой контент в «maincontents», который должен быть определен определенным образом с помощью css flexbox.
Вставка кода фрагмента jsfiddle прямо здесь:
html, body {
height: 100%;
display: flex;
flex-direction: column;
}
.maincontents {
flex: 1;
display: flex; /* if you remove this line it works on Safari */
}
.footer {
flex: 0;
background-color: green;
}
<html>
<head></head>
<body>
<div class="maincontents">
Main contents1 <br />
Main contents2 <br />
Main contents3 <br />
Main contents4 <br />
Main contents5 <br />
Main contents6 <br />
Main contents7 <br />
Main contents8 <br />
Main contents9 <br />
Main contents10 <br />
Main contents11 <br />
Main contents12 <br />
</div>
<div class="footer">
Footer1 <br />
Footer2 <br />
Footer3 <br />
Footer4 <br />
Footer5 <br />
Footer6 <br />
Footer7 <br />
</div>
</body>
</html>