为啥 div 内的嵌套跨度不遵循该 div 的行高规则?

Posted

技术标签:

【中文标题】为啥 div 内的嵌套跨度不遵循该 div 的行高规则?【英文标题】:Why a nested span inside a div does not follow line-height rule for that div?为什么 div 内的嵌套跨度不遵循该 div 的行高规则? 【发布时间】:2019-03-29 00:12:31 【问题描述】:

我有一个div,字体大小为88,行高为88。div内的文字高度大于88。这是为什么呢?

<div style="font-size:88px;line-height:88px;">I need <span sytle="color:red;">videos</span></div>

如果您打开元素检查器并突出显示父 div,它是 88px 高。但是,如果您突出显示文本“我需要”和嵌套跨度,则高度为 101 像素。即使您在 span 本身上设置 line-height,这仍然是正确的:

<div style="font-size:88px;line-height:88px;">
  I need <span style="font-size:88px;line-height:88px;color:red;">videos</span>
</div>

见附件回复:https://repl.it/@teeej/ReliablePunctualRam

【问题讨论】:

对于您的跨度样式缺少“”的人 @Icewine 已修复,但这对我的问题的影响为零,问题仍然存在。 【参考方案1】:

&lt;span&gt; 默认为inline element。

如果你希望它表现得像一个内联块元素,你必须给它一个displayinline-block,它的高度正好是88px

div > span  
  display: inline-block; 
  background-color: rgba(255,0,0,.1);
<div style="font-size:88px;line-height:88px;">
      I need <span style="font-size:88px;line-height:88px;">videos</span>
</div>

为了更好地理解display 属性的含义,我推荐Candidate Recommendation。这是当前的(官方)Recommendation。

【讨论】:

为什么span元素设置为inline时高度不一样? 简单的答案是:因为内联内容就是这样工作的。技术答案可在 inline-formatting 和 line-height 的文档中找到。 @AndreiGheorghiu 好的,是的,我明白了,为什么“我需要”出现在带有引号的检查器中并且高度仍然为 101?见图片:imgur.com/a/i2B98In 因为 Chrome 现在为您提供有关块级元素中包含的文本节点的信息,就像它们是单独的元素一样(它们是单独的节点,但它们不是 html 元素)。但是,文本节点 一个 inline 元素,但不要将其误认为是 &lt;div&gt; 本身,其高度正好88px. @AndreiGheorghiu 有什么办法吗?我的问题是我在“我需要”文本上设置了一个点击事件,但它直接堆叠在另一个带有点击事件的元素下方。但是因为“我需要”文本仍然在 101 像素处读取,它会溢出到上面的元素中,导致点击事件不准确。

以上是关于为啥 div 内的嵌套跨度不遵循该 div 的行高规则?的主要内容,如果未能解决你的问题,请参考以下文章

内联元素上的 CSS 行高

如果此 div 内的元素(跨度)为空,则不显示 div

Margin 0 auto 到 div 内的跨度不起作用

外部 jquery 可拖动/可调整大小的 div 不允许我选择内部跨度的文本

跨度在 div 内浮动 - 为啥在 IE 中换行?

div内的嵌套按钮