【发布时间】:2016-01-05 04:52:54
【问题描述】:
我正在寻找一种在不使用 ::nth-child 或 JavaScript 的情况下从每行中的每个第一项和最后一项中删除左右边距的好方法。如果这不可能,那么我想下一个最好的方法是在主 flexbox 元素上设置负左/右边距,但我不太确定使用width: 100% 的 flexbox 的最佳方法。基本上我想要的是这个 flexbox 的左右两边没有蓝色。
编辑:我必须在这里为我自己的问题提供一个解决方案。我使用带有overflow: hidden 的包装元素将something that works 放在一起,并将弹性框设置为width: calc(100% + 5px)。原来 Internet Explorer 不支持 flexbox 中的 box-sizing: border-box,但有一个解决方法是 I found here。
HTML:
<div id="main">
<div><span>div 1</span></div>
<div><span>div 2</span></div>
<div><span>div 3</span></div>
<div><span>div 4</span></div>
<div><span>div 5</span></div>
<div><span>div 6</span></div>
<div><span>div 7</span></div>
<div><span>div 8</span></div>
<div><span>div 9</span></div>
<div><span>div 10</span></div>
<div><span>div 11</span></div>
</div>
CSS:
#main {
margin-right: 40px;
display: -ms-flexbox;
display: flex;
-ms-flex-pack: start;
justify-content: flex-start;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
width: 100%;
background-color: lightblue;
}
#main div {
box-sizing: border-box;
display: -ms-flexbox;
display: flex;
-ms-flex: 0 0 33.3%;
flex: 0 0 33.3%;
border: 5px solid transparent;
}
#main div > span {
display: block;
width: 100%;
min-height: 50px;
background-color: #eaeaea;
}
【问题讨论】:
-
您知道您的代码中没有
margin吗?每个框周围的蓝色是由透明边框而不是边距创建的。上面代码中的margin-right不在您的小提琴演示中。所以你想从每行的第一个 div 中删除左边框,从最后一个 div 中删除右边框? -
是的,我就是这个意思。
-
我几乎已经使用 calc 和一个带有 overflow:hidden 的包装器来获得它,但 IE 一直将第三个 div 包装到下一行:jsFiddle
-
看起来 Internet Explorer 有一个错误,它不支持弹性元素上的
box-sizing: border-box。 -
如果你想有点疯狂,放弃
div框样式,并专注于容器。添加border。应用内框阴影。洒一点blur-radius和spread-radius,瞧:jsfiddle.net/Ljmkxvgk/1;-)