Flexbox - выравнивание базовых элементов в нескольких столбцах - PullRequest
1 голос
/ 10 июня 2019

Есть ли способ добиться, чтобы строки в столбцах бок о бок были выровнены по базовой линии?

В этом примере только «А» выровнено правильно. То, что я хочу, это сделать выравнивание базовой линии также "B" и "C" с той же HTML-структурой.

https://jsfiddle.net/hxzuar7f/

Я знаю, что что-то подобное будет работать

<div class="row">
  <div class="column">A</div>
  <div class="column">A</div>
  <div class="column">A</div>
</div>
<div class="row">
  <div class="column">B</div>
  <div class="column">B</div>
  <div class="column">B</div>
</div>

Но я хочу поработать над этим

<div class="container">
    <div class="element">
        <div class="row">
            <h1>A</h1>
        </div>
        <div class="row">
            <div>B</div>
        </div>
        <div class="row">
            <div>C</div>
        </div>
    </div>
    <div class="element">
        <div class="row">
            <div>A</div>
        </div>
        <div class="row">
            <div>B</div>
        </div>
    </div>
</div>

(зеленые линии правильные, красные линии неправильные)

вот чего я хочу достичь с помощью CSS: this is what I want to achieve with CSS

вот что я получил сейчас: this is what I got now

1 Ответ

0 голосов
/ 13 июня 2019

Решение 1: столбец → строка

Это потому, что ваш элемент находится в столбце, а не в строке.Символ align-items: baseline работает, когда элементы выровнены по горизонтали.Так что лучший способ получить то, что на вашем изображении - это flex-direction: row, например:

h1, h3, div {
  display: flex;
  align-items: baseline;
  flex-direction: row;
  box-sizing: border-box;
}

.element {
  display: flex;
  padding: 20px;
  width: 200px;
  justify-content: space-between;
}

.container {
  width: 100%;
  display: flex;
  flex-direction: column;
}

.row {
  display: flex;
}
<div class="container">
    <div class="element">
      <div class="row">
        <h1>A</h1>
      </div>
      <div class="row">
        <div>B</div>
      </div>
      <div class="row">
        <div>C</div>
      </div>
    </div>
    <div class="element">  
      <div class="row">
        <div>A</div>
      </div>
      <div class="row">
        <div>B</div>
      </div>
    </div>
    <div class="element">
      <div class="row">
        <div>A</div>
      </div>
      <div class="row">
        <h3>B</h3>
      </div>
      <div class="row">
        <div>C</div>
      </div>
    </div>
</div>

Решение 2: добавить margin-bottom

Если вы действительно хотите сохранить элемент в столбце, вам нужно добавитьmargin-bottom к каждому row элементу.Но удалите некоторые отступы h1 и h2.Как это:

h1, h3, div {
  display: flex;
  align-items: baseline;
  flex-direction: row;
  box-sizing: border-box;
  margin:0;
}

.element {
  display: flex;
  padding: 20px;
  width: 200px;
  flex-direction: column;
}

.container {
  flex-direction: row;
}

.row {
  margin-bottom: 40px;
  display: flex;
}
<div class="container">
    <div class="element">
      <div class="row">
        <h1>A</h1>
      </div>
      <div class="row">
        <div>B</div>
      </div>
      <div class="row">
        <div>C</div>
      </div>
    </div>
    <div class="element">  
      <div class="row">
        <div>A</div>
      </div>
      <div class="row">
        <div>B</div>
      </div>
    </div>
    <div class="element">
      <div class="row">
        <div>A</div>
      </div>
      <div class="row">
        <h3>B</h3>
      </div>
      <div class="row">
        <div>C</div>
      </div>
    </div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...