如何将DIV的:before和:after伪元素文本居中并重叠?
实现伪元素文本在容器中心精准重叠对齐
你希望在不设置特定像素值边框和内边距的情况下,让.SysCard的:before和:after伪元素文本对齐到容器中心并重叠,这个需求完全可以实现。
原代码问题分析
你的现有代码存在两个关键问题:
- 伪元素未设置
left: 0,导致width:100%的水平范围不明确,text-align:center无法正确生效 :before中的transform: rotate(45deg)覆盖了之前的translateY(-50%),破坏了垂直居中效果
修改后的完整代码
body { background-color: #202; } .SysCard{ min-width: 10ch; min-height: 8rem; position: relative; border: 1px solid lime; border-radius: 8px; } .SysCard:after, .SysCard:before{ font-size: 2.2rem; text-align: center; margin: 0; padding: 0; width: 100%; position: absolute; display: block; top: 50%; left: 0; /* 确保从容器左侧开始,水平居中生效 */ transform: translateY(-50%); /* 统一基础垂直居中 */ border: 1px solid yellow; /* 调试边框,可删除 */ } .SysCard:after{ content: "\25CF"; color: #8FF; text-shadow: 0 0 15px #F80; } .SysCard:before { content: "|"; /* 合并transform属性,同时实现旋转和垂直居中 */ transform: translateY(-50%) rotate(45deg); color: #8FF; text-shadow: 0 0 30px #8FF; }
<div class="SysCard"></div>
关键修改说明
- 添加
left: 0:让伪元素的宽度范围与容器一致,text-align:center才能将文本水平居中到容器中心 - 合并
:before的transform:将translateY(-50%)和rotate(45deg)写在同一个transform属性中,避免属性覆盖,同时保留垂直居中与旋转效果 - 移除无用的
vertical-align: middle:伪元素是块级定位元素,该属性无效
这样修改后,两个伪元素的文本会精准重叠在.SysCard容器的中心位置,且无需依赖特定像素值的边框或内边距。
内容的提问来源于stack exchange,提问作者Parduz
相关产品推荐
相关产品推荐

