如何为button元素创建::before伪元素及修复其z-index失效、覆盖按钮边框问题
解决按钮伪元素z-index不生效的问题
嘿,我来帮你搞定这个小问题!你遇到的情况是因为父元素没有创建独立的堆叠上下文,导致伪元素的z-index设置没按预期工作。
问题原因分析
你的按钮设置了position: relative但没指定z-index(默认是auto),这时候按钮并不会创建自己的堆叠上下文。伪元素::before的z-index: -1是相对于根堆叠上下文(整个文档)计算的,而按钮本身在根上下文里的层级是默认的“auto”,这就导致伪元素反而跑到了按钮边框的上层,把边框盖住了。
修复方案
只需要给按钮添加z-index: 0,让它创建独立的堆叠上下文,这样伪元素的z-index: -1就会相对于按钮的上下文生效,跑到按钮下方,不会再覆盖边框了。
修改后的完整CSS代码:
button { padding: 1rem; background-color: red; color: wheat; border: 4px solid yellowgreen; position: relative; cursor: pointer; z-index: 0; /* 添加这一行即可 */ } button::before { content: ''; position: absolute; top: -4px; left: -4px; height: calc(100% + 8px); width: calc(100% + 8px); background-color: yellow; z-index: -1; }
额外说明
当元素设置了非static的position且z-index不为auto时,就会创建独立的堆叠上下文。在这个上下文里,子元素的z-index只会相对于父元素生效,这样你就能精准控制伪元素的层级位置啦。
内容的提问来源于stack exchange,提问作者tst.flopp
相关产品推荐
相关产品推荐

