【问题标题】:css3 flexbox limit 4 items per row auto widthcss3 flexbox 限制每行 4 个项目自动宽度
【发布时间】:2017-12-19 15:57:41
【问题描述】:

如何使用 flexbox 实现这一点?目前,我正在使用表格,但我将每一行包装在一个 div 中以将其限制为 5 个项目。我想要所有的物品都只包裹在一个父母中。

我尝试了 flexbox,但我希望项目的宽度取决于其内容。谢谢各位。

.flexContainer {
		display: flex;
		flex-flow: row wrap;
	}
	.flexContainer .item {
		padding: 5px;
		flex: 1 1 auto;
	}
	.flexContainer .item a {
		display: block;
		background: blue;
		text-align: center;
	}
<div class="flexContainer">
	<div class="item"><a href="">sdfsf</a></div>
	<div class="item"><a href="">dffdfdf</a></div>
	<div class="item"><a href="">fdfdfd</a></div>
	<div class="item"><a href="">fdfdgdf</a></div>
	<div class="item"><a href="">ffffffffff</a></div>
	<div class="item"><a href="">fdfdfdg</a></div>
	<div class="item"><a href="">dddddddddddddd</a></div>
	<div class="item"><a href="">fdfdfdsd</a></div>
	<div class="item"><a href="">dsds</a></div>
	<div class="item"><a href="">dffdfdfdsf</a></div>
	<div class="item"><a href="">dffdfdfsdsds</a></div>
	<div class="item"><a href="">dffdfdfssdsfd</a></div>
	<div class="item"><a href="">dfsddfdfdf</a></div>
	<div class="item"><a href="">dff</a></div>
	<div class="item"><a href="">dffdfdfdffdfdfdffdfdf</a></div>
</div>

【问题讨论】:

标签: html css flexbox


【解决方案1】:

从这个 repo https://antibland.github.io/front-end/project_files/css/flexbox_max_items_per_row.html 来看,看起来你可以在你的 css 中执行以下操作:

CSS:

* {
  box-sizing: border-box;
}

.flexContainer {
    display: flex;
    flex-wrap: wrap;
}

.flexContainer .item {
  padding: 5px;
  flex: 1 1 20%;
}

这样就可以达到预期的效果了。

* {
    box-sizing: border-box;
}

.flexContainer {
    display: flex;
    flex-wrap: wrap;
}
.flexContainer .item {
    padding: 5px;
    flex: 1 1 20%;
}
.flexContainer .item a {
    display: block;
    background: blue;
    text-align: center;
}
<div class="flexContainer">
    <div class="item"><a href="">sdfsf</a></div>
    <div class="item"><a href="">dffdfdf</a></div>
    <div class="item"><a href="">fdfdfd</a></div>
    <div class="item"><a href="">fdfdgdf</a></div>
    <div class="item"><a href="">ffffffffff</a></div>
    <div class="item"><a href="">fdfdfdg</a></div>
    <div class="item"><a href="">dddddddddddddd</a></div>
    <div class="item"><a href="">fdfdfdsd</a></div>
    <div class="item"><a href="">dsds</a></div>
    <div class="item"><a href="">dffdfdfdsf</a></div>
    <div class="item"><a href="">dffdfdfsdsds</a></div>
    <div class="item"><a href="">dffdfdfssdsfd</a></div>
    <div class="item"><a href="">dfsddfdfdf</a></div>
    <div class="item"><a href="">dff</a></div>
    <div class="item"><a href="">dffdfdfdffdfdfdffdfdf</a></div>
</div>

编辑 2017 年 7 月 14 日 0829 UTC

使用此方法更好地显示每行 5 个的限制,但仍受其内容的宽度控制:

 
* {
    box-sizing: border-box;
}

.flexContainer {
    display: flex;
    flex-wrap: wrap;
}
.flexContainer .item {
    padding: 5px;
    flex: 1 1 20%;
}
.flexContainer .item a {
    display: block;
    background: blue;
    text-align: center;
}
<div class="flexContainer">
    <div class="item"><a href="">we're short</a></div>
    <div class="item"><a href="">we're short</a></div>
    <div class="item"><a href="">we're short</a></div>
    <div class="item"><a href="">we're short</a></div>
    <div class="item"><a href="">we're short</a></div>
    <div class="item"><a href="">we are a bit bigger</a></div>
    <div class="item"><a href="">we are a bit bigger</a></div>
    <div class="item"><a href="">we are a bit bigger</a></div>
    <div class="item"><a href="">we are a bit bigger</a></div>
    <div class="item"><a href="">we are quite a bit bigger</a></div>
    <div class="item"><a href="">we are quite a bit bigger</a></div>
    <div class="item"><a href="">we are quite a bit bigger</a></div>
    <div class="item"><a href="">we are the biggest divs yet</a></div>
    <div class="item"><a href="">we are the biggest divs yet</a></div>
    <div class="item"><a href="">I am the daddy of all the divs on this page.</a></div>
</div>

编辑 18-OCT-2019 1909 UTC

我发现最佳实践表明在排水沟的情况下使用少于可用的。我已经更新了代码:

* {
    box-sizing: border-box;
}

.flexContainer {
    display: flex;
    flex-wrap: wrap;
}
.flexContainer .item {
    padding: 5px;
    flex: 1 1 17%;
}
.flexContainer .item a {
    display: block;
    background: blue;
    text-align: center;
}
<div class="flexContainer">
    <div class="item"><a href="">we're short</a></div>
    <div class="item"><a href="">we're short</a></div>
    <div class="item"><a href="">we're short</a></div>
    <div class="item"><a href="">we're short</a></div>
    <div class="item"><a href="">we're short</a></div>
    <div class="item"><a href="">we are a bit bigger</a></div>
    <div class="item"><a href="">we are a bit bigger</a></div>
    <div class="item"><a href="">we are a bit bigger</a></div>
    <div class="item"><a href="">we are a bit bigger</a></div>
    <div class="item"><a href="">we are quite a bit bigger</a></div>
    <div class="item"><a href="">we are quite a bit bigger</a></div>
    <div class="item"><a href="">we are quite a bit bigger</a></div>
    <div class="item"><a href="">we are the biggest divs yet</a></div>
    <div class="item"><a href="">we are the biggest divs yet</a></div>
    <div class="item"><a href="">I am the daddy of all the divs on this page.</a></div>
</div>

【讨论】:

  • 我希望宽度在 flex 中为自动:1 1 20%,但每行应该有 5 个项目,就像贴在帖子中的图片一样。
  • flex CSS 项目中的最后一个选项本身并不完全是宽度......它是flex-basis。它基本上设置了每个弹性项目的初始大小。通过将其设置为 20%,您将每个项目限制为可用框宽度的 1/5,或每行 5 个项目。如果您将此设置为自动,您将让总项目数设置限制,本质上仅通过内容限制它们。最后一点是为什么我的示例中的最后一个框从 flex 行流出到下一个,因为内容太长,无法容纳 20% 的可用空间。
猜你喜欢
  • 2018-05-28
  • 2017-01-23
  • 1970-01-01
  • 2021-02-23
  • 2019-08-02
  • 2021-01-01
  • 1970-01-01
  • 2014-02-19
  • 2020-11-13
相关资源
最近更新 更多