Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 第一个和最后一个flexbox框的边距_Html_Css_Flexbox - Fatal编程技术网

Html 第一个和最后一个flexbox框的边距

Html 第一个和最后一个flexbox框的边距,html,css,flexbox,Html,Css,Flexbox,我希望所有flexbox的左右两侧都有相同的空间距离。目前我有以下代码: body background-color white margin 0 0 padding 0 0 .overlay display flex position absolute background-color grey cursor pointer color #8e3433 flex-flow row nowrap justify-content flex-start

我希望所有flexbox的左右两侧都有相同的空间距离。目前我有以下代码:

body
  background-color white
  margin 0 0
  padding 0 0

.overlay
  display flex
  position absolute
  background-color grey
  cursor pointer
  color #8e3433
  flex-flow row nowrap
  justify-content flex-start
  height 40vh
  width 100vw
  bottom 0
  left 0
  margin 0
  overflow-y hidden
  overflow-x scroll

.overlay .item-image
  border-radius 5px
  flex 1 1 auto
  min-width 45.0vw
  width 45.0vw
  margin 0 2vw 0 2vw
  border 1px solid yellow
请以fiddle为例(如果它没有立即显示,您必须在末尾选择样式代码,然后按enter键(JSbin中的一个bug…),它应该会显示出来)

第一个框的左侧,我得到的是2vh而不是4vh。见: 在其他盒子之间,一切正常(4vh)。最后一个框的右侧没有任何空间。见: 因此,我的问题是: 1) 如何在第一个盒子的左边得到4vh?;和 2) 如何让4vh在最后一个盒子的右边


我试着查找这一点,并看到了使用容器填充解决略有不同的问题的方法。我更喜欢不调整容器填充的解决方案。

您可以使用第一个孩子和最后一个孩子

.overlay .item-image:first-child {
    margin-left: 4vw;
}

.overlay .item-image:last-child {
    margin-right: 4vw;
}
ps 小心;您没有正确关闭覆盖div

更新的答案

将伪元素用作弹性项以占用空间:

ul{
列表样式类型:无;
填充:0;
保证金:0;
显示器:flex;
高度:300px;
溢出-x:自动;
宽度:600px;
背景:橙色;
}
李{
左边距:30px;
背景:蓝色;
颜色:#fff;
填充:90px;
空白:nowrap;
弹性基础:自动;
}
ul:之后{
内容:“;
柔性:0 30像素;
}
  • 项目1
  • 项目2
  • 项目3
  • 项目4
试试这个

body {
    background-color: #fff;
    margin: 0 0;
    padding: 0 0;
}

.overlay {
    display: flex;
    position: absolute;
    background-color: #808080;
    color: #f00;
    justify-content: space-between;
    height: 40vh;
    padding: 0 4vw;
    bottom: 0;
    left: 0;
    margin: 0;
    overflow-y: hidden;
    overflow-x: scroll;
}

.overlay .item-image {
    border-radius: 5px;
    flex: 1 1 auto;
    min-width: 45vw;
    width: 45vw;
    border: 1px solid #00f;
}

.overlay .item-image :last-child:after {
  content: "";
  width: 30px;
  height: 1px;
  position: absolute;
  left: 100%;
  top: 0px;
}

现场演示-

顺便说一句,你可以让它在没有flex的情况下工作:是的,但小提琴是一个简化的例子。。。我的扩展案例需要flexbox。我会试试。请注意,在我的小提琴中,在最后一个方框之后根本没有边距(尽管它应该有一个右边距)。你知道为什么吗?你能实现你在这把小提琴里给出的解决方案吗:在我的小提琴里?在我的例子中,我要么有父容器(a)box元素,要么(b)有一个类名为“empty div”的div,其宽度应为100vw。然而,当我们创建一个伪元素(after)时,这种情况也存在于案例b中,我最终得到一个空div 96vw。你知道怎么解决这个问题吗?我尝试将pseudo元素设置为none,以防类名为“empty div”的兄弟节点,但没有成功……您能提供代码吗?或者发布一个包含所有细节的新问题。使用真实元素(vs伪元素)解决它。在案例A中,我通过javascript添加了一个div,其中包含
id='flexboxhack'
,然后将
#flexboxhack{flex:0 0 2vw;}
添加到我的CSS中。由于在我的案例B中不会生成此元素,因此它现在可以正常工作。