CSS - два гибких столбца

Я работаю над изменением дизайна веб-страницы со структурой, похожей на эту

.container {
  display:flex;
  flex-wrap: wrap;
  width: 700px;
  background-color: grey;
  justify-content: space-between;
}

.container__txt {
  display: flex;
  width: 100%;
  background-color: green;
}

.container-block {
  display: flex;
  width: calc(50% - 9px);
  background-color: red;
 }
<div class = "container">
  <div class = "container__txt">I am a text div</div>
  <div class = "container-block">I am a block div</div>
  <div class = "container-block">I am a block div</div>
 </div>

Я пытаюсь добиться определенного поведения. Я бы хотел, чтобы блоки были полной ширины тогда и только тогда, когда другого блока здесь нет.

Я не могу найти хорошее решение, потому что у контейнера есть еще один дочерний элемент, который является текстовым div. Я не могу прикоснуться к структуре html или добавить js; поэтому решение должно быть чистым CSS.

Если у кого-то есть идея, как этого добиться, я буду благодарен.

Надеюсь, я не упустил ни одного аспекта проблемы.

Кажется, у вас отсутствуют какие-либо действительные правила flex. flex: 1 0 100% для верхней колонки, flex: 1 1 auto; для остальных. Готово?

Niet the Dark Absol 24.08.2018 14:58
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
0
1
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Добавление flex: 1 на ваш .container-block должно решить вашу проблему:

.container {
  display:flex;
  flex-wrap: wrap;
  width: 700px;
  background-color: grey;
  justify-content: space-between;
}

.container__txt {
  display: flex;
  width: 100%;
  background-color: green;
}

.container-block {
  display: flex;
  flex: 1;
  background-color: red;
}

.container-block + .container-block {
  margin-left: 18px;
}
<div class = "container">
  <div class = "container__txt">I am a text div</div>
  <div class = "container-block">I am a block div</div>
  <div class = "container-block">I am a block div</div>
</div>

<div class = "container">
  <div class = "container__txt">I am a text div</div>
  <div class = "container-block">I am a block div</div>
</div>

Вы можете узнать больше о гибком свойстве здесь.

Я не думал о правиле ".container-block + .container-block". Ваше решение в порядке. Спасибо !

XanX3601 24.08.2018 17:31

.container {
  background-color: grey;
}

.container__txt {
   display: flex;
  background-color: green;
}

.container__div {
   display: flex;
  background-color: green;
}

.container-block {
  display: flex;
  flex:1;
  background-color: red;
 }
 <div class = "container">
    <div class = "container__txt">I am a text div</div>
    <div class = "container__div">
      <div class = "container-block">I am a block div</div>
      <div class = "container-block">I am a block div</div>
    </div>
 </div>
 <br>
 <br>
  <div class = "container">
    <div class = "container__txt">I am a text div</div>
    <div class = "container__div">
      <div class = "container-block">I am a block div</div>
    </div>
 </div>

https://jsfiddle.net/Sampath_Madhuranga/t8h671eb/11/

Попробуйте этот код. Работает нормально.

@ XanX3601, дайте мне знать, если вам понадобится помощь.

VSM 24.08.2018 15:07

Я пробовал что-то вроде этого, но с этим решением среднее пространство потеряно

XanX3601 24.08.2018 17:29

@ XanX3601, можно использовать свойство: nth-child и добавить туда пробел. проверьте ниже скрипку. jsfiddle.net/Sampath_Madhuranga/t8h671eb/20

VSM 24.08.2018 18:54

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