Make a CSS Grid fit the minimum amount of space
You can use inline-grid
- see demo below:
.row {
width: 300px;
border: 1px solid black;
display: flex;
}
.otherstuff {
flex-grow: 1;
}
.grid {
display: inline-grid; /* changed */
grid-auto-flow: column;
gap: 10px 10px;
}
.cell {
border: 1px solid blue;
}
<div class='row'>
<div class='stuff'>Stuff</div>
<div class='otherstuff'>
<div class='grid'>
<div class='cell'>Cell 1</div>
<div class='cell'>Cell 2</div>
</div>
</div>
</div>
You can use grid-auto-columns: min-content
or grid-auto-columns: max-content
, this property will affect only columns with the size not set.
The
grid-auto-columns
CSS property specifies the size of an implicitly-created grid column track.
.row {
width: 300px;
border: 1px solid black;
display: flex;
}
.otherstuff {
flex-grow: 1;
}
.grid {
display: grid;
grid-auto-flow: column;
gap: 10px 10px;
grid-auto-columns: max-content;
}
.cell {
border: 1px solid blue;
}
<div class='row'>
<div class='stuff'>Stuff</div>
<div class='otherstuff'>
<div class='grid'>
<div class='cell'>Cell 1</div>
<div class='cell'>Cell 2</div>
</div>
</div>
</div>
Do the flex-grow: 0
in otherstuff
class. See below:
.row {
width: 300px;
border: 1px solid red;
display: flex;
}
.otherstuff {
flex-grow: 0;
}
.grid {
display: grid;
grid-auto-flow: column;
gap: 10px 10px;
}
.cell {
border: 1px solid blue;
}
<div class='row'>
<div class='stuff'>Stuff</div>
<div class='otherstuff'>
<div class='grid'>
<div class='cell'>Cell 1</div>
<div class='cell'>Cell 2</div>
</div>
</div>
</div>