字母间距错误的文本中心对齐

时间:2014-02-06 19:22:27

标签: html css letter-spacing

我注意到使用letter-spacing和text-align:center的奇怪行为 增加空间,使文本更接近元素的左边距。

HTML

<div>
  <p>- Foo Bar Zan -</p>
</div>

CSS

div {
  width: 400px;
  height:400px;
  background-color: #3b0d3b;
  text-align:center;
  margin:auto;
}

p {
  color:#fff;
  margin-top: 40px;
  text-align:center;
  padding-top:30px;
  font-size: 1.2em;
  letter-spacing:.9em;  <--- Here is the problem
}

我创建了a codepen to show what I mean 我在上一次Firefox和Chrome上发现了相同的行为。 有没有办法解决这个问题?

6 个答案:

答案 0 :(得分:60)

似乎您需要将文本缩进与字母间距相同的数量。第一个字母没有应用于左侧的间距

div {
  width: 400px;
  height: 400px;
  background-color: #3b0d3b;
  text-align: center;
  margin: auto;
}

p {
  color: #fff;
  background: black;
  text-align: center;
  font-size: 1.2em;
  padding: 0;
  margin: 0;
}

.spacing {
  letter-spacing: .4em;
}

.spacing-large {
  letter-spacing: 0.9em;
  text-align: center;
  text-indent: 0.9em;
}
<div>
  <p>- Foo Bar Zan -</p>
  <p class="spacing">- Foo Bar Zan -</p>
  <p class="spacing-large">- Foo Bar Zan -</p>
</div>

我提出的逻辑解释是 - 因为它是第一个字母,左边的间距将不适用。

答案 1 :(得分:1)

使用填充会更安全,因为文本会分成两行。 text-indent只会缩进第一行文本。

p { 
  padding-left: 0.9em; 
}

答案 2 :(得分:0)

仔细观察,没有字母间距的顶部也没有正确居中。我唯一能想到的就是用margin-left: 15px来修补它,如下所示:

p { margin-left: 15px; }

答案 3 :(得分:0)

设置负边距,使其与字母间距相同。因此,如果字母间距为10px,请设置margin-right:-10px

使用text-indent将在第一个字母前保留该空间,即使父元素太小而无法容纳内容,也不会使其看起来居中。

答案 4 :(得分:0)

此行为是因为最右边的字母的右侧增加了多余的空间(由于增加了字母间距)。

在这种情况下,有一种更简单的方法可以实现中心对齐。只需删除最后一个字母的字母间距属性

这是一个解决方案。

div {
  width: 400px;
  height:400px;
  background-color: #3b0d3b;
  text-align:center;
  margin:auto;
}

p {
  color:#fff;
  margin-top: 40px;
  text-align:center;
  padding-top:30px;
  font-size: 1.2em;
}

.spacing {
  letter-spacing:.4em;
}

.spacing-large {
  letter-spacing:.9em;
}
<div>
  <p>- Foo Bar Zan -</p>
  <p class="spacing">- Foo Bar Zan <span style="letter-spacing:0">-</span></p>
  <p class="spacing-large">- Foo Bar Zan <span style="letter-spacing:0">-</span></p>
</div>

请注意span元素嵌套最后一个字符。

答案 5 :(得分:0)

我发现解决字母间距单词偏离中心的最佳答案是将&nbsp;放在单词前面。