Простая проблема гибкости - почему элементы гибкости не имеют одинакового размера без установки основы гибкости

Мне интересно, правильно ли я понимаю flex-shrink и flex-grow. Я пытаюсь понять, почему гибкие дети не одного размера. Я просто хочу иметь возможность добавлять как можно больше гибких дочерних элементов (т. е. .flex-item div) в содержащий родительский div, и чтобы они изменяли размер до той же ширины, что и друг друга. В этом случае текст расширяет ширину одного из них.

Как это можно исправить, не добавляя жестко закодированный flex-basis?

Любое объяснение было бы очень полезно. Спасибо за любую помощь здесь.

#container {
  display: flex;
  justify-content: space-between;
  width: 100%;
  background: pink;
  overflow: hidden; /* words should wrap anyway... */
}
.flex-item {
  border: 1px solid red;
  flex: 0 0 auto; /* should make flex items equal size */
  word-wrap: break-all;
  /* flex-basis: 0; makes flex items too narrow; they should stretch to fill width equally depending on no of flex items inside containing div. Also shouldn't require hard-coding the width */
}
<div id='container'>
  <div class='flex-item'>
    <p>ri bergber gyiruek weeuyrg eir7 gueruygergb e8iygerg ier7 guer y org ery8g e g8e ergerg</p>
  </div>
  <div class='flex-item'>
    <p>ri bergber gyiruew</p>
  </div>
  <div class='flex-item'>
    <p>ri bergber gyiruek wveeuyrg eir7 gueruygergb e8iygerg ier7 guer y org ery8g e g8e ergervwev we wefwew fwef we fwf wek wveeuyrg eir7 gueruygergb e8iygerg ier7 guer y org ery8g e g8e ergervwev we wefwew fwef we fwf wrgber gyiruek wveeuyrg eir7 gueruygergb e8iygerg ier7 guer y org ery8g e g8e ergervwev we wefwew fwef we fwf wek wveeuyrg eir7 gueruygergb e8iygerg ier7 guer y org ery8g e g8e ergervwev we wefwew fwef we fwf wg</p>
  </div>
</div>

Кодовое слово: https://codepen.io/anon/pen/JgRawo

Вас больше интересует Зачем или решение?

Temani Afif 26.07.2019 12:18

меня больше интересует почему

user8758206 26.07.2019 12:24

но вы уже приняли решение, поэтому сделайте его дубликатом: stackoverflow.com/a/29503264/8620333

Temani Afif 26.07.2019 12:25

что забавно, так это то, что вы приняли ответ, который точно такой же, как вопрос, который я связал, поэтому, если вы действительно думаете, что это не дубликат, мне больше нечего сказать

Temani Afif 27.07.2019 17:42
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
4
395
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это можно сделать с помощью всего лишь свойства flex: 1, которое устанавливает значения flex-grow: 1, flex-shrink: 1 и flex-basis в разных браузерах по-разному, в хроме — 0%.

Таким образом, каждый элемент увеличивается до одинакового размера, а его содержимое оборачивается в соответствии с его шириной.

С вашим значением flex: 0 0 auto вы устанавливаете flex-basis на «смотреть мое свойство ширины», которое будет зависеть от содержимого, а затем вы также говорите, что не сжиматься и не увеличиваться.

#container {
  display: flex;
  justify-content: space-between;
  background: pink;
  width: 100%;
}
.flex-item {
  flex: 1;
  border: 1px solid red;
}
<div id='container'>
  <div class='flex-item'>
    <p>ri bergber gyiruek weeuyrg eir7 gueruygergb e8iygerg ier7 guer y org ery8g e g8e ergerg</p>
  </div>
  <div class='flex-item'>
    <p>ri bergber gyiruew</p>
  </div>
  <div class='flex-item'>
    <p>ri bergber gyiruek wveeuyrg eir7 gueruygergb e8iygerg ier7 guer y org ery8g e g8e ergervwev we wefwew fwef we fwf wek wveeuyrg eir7 gueruygergb e8iygerg ier7 guer y org ery8g e g8e ergervwev we wefwew fwef we fwf wrgber gyiruek wveeuyrg eir7 gueruygergb
      e8iygerg ier7 guer y org ery8g e g8e ergervwev we wefwew fwef we fwf wek wveeuyrg eir7 gueruygergb e8iygerg ier7 guer y org ery8g e g8e ergervwev we wefwew fwef we fwf wg</p>
  </div>
</div>

Другие вопросы по теме