要设置flexbox项目之间的最小距离,我使用margin: 0 5px on .item和margin: 0 -5px on container。对我来说,这似乎是一种hack,但我找不到更好的方法来做到这一点。
#箱{
显示:flex;
宽度:100 px;
Margin: 0 -5px;
}
.item {
背景:灰色;
宽度:50 px;
高度:50 px;
边距:0 5px;
}
< div id =“盒子”>
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< / div >
这种解决方案适用于所有情况,即使有多行或任意数量的元素。但是section的计数应该是一样的,你想在第一行有4个,第二行有3个,这样不行,第4个内容的空间将是空白的,容器不会填充。
我们使用display: grid;以及它的性质。
#箱{
显示:网格;
宽度:100 px;
grid-gap: 5 px;
/*项目之间的空格*/
grid-template-columns:重复(4 1 fr);
/*决定列的数量(4)和大小(1fr | 1分数|你也可以使用像素和其他值)*/
}
.item {
背景:灰色;
宽度:100%;
/* width是没有必要的,只是添加这个来理解width工作为网格模板分配空间的100%**默认宽度将是100%** */
高度:50 px;
}
< div id =“盒子”>
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< / div >
这种方法的缺点是在移动Opera Mini将不被支持,在PC上只有在IE10之后才能工作。
注意,完整的浏览器兼容性包括IE11,请使用Autoprefixer
旧的答案
不要认为它是一个旧的解决方案,如果你只想要单行元素,它仍然是最好的解决方案之一,它可以在所有浏览器上工作。
这个方法是由CSS兄弟姐妹组合使用的,所以你也可以用许多其他的方式来操作它,但如果你的组合是错误的,它也可能会导致问题。
.item+.item{
margin-left: 5px;
}
下面的代码将完成这个任务。在这种方法中,不需要给出margin: 0 -5px;到#box包装器。
为您提供一个工作示例:
#箱{
显示:flex;
宽度:100 px;
}
.item {
背景:灰色;
宽度:22 px;
高度:50 px;
}
.item + .item {
margin-left: 5 px;
}
< div id =“盒子”>
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< / div >
你可以使用& > * + *作为选择器来模拟一个弹性间距(对于单行):
#box{显示:flex;宽度:230 px;轮廓:1px纯蓝色;}
.item{背景:灰色;宽度:50 px;身高:100 px;}
/* ----- Flexbox gap: ----- */
#box > * + * {
margin-left: 10 px;
}
< div id =“盒子”>
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< / div >
如果你需要支持伸缩包装,你可以使用wrapper元素:
.flex{显示:flex;flex-wrap:包装;}
.box{背景:灰色;身高:100 px;min-width: 100 px;flex:汽车;}
.flex包装{轮廓:1px固体红色;}
/* -----伸缩间隙10px: ----- */
.flex > * {
保证金:5 px;
}
.flex {
保证金:5 px;
}
.flex-wrapper {
宽度:400 px;/* optional */
溢出:隐藏;/* optional */
}
< div class = ' flex-wrapper ' >
< div class = ' flex ' >
< div class = '盒子' > < / div >
< div class = '盒子' > < / div >
< div class = '盒子' > < / div >
< div class = '盒子' > < / div >
< div class = '盒子' > < / div >
< / div >
< / div >
这种解决方案适用于所有情况,即使有多行或任意数量的元素。但是section的计数应该是一样的,你想在第一行有4个,第二行有3个,这样不行,第4个内容的空间将是空白的,容器不会填充。
我们使用display: grid;以及它的性质。
#箱{
显示:网格;
宽度:100 px;
grid-gap: 5 px;
/*项目之间的空格*/
grid-template-columns:重复(4 1 fr);
/*决定列的数量(4)和大小(1fr | 1分数|你也可以使用像素和其他值)*/
}
.item {
背景:灰色;
宽度:100%;
/* width是没有必要的,只是添加这个来理解width工作为网格模板分配空间的100%**默认宽度将是100%** */
高度:50 px;
}
< div id =“盒子”>
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< / div >
这种方法的缺点是在移动Opera Mini将不被支持,在PC上只有在IE10之后才能工作。
注意,完整的浏览器兼容性包括IE11,请使用Autoprefixer
旧的答案
不要认为它是一个旧的解决方案,如果你只想要单行元素,它仍然是最好的解决方案之一,它可以在所有浏览器上工作。
这个方法是由CSS兄弟姐妹组合使用的,所以你也可以用许多其他的方式来操作它,但如果你的组合是错误的,它也可能会导致问题。
.item+.item{
margin-left: 5px;
}
下面的代码将完成这个任务。在这种方法中,不需要给出margin: 0 -5px;到#box包装器。
为您提供一个工作示例:
#箱{
显示:flex;
宽度:100 px;
}
.item {
背景:灰色;
宽度:22 px;
高度:50 px;
}
.item + .item {
margin-left: 5 px;
}
< div id =“盒子”>
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< / div >
Flexbox和css计算与多行支持
你好,下面是我的工作解决方案,所有浏览器支持flexbox。没有负边距。
小提琴演示
.flexbox {
显示:flex;
flex-direction:行;
flex-wrap:包装;
justify-content:之间的空间;
}
.flexbox > div {
/*
每行1/3 - 3列
10px -列之间的间距
* /
box-sizing: border-box;
Margin: 10px 10px 0 0;
轮廓:1px虚线红色;
宽度:calc(1/3*100% - (1 - 1/3)*10px;
}
/*
将最后一行列向左对齐
3n -每行3列
* /
.flexbox > div:n -child(3n) {
margin-right: 0;
}
{后.flexbox::
内容:”;
flex:汽车;
}
/*
删除第一行的上边距
-n+3 -每行3列
* /
.flexbox > div:n -child(-n+3) {
margin-top: 0;
}
< div class = " flexbox”>
< div >坳< / div >
< div >坳< / div >
< div >坳< / div >
< div >坳< / div >
< div >坳< / div >
< / div >
请注意,使用SASS可以使这段代码更短
更新2020. ii.11
在最后一行向左对齐的列
更新2020. ii.14
移除了最后一行的margin-bottom
Flexbox的利润率并没有下降。
Flexbox没有任何类似于表的边界间距(编辑:CSS属性差距在较新的浏览器中实现了这一角色,我可以使用吗)
因此,实现你的要求有点困难。
根据我的经验,不使用:first-child/:last-child,并且对flex-wrap:wrap不做任何修改的“最干净”的方法是在容器上设置padding:5px,在子元素上设置margin:5px。这将在每个子元素之间以及每个子元素与其父元素之间产生10px的间隙。
Demo
.upper {
保证金:30 px;
显示:flex;
flex-direction:行;
宽度:300 px;
身高:80 px;
边框:1px红色实体;
填充:5 px;/* this */
}
.upper > div {
Flex: 1台自动;
边框:1px红色实体;
text-align:中心;
保证金:5 px;/*,这将导致10px的差距*/
}
.upper。MC /* multicol test */ {
flex-direction:列;
flex-wrap:包装;
宽度:200 px;
身高:200 px;
}
< div class = "上" >
< div > 3 < br / > aaa < / div >
< div > 3 < / div >
< div > 3 < br / > aaa < / div >
< div > 3 < br / > aaa < br / > aaa < / div >
< div > 3 < / div >
< div > 3 < / div >
< / div >
<div class="上MC ">
< div > 3 < br / > aaa < / div >
< div > 3 < / div >
< div > 3 < br / > aaa < / div >
< div > 3 < br / > aaa < br / > aaa < / div >
< div > 3 < / div >
< div > 3 < / div >
< / div >