- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个代码:
<p style="line-height: 1;overflow: hidden;">blah_blah</p>
<p>blah_blah</p>
<p style="line-height: 1;overflow: hidden;">qypj;,</p>
<p>qypj;,</p>
结果是(注意没有下划线,并剪切字符):
也就是说,它在 Firefox(Windows 10 上的 66.0.3)中以这种方式运行。其他浏览器似乎呈现下划线。上面的代码片段运行程序似乎也可以工作(即使在 Firefox 中),除非您在“整页”中运行它。
这个Q类似于Text changes height after adding unicode character除了这里没有技巧。 “_”只是一个简单的 ASCII 字符。
我的问题是哪种行为是正确的。是否允许特定字符更改行高(我认为它只应该与字体相关)? line-height: 1
不应该暗示它可以完全适合任何文本吗?
我想有些字符是特殊的,例如“p”、“g”、“j”(可能还有“_”),它们绘制在它的线下方。仍然是哪种行为是正确的。算不算溢出?
PS:此外,我觉得要么 overflow-x: hidden;overflow-y: visible;
和overflow-x: visible;overflow-y 很有趣: hidden;
仍然会导致这个。这对我来说更像是一个真正的错误。
最佳答案
My question is which behavior is the correct one.
所有这些都是正确的,因为我们在所有浏览器中都没有相同的默认字体,而且它也因操作系统而异。
Is specific character allowed to change line height (I thought it was only supposed to be font dependent)?
字符不会改变行高
。更准确地说,line-height
是一个只能通过设置 line-height
来更改的属性,但您可能会混淆由 line-height
单独一个字符不能改变它。
Shouldn't line-height: 1 imply it can fit exactly any text?
不一定,line-height:1
表示行框将等于1xfont-size
1 但是字体旨在包括这个空间内的所有 Angular 色?他们中的大多数人可能会这样做,但我们不知道。
基本上,您需要考虑两件事。由字体属性定义的内容区域和由行高定义的行框。我们无法控制第一个,我们只能控制第二个。
这里有一个基本的例子来说明:
span {
background:red;
color:#fff;
font-size:20px;
font-family:monospace;
}
body {
margin:10px 0;
border-top:1px solid;
border-bottom:1px solid;
animation:change 2s linear infinite alternate;
}
@keyframes change {
from {
line-height:0.2
}
to {
line-height:2
}
}
<span >
blah_blah
</span>
红色是我们的内容区域,它的高度由字体属性定义,如果您检查该元素,您会看到它的高度等于 23px
(不是 20px
像 font-size
) 和边框定义了我们使用行高控制的行框。
因此,如果 line-height
等于 1,我们将有一个等于 20px
的行框,这不足以包含 23px
内容区域因此它会被截断,我们可能会隐藏一些合乎逻辑的字符(或其中的一部分):
span {
background: red;
color: #fff;
font-size: 20px;
font-family: monospace;
}
body {
margin: 5px;
line-height: 1;
overflow:hidden;
}
html {
overflow:auto;
}
<span>
blah_blah ÂÄ j p
</span>
不同的 font-size
将删除 Firefox 中的下划线:
span {
background: red;
color: #fff;
font-size: 26px;
font-family: monospace;
}
body {
margin: 5px;
line-height: 1;
overflow:hidden;
}
html {
overflow:auto;
}
<span>
blah_blah ÂÄ j p
</span>
另一个使用谷歌字体的例子,结果应该是相同的跨浏览器。下划线可见,但 ^
/¨
span {
background: red;
color: #fff;
font-size: 26px;
font-family: 'Gugi', cursive;
}
body {
margin: 5px;
line-height: 1;
overflow:hidden;
}
html {
overflow:auto;
}
<link href="https://fonts.googleapis.com/css?family=Gugi" rel="stylesheet">
<span>
blah_blah ÂÄ j p
</span>
另一个下划线不可见的例子:
span {
background: red;
color: #fff;
font-size: 27px;
font-family: 'PT Sans', sans-serif;
}
body {
margin: 5px;
line-height: 1;
overflow:hidden;
}
html {
overflow:auto;
}
<link href="https://fonts.googleapis.com/css?family=PT+Sans" rel="stylesheet">
<span>
blah_blah ÂÄ j p
</span>
你可以清楚地看到,每次我们使用不同的字体时,我们都会有不同的溢出,这证实了这是字体相关的。除非我们知道字体是如何设计的,否则我们无法控制它。
相关问题:
Understanding CSS2.1 specification regarding height on inline-level boxes
Why is there space between line boxes, not due to half leading?
Line height issue with inline-block elements
这是一篇获得更准确细节和计算的好文章:https://iamvdo.me/en/blog/css-font-metrics-line-height-and-vertical-align
引用这篇文章:
It becomes obvious that setting
line-height: 1
is a bad practice. I remind you that unitless values are font-size relative, not content-area relative, and dealing with a virtual-area smaller than the content-area is the origin of many of our problems.
1 : 我考虑了一个简化的解释,但实际上行框的计算不仅与行高属性有关。
关于html - 特定文本字符可以更改行高吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57056458/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
为什么在 C# 中添加两个 char 结果是 int 类型? 例如,当我这样做时: var pr = 'R' + 'G' + 'B' + 'Y' + 'P'; pr 变量变为 int 类型。我希望它是
下面的代码可以编译,但 char 类型的行为与 int 类型的行为不同。 特别是 cout ::ikIsX >() ::ikIsX >() ::ikIsX >() using names
我正在寻找一个正则表达式,它可以匹配长度为 1 个或多个字符但不匹配 500 的内容。这将在 Rails 路由文件中使用,特别是用于处理异常。 路线.rb match '/500', to: 'err
对于 C 编程作业,我正在尝试编写几个头文件来检查所谓的“X 编程语言”的语法。我最近才开始,正在编写第一个头文件。这是我编写的代码: #ifndef _DeclarationsChecker_h_
为什么扩展的 ascii 字符(â、é 等)被替换为 字符? 我附上了一张图片...但我正在使用 PHP 从 MySQL 中提取数据,其中一些位置有扩展字符...我使用的是 Arial 字体。 您可以
我有一个与 R 中的断线相关的简单问题。 我正在尝试粘贴,但在获取(字符/数字)之间的断线时遇到问题。请注意,这些值包含在向量中(V1=81,V2=55,V3=25)我已经尝试过这段代码: cat(p
如何将 ANSI 字符 (char) 转换为 Unicode 字符 (wchar_t),反之亦然? 是否有用于此目的的任何跨平台源代码? 最佳答案 是的,在 中你有mbstowcs()和 wcsto
函数 fromCharCode 不适用于国际 ANSI 字符。例如,对于 ID 为 192 到 223 的俄语 ANSI (cp-1251) 字符,它返回特殊字符。如何解决这个问题? 我认为,需要将A
如果不喜欢,我想隐藏 id,但不起作用 SELECT * FROM character, character_actor WHERE character.id NOT LIKE character_a
现在这个程序成功地反转了键盘输入的单词。但是我想在我反转它之前“保存”指针中的单词,所以我可以比较两者,反转的和“原始的”,并检查它们是否是回文。我还没有太多经验,可能会出现比我知道的更多的错误,但我
Memcpy 和 memcmp 函数可以接受指针变量吗? char *p; char* q; memcpy(p,q,10); //will this work? memcmp(p,q,10); //w
恐怕我对一个相当过饱和的主题的细节有疑问,我搜索了很多,但找不到一个明确的答案来解决这个特定的明显-imho-重要的问题: 使用UTF-8将byte[]转换为String时,每个字节(8bit)都变成
我有一个奇怪的问题。我需要从 stat 命令打印输出字符串。 我已经编写了获取一些信息的代码。 import glob import os for file in glob.glob('system1
我正在使用 Java 并具有其值如下所示的字符串, String data = "vale-cx"; data = data.replaceAll("\\-", "\\-\\"); 我正在替换其中的“
String urlParameters = "login=test&password=te&ff"; 我有一个String urlParams,& - 是密码的一部分,如何使其转义,从而不被识别为分
大家好,我只想从此字符串中提取第一个字母: String str = "使 徒 行 傳 16:31 ERV-ZH"; 我只想获取这些字符: 使 徒 行 傳 并且不包括 ERV-ZH 仅数
这个问题已经有答案了: Crash or "segmentation fault" when data is copied/scanned/read to an uninitialized point
所以, 我有一个字符**;它本质上是一个句子,带有指向该句子中每个单词的指针;即 'h''i''\0''w''o''r''l''d''\0''y''a''y''!''\0' 在这种情况下,我希望使用可
这个问题在这里已经有了答案: Using quotation marks inside quotation marks (12 个答案) 关闭 7 年前。 如何打印 " 字符? 我知道打印 % 符号
我是一名优秀的程序员,十分优秀!