Сделайте колонку в CSS Grid динамической ширины настолько маленькой, насколько это возможно, чтобы соответствовать контексту - PullRequest
2 голосов
/ 05 апреля 2019

Можно ли сделать несколько столбцов в CSS Grid гибкой ширины, чтобы соответствовать размеру ее содержимого?

Как и на картинке - это элемент списка, изображение слева и небольшая информация в верхнем правом углу должны иметь динамическую ширину и соответствовать размеру контента, две другие области должны занимать все доступное пространство.

enter image description here

Важно иметь динамическую ширину, которая соответствует его содержимому для этих двух областей, а не фиксированную ширину, как в x раз меньше, чем строка сетки по умолчанию.

.grid-container {
  display:             grid;
  grid-template-areas: 'small1 big1 small2'
                       'small1 big2 big2';     
}

.grid-container > .small1 { grid-area: small1 }
.grid-container > .small2 { grid-area: small2 }
.grid-container > .big1   { grid-area: big1 }
.grid-container > .big2   { grid-area: big2 }

.grid-container > * { 
  margin: 5px; 
  padding: 5px; 
  border: 1px solid black; 
 }
<div class="grid-container">
  <div class="small1">small1<br/>small1<br/>small1</div>
  <div class="small2">small2</div>
  <div class="big1">big1</div>
  <div class="big2">big2</div>
</div>

1 Ответ

2 голосов
/ 05 апреля 2019

Конечно

grid-template-columns: auto 1fr auto;

сделает это.

auto

Это ключевое слово, котороеидентичен максимальному содержанию, если это максимум.Как минимум, он представляет наибольший минимальный размер (как определено min-width / min-height) элементов сетки, занимающих дорожку сетки.

MDN

.grid-container {
  display: grid;
  grid-template-columns: auto 1fr auto;
  grid-template-areas: 'small1 big1 small2' 'small1 big2 big2';
}

.grid-container>.small1 {
  grid-area: small1
}

.grid-container>.small2 {
  grid-area: small2
}

.grid-container>.big1 {
  grid-area: big1
}

.grid-container>.big2 {
  grid-area: big2
}

.grid-container>* {
  margin: 5px;
  padding: 5px;
  border: 1px solid black;
}
<div class="grid-container">
  <div class="small1">small1<br/>small1<br/>small1</div>
  <div class="small2">small2</div>
  <div class="big1">big1</div>
  <div class="big2">big2</div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...