Вопрос о стиле сетки CSS с использованием изменений диапазона при использовании выравнивания

#css #css-grid #vertical-alignment

Вопрос:

У меня есть сетка, в которой у меня два столбца и три строки, но первый столбец охватывает все 3 строки. Первый столбец содержит текст, второй столбец содержит 3 строки текста, по одной на строку.

Я хочу, чтобы высота столбца 1 соответствовала высоте столбца 2 в зависимости от цвета фона элементов содержимого сетки.

Это прекрасно работает, если я рад, что левый столбец выровнен в верхней части 3 строк. Но когда я пытаюсь выровнять его по вертикали, используя align-self, цвет фона уменьшается, чтобы покрыть только одну строку.

Возможно, в JSFiddle это будет сказано более четко, чем в моем описании.

HTML:

 <div class="wrapper">

  <div class="box title1">Text</div>
  <div class="box">Question 1</div>
  <div class="box">Question 2</div>
  <div class="box">Question 3</div>

  <div class="wide">amp;nbsp;</div>

  <div class="box title2">Text</div>
  <div class="box">Question 1</div>
  <div class="box">Question 2</div>
  <div class="box">Question 3</div>

</div>
 

CSS:

 body {
  margin: 20px;
  font-family: "Garamond", "Times New Roman", serif;
}

.box {
  background-color: lightgrey;
  padding: 5px;
}

.wrapper {
  display: grid;
  grid-template-columns: 8em 8em;
}

.wide {
  grid-column: span 2;
}

.title1 {
  grid-row: span 3;
  font-size: 150%;
  font-weight: bold;
}

.title2 {
  grid-row: span 3;
  align-self: center;
  font-size: 150%;
  font-weight: bold;
}
 

Ссылка на JSFiddle

Как я могу выровнять метку по вертикали, но также подобрать высоту цвета фона? Я попытался добавить атрибуты, такие как «высота:100%;», ко второму названию, но все меняется немного по-другому. Я использую Firefox, но, конечно, мне нужно кроссбраузерное решение, насколько это возможно.

Ответ №1:

Сделайте элемент display:flex , а затем align-items:center

 body {
  margin: 20px;
  font-family: "Garamond", "Times New Roman", serif;
}

.box {
  background-color: lightgrey;
  padding: 5px;
}

.wrapper {
  display: grid;
  grid-template-columns: 8em 8em;
}

.wide {
  grid-column: span 2;
}

.title1 {
  grid-row: span 3;
  font-size: 150%;
  font-weight: bold;
}

.title2 {
  grid-row: span 3;
  display: flex;
  align-items: center;
  font-size: 150%;
  font-weight: bold;
} 
 <div class="wrapper">

  <div class="box title1">Text</div>
  <div class="box">Question 1</div>
  <div class="box">Question 2</div>
  <div class="box">Question 3</div>

  <div class="wide">amp;nbsp;</div>

  <div class="box title2">Text</div>
  <div class="box">Question 1</div>
  <div class="box">Question 2</div>
  <div class="box">Question 3</div>

</div> 

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

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