最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to make CSS grid column width to be "max-content" but not bigger than 50% - Stack Overflow

programmeradmin1浏览0评论

How to make CSS grid column width to be "max-content" but not bigger than 50%? So it looks something like this when first column content exceeds 50% width. And like this when first column text is short

I thought something like minmax(max-content, 1fr) should work, but seems like 1fr is never applied for some reason.

.grid {
  display: grid;
}

.grid-1 {
  grid-template-columns: max-content 1fr;
}

.grid-2 {
  grid-template-columns: minmax(max-content, 1fr) 1fr;
}

.grid + .grid {
  margin-top: 20px;
}

.grid-item {
  padding: 16px;
  background: gray;
  border: solid 1px lightgray;
}

.grid-description {
  grid-column-end: 3;
  grid-column-start: 1;
  background: teal;
}

.page {
  width: 100%;
  background: black;
}
<div class="page">
  <div class="grid grid-1">
    <div class="grid-description">Example 1</div>
    <div class="grid-item">User Name</div>
    <div class="grid-item">Siobhan Hill</div>
    <div class="grid-item">Job</div>
    <div class="grid-item">Software Developer</div>
  </div>

  <div class="grid grid-2">
    <div class="grid-description">Example 2</div>
    <div class="grid-item">Name</div>
    <div class="grid-item">Siobhan Hill</div>
    <div class="grid-item">Job</div>
    <div class="grid-item">Software Developer</div>
    <div class="grid-item">Pneumonoultramicroscopicsilicovolcanoconiosis Pneumonoultramicroscopicsilicovolcanoconiosis Pneumonoultramicroscopicsilicovolcanoconiosis</div>
    <div class="grid-item">Software Developer</div>
  </div>
</div>

How to make CSS grid column width to be "max-content" but not bigger than 50%? So it looks something like this when first column content exceeds 50% width. And like this when first column text is short

I thought something like minmax(max-content, 1fr) should work, but seems like 1fr is never applied for some reason.

.grid {
  display: grid;
}

.grid-1 {
  grid-template-columns: max-content 1fr;
}

.grid-2 {
  grid-template-columns: minmax(max-content, 1fr) 1fr;
}

.grid + .grid {
  margin-top: 20px;
}

.grid-item {
  padding: 16px;
  background: gray;
  border: solid 1px lightgray;
}

.grid-description {
  grid-column-end: 3;
  grid-column-start: 1;
  background: teal;
}

.page {
  width: 100%;
  background: black;
}
<div class="page">
  <div class="grid grid-1">
    <div class="grid-description">Example 1</div>
    <div class="grid-item">User Name</div>
    <div class="grid-item">Siobhan Hill</div>
    <div class="grid-item">Job</div>
    <div class="grid-item">Software Developer</div>
  </div>

  <div class="grid grid-2">
    <div class="grid-description">Example 2</div>
    <div class="grid-item">Name</div>
    <div class="grid-item">Siobhan Hill</div>
    <div class="grid-item">Job</div>
    <div class="grid-item">Software Developer</div>
    <div class="grid-item">Pneumonoultramicroscopicsilicovolcanoconiosis Pneumonoultramicroscopicsilicovolcanoconiosis Pneumonoultramicroscopicsilicovolcanoconiosis</div>
    <div class="grid-item">Software Developer</div>
  </div>
</div>

Share Improve this question edited Dec 7, 2022 at 13:00 bapafes482 asked Dec 7, 2022 at 10:40 bapafes482bapafes482 5306 silver badges20 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 4

The key to solving this is to use minmax for both of your columns.

minmax(0, max-content) minmax(50%, 1fr) will set your first column to its max content width, but never wider than 50%.

.grid {
  display: grid;
  grid-template-columns: minmax(0, max-content) minmax(50%, 1fr);
}

.grid-item {
  padding: 16px;
  background: lightgray;
  border: solid 1px whitesmoke;
  overflow: auto;
}

.grid-description {
  grid-column-end: 3;
  grid-column-start: 1;
  background: turquoise;
}

.page {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 20px;
}
<div class="page">
  <div class="grid">
    <div class="grid-description">Example 1</div>
    <div class="grid-item">My Name</div>
    <div class="grid-item">Bob Hill</div>
    <div class="grid-item">My Job</div>
    <div class="grid-item">Software Developer</div>
  </div>
  
  <div class="grid">
    <div class="grid-description">Example 2</div>
    <div class="grid-item">My Name</div>
    <div class="grid-item">Bob Hill</div>
    <div class="grid-item">My Job</div>
    <div class="grid-item">Software Developer</div>
    <div class="grid-item">Pneumonoultramicroscopicsilicovolcanoconiosis Pneumonoultramicroscopicsilicovolcanoconiosis Pneumonoultramicroscopicsilicovolcanoconiosis</div>
    <div class="grid-item">Software Developer</div>
  </div>
</div>

Is this what you are wanting? If so, all I did was replace the max-content inside of minmax to be auto, so instead of minmax(max-content, 1fr) it is minmax(auto, 1fr).

.grid {
  display: grid;
}

.grid-1 {
  grid-template-columns: max-content 1fr;
}

.grid-2 {
  grid-template-columns: minmax(auto, 1fr) 1fr;
}

.grid + .grid {
  margin-top: 20px;
}

.grid-item {
  padding: 16px;
  background: gray;
  border: solid 1px lightgray;
}

.grid-description {
  grid-column-end: 3;
  grid-column-start: 1;
  background: teal;
}

.page {
  width: 100%;
  background: black;
}
<div class="page">
  <div class="grid grid-1">
    <div class="grid-description">Example 1</div>
    <div class="grid-item">User Name</div>
    <div class="grid-item">Siobhan Hill</div>
    <div class="grid-item">Job</div>
    <div class="grid-item">Software Developer</div>
  </div>

  <div class="grid grid-2">
    <div class="grid-description">Example 2</div>
    <div class="grid-item">Name</div>
    <div class="grid-item">Siobhan Hill</div>
    <div class="grid-item">Job</div>
    <div class="grid-item">Software Developer</div>
    <div class="grid-item">Pneumonoultramicroscopicsilicovolcanoconiosis Pneumonoultramicroscopicsilicovolcanoconiosis Pneumonoultramicroscopicsilicovolcanoconiosis</div>
    <div class="grid-item">Software Developer</div>
  </div>
</div>

发布评论

评论列表(0)

  1. 暂无评论