微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 使用:before和:after获取合成元素的实际高度

有没有办法获得使用:before和:after绘制的元素的javascript(jquery也很好)的实际高度?

看看这个小提琴:http://jsfiddle.net/a7rhdk86/

谢谢!

解决方法:

您可以使用window.getComputedStyle来访问:before伪元素的样式.见http://davidwalsh.name/pseudo-element.但是,这会获得元素的css高度和宽度,而不是旋转变换后的边界框.

进入hacky领域,我从http://upshots.org/javascript/jquery-copy-style-copycss借用代码,将所有样式从伪元素复制到实际元素,将其添加到DOM并使用getBoundingClientRect获取边界框.

var style = window.getComputedStyle(
    document.querySelector(".arrow"), ":before"
    )

var dest = {}
if (style.length) {
     for (var i = 0, l = style.length; i < l; i++) {
         prop = style[i];
         camel = prop.replace(/\-([a-z])/, camelize);
         val = style.getPropertyValue(prop);
         dest[camel] = val;
     }
 } else {
     for (prop in style) {
         camel = prop.replace(/\-([a-z])/, camelize);
         val = style.getPropertyValue(prop) || style[prop];
         dest[camel] = val;
     }
 }

var copy = $("<div />").css(dest)
copy.appendTo(".arrow")
var boundingRect = copy[0].getBoundingClientRect()
console.log(boundingRect.height)
console.log(boundingRect.width)
copy.remove()

function camelize(a, b) {
    return b.toupperCase();
}

http://jsfiddle.net/omahlama/mybzymp7/1/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐