Как сделать макет одной строки с вертикальным центрированием в сетке CSS? - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь сделать один ряд, вертикально центрированный макет, используя сетку CSS.Вот примерный набросок:

enter image description here Примечание:

  • У меня есть один ряд предметов
  • Предметы (вероятно) собираютсябыть одинаковой ширины
  • Я не знаю много предметов, которые у меня есть (поэтому я не хочу говорить «200px» восемьдесят раз)
  • Предметы разной высоты, нодолжен быть вертикально центрирован

(Случайное предложение, потому что уценка делает странные вещи)

<div class="wrapper">
    <div class="box a">A</div>
    <div class="box b">B</div>
    <div class="box c">C</div>
</div>


.wrapper {
    display: grid;
    grid-gap: 10px;
    grid-auto-columns: 200px;
    background-color: #fff;
    color: #444;
    .box {
        background-color: #444;
        color: #fff;
        border-radius: 5px;
        padding: 20px;
        font-size: 150%;
    }
}

Я пробовал это, но он действительно хочет сделать несколько строк вместо нескольких столбцов наодин ряд

Могу ли я сделать один ряд, вертикально центрированный макет в сетке CSS?Если да, то как?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Чтобы объединить все элементы в один ряд, установите для них значение grid-row: 1.

Чтобы центрировать элементы, установите для контейнера значение align-items: center или для каждого элемента значение align-self: center.(align-self по умолчанию наследует значение align-items).

.wrapper {
  display: grid;
  align-items: center;     /* new */
}

.box {
  grid-row: 1;             /* new */
}

.box.a { height: 200px; }
.box.b { height: 20px;  }
.box.c { height: 120px; }
.box.d { height: 50px;  }


/* non-essential decorative styles */

.wrapper {
  grid-gap: 10px;
  background-color: #fff;
  color: #444;
}
.box {
  background-color: #444;
  color: #fff;
  border-radius: 5px;
  padding: 20px;
  font-size: 150%;
}
body {
  margin: 40px;
}
<div class="wrapper">
  <div class="box a">A</div>
  <div class="box b">B</div>
  <div class="box c">C</div>
  <div class="box d">D</div>
</div>
0 голосов
/ 11 июня 2018

Вот рабочий пример.Он работает так же хорошо, как и другой ответ, но использует другой CSS, так как я задал вопрос, который, как мне показалось, целесообразно наградить другим.Нажмите «Выполнить» ниже:

  • grid-auto-flow: column; заставляет элементы перемещаться по столбцам, т. Е. В одну строку
  • align-self: center; выполняет вертикальное центрирование

.wrapper {
    display: grid;
    grid-auto-flow: column;  
}

.box {
    align-self: center;
}

/* Additional styles below */

.wrapper {
  grid-gap: 10px;
  background-color: #fff;
  color: #444;
}

.box {
    background-color: #444;
    color: #fff;
    border-radius: 5px;
    padding: 20px;
    font-size: 150%;
}

body {
  margin: 40px;
}
  
.box.a {
     height: 200px;
}
    
.box.b {
  height: 20px;
}

.box.c {
  height: 120px;
}
<div class="wrapper">
  <div class="box a">A</div>
  <div class="box b">B</div>
  <div class="box c">C</div>
  <div class="box c">D</div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...