You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Safari中text-align:center与word-spacing失效问题求助

Safari下word-spacing导致文本无法居中的解决方案

我之前也踩过这个Safari的兼容性坑!问题出在Safari对word-spacing和行内伪元素的渲染逻辑上——其他浏览器会正确抵消li上的word-spacing:0和父元素的word-spacing,但Safari在计算整体居中时,会把父元素的word-spacing额外空间算进去,同时伪元素的word-spacing设置又没被正确处理,导致文本偏移。

咱们可以换两种更可靠的方式来实现需求,彻底避开这个bug:

方案一:inline-block + margin控制间距(兼容旧版浏览器)

保留原HTML结构,修改CSS如下:

<ul class="test">
  <li><span>Longer Word 1</span></li>
  <li><span>Word 2</span></li>
</ul>
<br/>
<ul>
  <li><span>Longer Word 1</span></li>
  <li><span>Word 2</span></li>
</ul>
ul {
  display: block;
  width: 120px;
  border: 1px solid black;
  margin: 0;
  padding: 0;
  text-align: center;
  /* 移除word-spacing,改用margin控制元素间距 */
}

ul.test {
  width: 300px;
}

li {
  display: inline-block; /* 改为inline-block,方便用margin控制间距 */
  position: relative;
}

/* 给非最后一个li添加右侧间距,预留分隔符位置 */
li:not(:last-child) {
  margin-right: 20px;
}

/* 伪元素作为分隔符,定位在两个li的中间 */
li:not(:last-child):after {
  content: "";
  position: absolute;
  right: -10px; /* 刚好在margin的中间位置 */
  top: 50%;
  transform: translateY(-50%); /* 垂直居中 */
  background-image: url("https://static01.20min.ch/dyim/5dd8a8/T470,230/images/content/2/7/1/27109470/10/teaserbreit.jpg");
  width: 6px;
  height: 6px;
  background-size: cover; /* 确保图片完整显示 */
}

span {
  display: inline-block;
}

为什么这个方案有效?

  • 用inline-block代替inline,配合margin-right控制元素间距,所有浏览器的计算逻辑完全一致,不会出现居中偏移。
  • 伪元素通过绝对定位放在间距的中间,既保证了分隔效果,又不会干扰文本的居中计算。

方案二:Flex布局(更简洁,推荐)

如果不需要兼容非常旧的浏览器,用Flex布局是更优的选择——它的居中逻辑在所有浏览器里都很稳定,还能自动处理换行情况:

ul {
  display: flex;
  flex-wrap: wrap; /* 宽度不够时自动换行 */
  justify-content: center; /* 天然水平居中 */
  gap: 20px; /* 控制元素之间的间距 */
  width: 120px;
  border: 1px solid black;
  margin: 0;
  padding: 0;
}

ul.test {
  width: 300px;
}

li {
  list-style: none;
  position: relative;
}

/* 给相邻的li添加分隔符,只有同一行的li才会触发这个选择器 */
li + li:before {
  content: "";
  position: absolute;
  left: -10px; /* 居中在gap的中间 */
  top: 50%;
  transform: translateY(-50%);
  background-image: url("https://static01.20min.ch/dyim/5dd8a8/T470,230/images/content/2/7/1/27109470/10/teaserbreit.jpg");
  width: 6px;
  height: 6px;
  background-size: cover;
}

span {
  display: inline-block;
}

这个方案的优势:

  • justify-content: center直接实现文本居中,完全不用依赖text-align和word-spacing,从根源上避免了Safari的bug。
  • gap属性可以精准控制元素间距,比margin更简洁。
  • 自动处理换行情况,换行后分隔符会自动消失,符合你“仅当同一行时显示分隔符”的需求。

内容的提问来源于stack exchange,提问作者NthDegree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 16:37:32