javascript:获取伪元素的高度:before元素

Posted

技术标签:

【中文标题】javascript:获取伪元素的高度:before元素【英文标题】:javascript: get height of pseudo :before element 【发布时间】:2014-06-08 12:54:49 【问题描述】:

我需要一个伪 :before 元素的高度。听起来很简单,但我无法让它工作。这是我尝试过的:

$('.test:before').height() // --> null

还有一个jsfiddle 有什么建议我做错了什么?

更新:.test 的高度取决于内容。我需要做的是,当高度大于伪元素时,我需要在元素的右侧添加一个填充。但是,因为伪元素的高度是由css设置的,我的程序中并不知道

【问题讨论】:

伪元素不能被 JQ 选择,因为它们不在 DOM 中。 为什么你需要高度...你还没有定义这个吗? @Paulie_D 也许他正在使用 CSS 媒体选择并且不知道哪些样式规则有效? 您应该能够将window.getComputedStyle() 与伪元素一起使用,但我不确定浏览器是否支持。见jsfiddle.net/BoltClock/asCV9/1 @BoltClock 太棒了。 This here 显示浏览器支持 我已经添加了解释为什么以及我正在尝试做什么!感谢您到目前为止的回答! 【参考方案1】:

正如 Paulie_D 所说,“jQuery 无法选择伪元素”。

但是,如果您网站上的元素的样式与它们在 JSFiddle 中的样式相同,那么 div 最终将与 :before 具有相同的高度,您可以获得以下值:

$('.test').height()

如果不一样,请告诉我们您希望得到高度的原因,您可能还可以做其他事情。

【讨论】:

【参考方案2】:

您可以根据您的布局以某种方式接近它。 如果您的伪元素溢出父元素,则 scrollWith/scrollHeight 将为您提供伪元素尺寸,因为该属性返回框内容的整体大小,是否可见(可滚动)。

参考资料:

MDN Element.scrollWidth Understanding offsetWidth, clientWidth, scrollWidth and -Height, respectively

【讨论】:

【参考方案3】:

超迟回复,但是:您可以使用 vanilla javascript 使用 getComputedStyle 方法获取伪元素尺寸:

var testBox = document.querySelector('.test');

// Or with jQuery: testBox = $('.test').get(0); - We want the JS element, without the jQuery wrapper

var pseudoBeforeHeight = window.getComputedStyle(testBox, ':before').height; // Returns (string) "70px"

这将返回一个像素值字符串,无论 CSS 声明如何(例如4.375rem = 70px10vh = 70pxcalc(8vh + 1rem) = 70px,因此要获取数字(以像素为单位),您可以这样做:

var pseudoHeightNum = parseInt(pseudoBeforeHeight);

关于兼容性:CanIUse 建议,截至 2017 年 7 月,它几乎适用于所有现代浏览器(显然即使支持 IE9 及更高版本):reference。

【讨论】:

@JeanlucaScaljeri 能在这个上获得一个接受标记真是太棒了,即使有点晚了?

以上是关于javascript:获取伪元素的高度:before元素的主要内容,如果未能解决你的问题,请参考以下文章

CSS:伪元素 :before 和 :after 从原始元素继承宽度/高度

宽度和高度似乎不适用于 :before 伪元素

CSS ::before伪元素行高?

利用javascript获取并修改伪元素的值

如何通过Javascript更改伪:before元素的内容值[重复]

如何保持伪选择器 ::before 的动态高度?