Вложенные гибкие поля не переносятся в Chrome или IE

#html #css #internet-explorer #google-chrome #flexbox

#HTML #css #internet-explorer #google-chrome #flexbox

Вопрос:

У меня есть несколько вложенных гибких полей, которые я хочу использовать для адаптивного веб-сайта, и они правильно работают в firefox, но не в Chrome или IE. Ссылки должны быть в состоянии переноситься так, чтобы они находились друг над другом, когда вы уменьшаете экран.

Ссылки здесь переносятся правильно: http://jsfiddle.net/6796b /

Но когда они находятся в другом гибком поле, они перестают переноситься и переполняться (Примечание: только зеленые «ссылки» не переносятся / не укладываются должным образом. Все остальное работает так, как задумано.): http://jsfiddle.net/3525C/8 /

HTML:

 <div class="header">
    <div class="logo">logo</div>
    <div class="nav">
        <div class="link">link one</div>
        <div class="link">link two</div>
        <div class="link">link three</div>
    </div>
</div>
  

CSS:

 .header {
    text-align: center;
    display: flex; /* If I take this line out the links wrap properly again, but everything else breaks. */
    flex-flow: row wrap;
}
.logo {
    flex: 1 0 auto;
    min-width: 100px;
    background-color: red;
}
.nav {
    flex: 1 0 auto;
    background-color: lightgray;
    text-align: center;
}
.link {
    display: inline-block;
    background-color: green;
}
  

Ответ №1:

Вы должны применить flex-shrink значение 1 , чтобы гибкий элемент был гибким. См. Редактирование 9.

Значение по умолчанию: flex: 0 1 auto что позволяет гибкому элементу «сжиматься до минимального размера при нехватке места«

В вашем случае настройка flex: 1 0 auto позволяет nav расти, но 0 не позволяет ей уменьшаться даже в ситуациях переполнения (ваш случай здесь с встроенными блоками).

т.е. Если вы хотите, чтобы «все» помещалось в гибкий контейнер, установите для его элементов flex значение flex: auto;

РЕДАКТИРОВАТЬ: изменено flex: 1 1 auto; для flex: auto; соображений совместимости из-за auto возможной замены ключевым словом ‘main-size` в ближайшем будущем.

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

1. Потрясающе! Это работает именно так, как я хотел. Только что нашел flexboxes сегодня, поэтому они все еще действительно сбивают с толку. Я думал, что у меня это было правильно, потому что, когда я поместил «навигацию» сам по себе, это сработало. См . jsfiddle.net/6796b никаких обязательств, но почему это работает само по себе?

2. Это работает там, потому что ваш контейнер не гибкий. Гибкий интерфейс может быть очень сложным… Перед использованием помните о его поддержке браузером и возможных резервных вариантах, необходимых для обратной совместимости со старыми браузерами.