为何::after伪元素无法与div元素处于同一行且位置偏低?
问题原因及解决方案
问题出在绝对定位的包含块范围和border-box盒模型的计算逻辑上:
- 父元素
.bar设置了position: relative,作为绝对定位伪元素::after的包含块,这个包含块的范围是父元素的padding-box(也就是border内侧的区域)。 - 因为启用了
box-sizing: border-box,父元素的height:8px是包含上下各1px的border的,所以父元素实际的内容区域高度是8px - 2px = 6px。当伪元素设置top:0时,它是贴在父元素内容区域的顶部,相当于距离父元素整体的顶部(border外边缘)有1px的偏移。再加上伪元素自身也有1px的border,视觉上就会显得比父元素偏低。
修复方案
把伪元素的top值从0改为-1px,让它的顶部和父元素的border外边缘对齐,就能实现两者在同一行的视觉对齐:
*,*::after{ margin: 0; padding: 0; box-sizing: border-box; } .bar{ height: 8px; width: 60px; background-color: red; position: relative; border: 1px solid blueviolet; } .bar::after{ content: ''; box-sizing: border-box; position: absolute; top: -1px; /* 调整此处 */ left: calc(100% + 1px); width: 8px; height: 8px; border: 1px solid blueviolet; background-color: rgba(50, 67, 255); }
<div class="bar"></div>
内容的提问来源于stack exchange,提问作者Gnanavel
相关产品推荐
相关产品推荐

