web-dev-qa-db-ja.com

文字間隔の間違ったテキストの中央揃え

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
}

私は作成しました 私が何を意味するかを示すコードペン
前回のFirefoxとChromeで同じ動作を見つけました。この問題を修正する方法はありますか?

30
pasine

文字間隔と同じ量だけテキストをインデントする必要があるようです。最初の文字の左側にスペースが適用されていません

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>

私が思いついた論理的な説明は-最初の文字なので、左側のスペースは適用されません。

63
Huangism

テキストが2行になる場合は、パディングを使用する方が安全です。 text-indentは、テキストの最初の行だけをインデントします。

p { 
  padding-left: 0.9em; 
}
1
fidler2326

よく見ると、文字間隔のない一番上のものも正しく中央揃えされていません。私が考えられる唯一のことは、margin-left: 15pxを次のようにサルにパッチすることです:

p { margin-left: 15px; }
0
beautifulcoder