【问题标题】:Center individual letters visually regardless of whether they are capital or lowercase无论是大写还是小写,在视觉上居中单个字母
【发布时间】:2018-07-05 21:45:28
【问题描述】:

所以我需要制作一个圆圈,每个圆圈中都有一个字母,我希望将这些字母居中。然而,当我使用不同大小的字母时,它们的居中方式会有所不同,在本例中是 小写 q大写 A(只是一个示例,可能是任何字母):

span {
  align-items: center;
  display: flex;
  font-family: sans-serif;
  justify-content: center;
  border-radius: 50%;
  height: 30px;
  width: 30px;
  border: 1px solid black;
  float: left;
}
<span>q</span>
<span>A</span>

你可以看到小写的 q 比大写的 A 小,这是因为字母的大小不同,q 没有填满上半部分。这会导致字母 q 无法正确居中。

这里有一张图片来说明我的意思,左边是我得到的,右边是我想要的:

q 应该稍微高一点,以使其看起来正确居中。 是否可以在不更改每个大小不同的字母的 CSS 的情况下做到这一点?

【问题讨论】:

  • 这是不可能的,因为您需要知道每个字母如何呈现并为每个字母添加正确数量的像素 - 您最好选择一种以您想要的方式呈现的字体或编辑该字体你想要这样排队
  • @Pete 我希望有一些奇怪的 CSS hack,它神奇地解决了我所有的问题哈。我真的不喜欢添加另一种字体的想法,但这可能是我遇到的问题。感谢您的意见。
  • 我不知道是否存在 CSS hack,但您是否看到这个用于检测字母大小写的 javascript 解决方案? stackoverflow.com/questions/1027224/…
  • 这就是英语的工作方式..字母q需要这样,所以我不知道你为什么要这样的行为?
  • @DerekNolan 有趣的是,这不是一个完美的解决方案,因为像 q 或 f 这样的字母不同于常规的“大写”和“小写”字母,但这是一个巧妙的想法

标签: html css vertical-alignment


【解决方案1】:

JavaScript 解决方案。我将小写字母分为三种不同的类型:标准小写字母、行下字母和高大写字母。我使用 ASCII 代码定位它们并添加 CSS 类并相应地更改 margin-top。您可以相应地添加更多例外(字母 j 可能需要下降一个像素。)

Here is a pen.

$('span').each(function(){
    var letter = $(this).text();
    var letterCode = letter.charCodeAt(0);
  //check if lowercase
  if (letter == letter.toLowerCase()){
   $(this).addClass('lowercase');
  }
    if (letterCode == 106 || letterCode == 112 || letterCode == 113 || letterCode == 121 || letterCode == 103 ){ //jpqyg
      $(this).addClass('below-line');
}
  //All these other letters : bdfiklt
  if(letterCode == 98 || letterCode == 100 || letterCode == 102 || letterCode == 105 || letterCode == 107 || letterCode == 108 || letterCode == 116){
    $(this).addClass('tall-letters');
  }
});
div {
  align-items: center;
  display: flex;
  font-family: sans-serif;
  justify-content: center;
  border-radius: 50%;
  height: 30px;
  width: 30px;
  border: 1px solid black;
  float: left;
}
span{
  margin-top: 0;
}
.lowercase{
  margin-top: -3px;
}
.below-line{
    margin-top: -6px;
}
.tall-letters{
  margin-top: -1px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div><span>A</span></div>
<div><span>a</span></div>
<div><span>B</span></div>
<div><span>b</span></div>
<div><span>C</span></div>
<div><span>c</span></div>
<div><span>D</span></div>
<div><span>d</span></div>
<div><span>E</span></div>
<div><span>e</span></div>
<div><span>F</span></div>
<div><span>f</span></div>
<div><span>G</span></div>
<div><span>g</span></div>
<div><span>H</span></div>
<div><span>h</span></div>
<div><span>I</span></div>
<div><span>i</span></div>
<div><span>J</span></div>
<div><span>j</span></div>
<div><span>K</span></div>
<div><span>k</span></div>
<div><span>L</span></div>
<div><span>l</span></div>
<div><span>M</span></div>
<div><span>m</span></div>
<div><span>N</span></div>
<div><span>n</span></div>
<div><span>O</span></div>
<div><span>o</span></div>
<div><span>P</span></div>
<div><span>p</span></div>
<div><span>Q</span></div>
<div><span>q</span></div>
<div><span>R</span></div>
<div><span>r</span></div>
<div><span>S</span></div>
<div><span>s</span></div>
<div><span>T</span></div>
<div><span>t</span></div>
<div><span>U</span></div>
<div><span>u</span></div>
<div><span>T</span></div>
<div><span>t</span></div>
<div><span>U</span></div>
<div><span>u</span></div>
<div><span>V</span></div>
<div><span>v</span></div>
<div><span>W</span></div>
<div><span>w</span></div>
<div><span>X</span></div>
<div><span>x</span></div>
<div><span>Y</span></div>
<div><span>y</span></div>
<div><span>Z</span></div>
<div><span>z</span></div>

【讨论】:

  • 没问题。抱歉,我找不到 CSS hack。
  • 嗯,正如之前所说,可能没有:)
猜你喜欢
  • 2021-08-12
  • 2014-02-12
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
  • 2015-04-23
  • 1970-01-01
  • 2017-01-16
相关资源
最近更新 更多