flex-box实现井字棋游戏网格文本垂直对齐失效问题求助
井字棋标记居中问题解决方案
核心原因说明
偏移问题主要来自三个常见布局误区:
- 超大字号文本默认行高大于1,且字符本身的字体上下边距(ascent/descent区域)会导致视觉偏移
- 未统一盒模型,边框计算逻辑可能带来像素级布局误差
- 原
10em的字号在默认根字号16px下实际大小为160px,已经超过了li容器150px的高度,必然会溢出偏移
具体修改方案
1. 统一全局盒模型与默认边距
在CSS最顶部添加全局重置规则,消除浏览器默认样式干扰:
* { margin: 0; padding: 0; box-sizing: border-box; }
box-sizing: border-box会让li的边框计算在你设置的150px宽高内部,避免额外尺寸带来的布局错位。
2. 调整.marked类样式
替换原.marked类的样式为以下内容:
.marked { font-family: Arial, Helvetica, sans-serif; font-size: 7.5em; /* 适配150px容器的字号,可根据需求微调 */ line-height: 1; /* 强制行高等于字号,消除行高带来的上下空白 */ vertical-align: middle; /* 修正字符基线对齐偏差 */ /* 如果仍有细微垂直偏移,可添加以下属性微调数值即可 */ /* transform: translateY(1px); */ }
完整修改后CSS代码
* { margin: 0; padding: 0; box-sizing: border-box; } ul { display: flex; flex-wrap: wrap; width: 450px; /* 盒模型统一后3个150px的li总宽为450px,用这个值布局更精准 */ list-style: none; padding-inline-start: 0; } li { width: 150px; height: 150px; border: 1px solid black; background-color: gray; display: flex; justify-content: center; align-items: center; } li:hover { background-color: yellow; } figure { display: flex; justify-content: center; } .marked { font-family: Arial, Helvetica, sans-serif; font-size: 7.5em; line-height: 1; vertical-align: middle; }
调整后所有标记可以实现像素级的水平垂直居中,你也可以根据实际显示效果微调字号和transform的偏移值适配不同字体。
内容的提问来源于stack exchange,提问作者agehlot
相关产品推荐
相关产品推荐

