英文:
Shrink-wrap flexbox with wrapping flex-items so it can be centered
问题
I have a flexbox with wrapping contents. How can I shrinkwrap the flexbox to its contents? The root problem I'm trying to solve is to center the flexbox. This image describes my issue:
How can I achieve this? Is it possible in pure CSS? I don't know beforehand if the flexbox will wrap to 1, 2, or 3 columns. The width of the elements is known. The height would preferably be unknown, but if it makes it a lot easier, I can decide on a constant height.
Neither width:min-content
, width:max-content
, width:fit-content
nor inline-flex
appear to solve the problem.
JS Fiddle: https://jsfiddle.net/oznts5bv/
.container {
display:flex;
flex-wrap:wrap;
border:1px dashed magenta;
}
.container div {
width:100px;
height:60px;
border:1px solid black;
}
<div class="container">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
英文:
I have a flexbox with wrapping contents. How can I shrinkwrap the flexbox to its contents? The root problem I'm trying to solve is to center the flexbox. This image describes my issue:
How can I achieve this? Is it possible in pure CSS? I don't know beforehand if the flexbox will wrap to 1, 2 or 3 columns. The width of the elements is known. The height would preferably be unknown, but if it makes it a lot easier, I can decide on a constant height.
Neither width:min-content
, width:max-content
, width:fit-content
nor inline-flex
appear to solve the problem.
JS Fiddle: https://jsfiddle.net/oznts5bv/
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-css -->
.container {
display:flex;
flex-wrap:wrap;
border:1px dashed magenta;
}
.container div {
width:100px;
height:60px;
border:1px solid black;
}
<!-- language: lang-html -->
<div class="container">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
<!-- end snippet -->
答案1
得分: 1
以下是您要翻译的内容:
Created an two examples: with display: flex;
, and display: grid;
. The second option will probably suit you better:
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-css -->
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
display: flex;
flex-direction: column;
align-items: center;
overflow-y: scroll;
}
.container {
display: flex;
flex-wrap: wrap;
border: 1px dashed magenta;
max-width: min(100%, 302px);
}
.container div {
width: 100px;
height: 60px;
border: 1px solid black;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
}
<!-- language: lang-html -->
<input type="range" min="100" max="600" value="302" oninput="document.querySelectorAll('.container').forEach(el => el.style.maxWidth = 'min(100%, ' + this.value + 'px)')">
<div class="container">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
<br>
<div class="container grid">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
<!-- end snippet -->
英文:
Created an two examples: with display: flex;
, and display: grid;
. The second option will probably suit you better:
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-css -->
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
display: flex;
flex-direction: column;
align-items: center;
overflow-y: scroll;
}
.container {
display: flex;
flex-wrap: wrap;
border: 1px dashed magenta;
max-width: min(100%, 302px);
}
.container div {
width: 100px;
height: 60px;
border: 1px solid black;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
}
<!-- language: lang-html -->
<input type="range" min="100" max="600" value="302" oninput="document.querySelectorAll('.container').forEach(el => el.style.maxWidth = 'min(100%, ' + this.value + 'px)')">
<div class="container">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
<br>
<div class="container grid">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
<!-- end snippet -->
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论