Lan*_*all 14 html css css3 pseudo-element flexbox
我在父div中有三个div,它们使用以下方式间隔开:
display: flex;
justify-content: space-between;
Run Code Online (Sandbox Code Playgroud)
但是,父div有一个:after
on,它使得三个div不会出现在父div的边缘.有没有办法让flexbox忽略:before
和:after
?
.container {
width: 100%;
display: flex;
justify-content: space-between;
padding-top: 50px;
background: gray;
}
.container div {
background: red;
height: 245px;
width: 300px;
}
.container:before {
content: '';
display: table;
}
.container:after {
clear: both;
content: '';
display: table;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
<div></div>
<div></div>
<div></div>
</div>
Run Code Online (Sandbox Code Playgroud)
Mic*_*l_B 16
在CSS中,目前没有100%可靠的方法来防止伪元素影响justify-content: space-between
计算.
::before
::after
Flex容器上的伪元素和Flex元素成为弹性项目.
从规格:
Flex容器的每个in-flow子项都成为flex项.
换句话说,处于正常流动(即,未绝对定位)的柔性容器的每个子代被认为是柔性项目.
大多数(如果不是全部)浏览器将其解释为包含伪元素.该::before
伪是首个柔性项目.该::after
项目是最后一项.
以下是Firefox文档中对此呈现行为的进一步确认:
解决问题的一种可能方法是使用绝对定位从正常流中删除伪元素.但是,此方法可能无法在所有浏览器中使用:
请参阅我的答案,了解伪元素的插图justify-content
:
如果这是一个继承的属性,只需覆盖它
.container {
width: 100%;
display: flex;
justify-content: space-between;
padding-top: 50px;
background: gray;
}
.container div {
background: red;
height: 245px;
width: 100px;
}
/* definitions from a framework */
.container:before {
content: '';
display: table;
}
.container:after {
clear: both;
content: '';
display: table;
}
/* definitions override */
.container.flexcontainer:before,
.container.flexcontainer:after {
display: none;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container flexcontainer">
<div></div>
<div></div>
<div></div>
</div>
Run Code Online (Sandbox Code Playgroud)