如何获得跨度的线高?

Posted

技术标签:

【中文标题】如何获得跨度的线高?【英文标题】:How to get the line height of a span? 【发布时间】:2012-01-26 06:06:47 【问题描述】:

有没有办法在 javascript/jQuery 中获取 span(或其他内联元素)的 line-height

我需要精确计算的line-height(以像素为单位),而不是1.2emnormalfontSize * 1.5 之类的启发式算法。

我需要做的是拉伸span 的背景以填充线条的整个高度。我想我可以添加填充来拉伸跨度,但为此我需要确切的line-height。如果有人可以提供另一种方法,这也会有所帮助。

【问题讨论】:

你的 span 需要有 display:block,比如span line-height:12px; display:block; 【参考方案1】:
$("span").css( "line-height");

例如,以字符串“16px”的形式检索计算得到的 px 值。它使用 IE 的currentStyle 或标准的getComputedStyle。这有点令人惊讶,因为当它作为二传手工作时,它会做elem.style.something = value,这是完全不同的事情。

【讨论】:

当然,这是我尝试的第一件事。不幸的是,在 WebKit 浏览器上,它返回字符串“正常”,除非我提前手动设置了 line-height。我正在使用 jQuery 1.6.1。它在以后的版本中有不同的行为吗? @RadanGanchev 你是对的,它对某些元素返回正常。 [].forEach.call( document.getElementsByTagName("*"), function(v) console.log ( getComputedStyle(v).lineHeight ); ); 运行时会在此页面上为大多数元素返回 px 值。 @Esailija 是的,如果您检查此页面上的元素,您会发现它们中的大多数在 CSS 中设置了 line-height,而少数具有默认的 line-height。对于默认line-height 的那些仍然显示“正常”。我也在我的网站上对其进行了测试,但仍然无法正常工作。 @RadanGanchev 我在fontSize 上运行它,我得到了所有的 px 值 - 也许 font-size px 值在正常时用作行高? w3.org/TR/CSS21/visudet.html#propdef-line-height @Esailija 是的,fontSize 计算正确。不幸的是,行高几乎永远不会等于字体大小。我认为它取决于浏览器,在大多数浏览器中,它类似于lineHeight = fontSize * 1.5(即line-height: normal)。【参考方案2】:

一个简单的方法是:

var style = window.getComputedStyle(element);
var lineHeight = style.getPropertyValue('line-height');

这将在不使用 jQuery 的情况下获得行高的计算值,并且适用于从 IE9 开始的所有浏览器。

【讨论】:

这将在大多数情况下返回"normal",而不是像素值。【参考方案3】:

假设 span 包含在 div 中。

您可以将 div 设置为 position:relative

跨度为一个占用 100% 高度的块。

通过这种方式,您将根据需要拉伸跨度。

例如here (注意:要查看效果,将span的背景颜色改为透明即可。应该可以看到红色的div。)

【讨论】:

我使用的是span,因为我需要一个内联元素。我的目标是标记一些可能从一行中间开始的文本。 display: block 不适合我。【参考方案4】:

如果您的设计允许,您可以将 inline-block 应用于您要定位的元素,然后使用outerHeight ...

var inlineHeight = $('.inline-height').css("display", "inline-block").outerHeight(); 
//console.log('Inline Height:' + inlineHeight);

【讨论】:

以上是关于如何获得跨度的线高?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 MKMapView 中获得更细粒度的跨度

如何获得连续的 nowrap 跨度以包装为单独的元素?

如何在 OpenOffice Calc 宏中获得合并的单元格行/列跨度

如何获得由等高线图绘制的线的 (x,y) 值?

span中的显示块不起作用。如何使其跨度与上一个跨度相同?

如何在 Ag-Grid 中将相同的相邻行与动态行跨度合并? [关闭]