我尝试使用单个字母作为徽标,问题是字母的包含框,也称为“em框”太大和/或太小,如下所示:
我希望它有完全相同的大小,因为信,使我可以把它完美地集中到圆圈,像'w'标志。'B'之一,使用相同的css,是完全关闭。
@import url('https://fonts.googleapis.com/css2?family=Fredoka:wght@200&family=Press+Start+2P&display=swap');
.container {
display: flex;
gap: 30px;
}
.circle {
display: flex;
height: 175px;
width: 175px;
justify-content: center;
align-items: center;
border-radius: 100px;
background: #1231b3;
}
.text {
display: flex;
font-family: 'Press Start 2P';
font-size: 120px;
color: white;
background-color: light-blue;
}
.light {
background: #7c8dd7;
}
<div class="container">
<div class="circle">
<div class="text">b</div>
</div>
<div class="circle">
<div class="text light">b</div>
</div>
</div>
2条答案
按热度按时间46scxncf1#
CSS不知道字符在哪里开始和结束(根据其可见部分,而不是其整体宽度/高度)。
为了找出字符的顶部/底部/左侧/右侧可见端点,此代码段在画布上绘制该字符,然后扫描画布的行和列,以查找具有非零alpha设置的第一个点。
logo是一个完整的圆角正方形及其内容,内部的圆圈是作为before伪元素绘制的。
字符不是在DOM中绘制的,而是作为after伪元素的内容绘制的,这样就可以根据其可见尺寸调整其位置。
没有上升字母的字符(例如问题示例中的w和c)会稍微上移(取决于它们的整体可见高度),以便居中。
讨论中的字体与标准字体有一点不同,因为下降字体几乎没有任何高度,所以基线相对于整个字符的位置是不同的。
这段代码有一点欺骗性,它构建了一个字符的高度,并带有一个升序(在本例中是小写b)作为需要调整字符的指南。因此,对于任何可能出现的字体,它不是一个完全通用的解决方案。首先需要做更多的工作来确定任何给定字体的高度范围。
注意:在画布上绘制字体之前,我们必须确保它已经被加载,因此使用了google库
km0tfn4u2#
@A Haworth的答案太棒了。我永远也想不出这个答案。但是如果你想要一个快速而肮脏的css解决方案,去掉flex属性,将text-align设置为center,并调整. text框的填充。使用em度量单位,这样布局就可以缩放而不会中断。
大字体:120px
小字体:完全相同,但字体大小设置为24px。
一个二个一个一个