Как сделать элементы flexbox одинаковой высоты и/или начинать с одной и той же точки

Я создаю карты flexbox для отображения трех элементов. Заголовок, <hr> и абзац. Длина текста заголовка варьируется, что создает разную высоту.

Я бы хотел, чтобы все заголовки имели одинаковую высоту, чтобы каждая карточка была одинаковой. Если это невозможно, я бы хотел, чтобы абзацы были выровнены по горизонтали на каждой карточке.

Я пытался присвоить заголовку свойство flex: 1, чтобы сдвинуть абзац вниз, но это создает слишком много места.

Вот кодовая ручка и демо:

  body {
  max-width: 1180px;
  margin: 0 auto;
  }
  h2,
  p {
  margin: 0;
  padding: 0;
  }
  h2 {
  font-size: 18px;
  }
  /*******************************************************/
  .cards {
    display: flex;
  }
  .card {
    border: 1px solid;
    display: flex;
    flex-direction: column;
    margin: 0 0 25px 0;
    width: 50%;
  }
  .card-title {
    text-transform: uppercase;
    text-align: center;
    margin: 0 0 25px 0;
  }
  .card-paragraph {
    text-align: center;
  }
  hr {
    height: 3px;
    width: 100%;
    background: #333;
  }
  /*******************************************************/
<body>

  <div class = "cards">
    <div class = "card">
      <div class = "card-title">
        Title one IS LONGER THAN TITLE TWO
      </div>
      <hr>
      <div class = "card-paragraph">  
        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum is simply dummy text.
      </div>
    </div>
    <div class = "card">
      <div class = "card-title">
        TITLE TWO
      </div>
      <hr>
      <div class = "card-paragraph">  
        Lorem Ipsum is simply dummy text of the printing and typesetting industry.
      </div>
    </div>
  </div>
  
</body>

Что я хочу:

Как сделать элементы flexbox одинаковой высоты и/или начинать с одной и той же точки

Что происходит:

Как сделать элементы flexbox одинаковой высоты и/или начинать с одной и той же точки

stackoverflow.com/questions/44488357/…
sheriffderek 10.04.2019 04:53
Улучшение производительности загрузки с помощью 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
1
424
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я бы предложил CSS Grid для чего-то вроде этого:

body {
  max-width: 1180px;
  margin: 0 auto;
}

h2,
p {
  margin: 0;
  padding: 0;
}

h2 {
  font-size: 18px;
}


/*******************************************************/

.cards {
  display: grid;
  grid-auto-columns: auto;
  grid-auto-rows: auto;
}

.card {
  border: 1px solid;
  grid-row: 1;
  display: grid;
  grid-auto-rows: 1fr;
}

.card-title {
  text-transform: uppercase;
  text-align: center;
  margin: 0 0 25px 0;
}

.card-paragraph {
  text-align: center;
}

hr {
  height: 3px;
  width: 100%;
  background: #333;
}


/*******************************************************/
<body>

  <div class = "cards">
    <div class = "card">
      <div class = "card-title">
        Title one IS LONGER THAN TITLE TWO Title one IS LONGER THAN TITLE TWO Title one IS LONGER THAN TITLE TWO
      </div>
      <hr>
      <div class = "card-paragraph">
        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum is simply dummy text.
      </div>
    </div>
    <div class = "card">
      <div class = "card-title">
        TITLE TWO
      </div>
      <hr>
      <div class = "card-paragraph">
        Lorem Ipsum is simply dummy text of the printing and typesetting industry.
      </div>
    </div>
  </div>

</body>

Любая причина, почему столбцы огромны?

Rich 10.04.2019 05:26

Это из-за нижнего поля 25px в .card-title.

Andy Hoffman 10.04.2019 05:38
Ответ принят как подходящий

Выравнивание контейнеров соседний флексбокс может оказаться невозможным — CSS Grid может быть хорошим выбором:

  • используйте display: contents на card или вообще удалите обертку

  • используйте сетку из двух столбцов и поместите card-title в первую строку, используя grid-row: 1

  • поместите card-paragraph в третий ряд, используя grid-row: 3, и поместите hr между ними, используя grid-row: 2.

См. демо ниже:

body {
  max-width: 1180px;
  margin: 0 auto;
}

h2,
p {
  margin: 0;
  padding: 0;
}

h2 {
  font-size: 18px;
}

.cards {
  /* display: flex; */
  display: grid;
  grid-template-columns: 1fr 1fr;
}

.card {
  /* border: 1px solid;
  display: flex;
  flex-direction: column;
  margin: 0 0 25px 0;
  width: 50%;*/
  display: contents; /* added */
}

.card-title {
  text-transform: uppercase;
  text-align: center;
  /* margin: 0 0 25px 0;*/
  grid-row: 1; /* added */
  border: 1px solid;  /* added */
}

.card-paragraph {
  text-align: center;
  grid-row: 3; /* added */
  border: 1px solid;  /* added */
}

hr {
  height: 3px;
  /* width: 100%; */
  background: #333;
  margin: 0; /* added */
  grid-row: 2; /* added */
}
<div class = "cards">
    <div class = "card">
      <div class = "card-title">
        Title one IS LONGER THAN TITLE TWO
      </div>
      <hr>
      <div class = "card-paragraph">
        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum is simply dummy text.
      </div>
    </div>
    <div class = "card">
      <div class = "card-title">
        TITLE TWO
      </div>
      <hr>
      <div class = "card-paragraph">
        Lorem Ipsum is simply dummy text of the printing and typesetting industry.
      </div>
    </div>
  </div>

Насколько поддерживается использование display: grid? Ваш ответ хорошо решает мою проблему, однако HR находится внизу контейнера для карт? Обновлено: я изменил свойство grid-row на 3 вместо 2

Rich 10.04.2019 05:19

@Rich исправил hr... сетка поддерживается в современных браузерах, у вас нет в ней IE... caniuse.com/#search=css-сетка

kukkuz 10.04.2019 05:25

Ok. Вид необходимого IE, но все же хорошее решение. Нет способа выровнять такой контент, просто используя flex?

Rich 10.04.2019 05:32

и поддержка display: contents - caniuse.com/#search=display%3A%20contents

kukkuz 10.04.2019 05:32

@ Rich нет, вы не можете выровнять гибкие элементы в соседние флексбоксы .... см. другое обсуждение здесь :)

kukkuz 10.04.2019 05:35

Это возможно с flexbox только путем установки высоты заголовка: .card-title { ... height: 50px; } Кодепен

Но тогда, если у меня есть длинный заголовок, превышающий 50 пикселей по высоте, текст выльется из контейнера. Не решение.

Rich 11.04.2019 05:26

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