【每日一题】如何获取DOM元素的实际样式值

前端印记

共 2398字,需浏览 5分钟

 ·

2021-09-06 18:34

人生苦短,总需要一点仪式感。比如学前端~

实际的样式值

实际的样式值:可以理解为浏览器的最终计算样式

CSSStyleDeclaration对象

平时我们获取DOM元素的style 对象,它里边仅包含我们给元素设置的style属性的样式信息,但不包含从其他样式表层叠继承的、同样影响该元素的样式信息CSSStyleDeclaration对象(与从元素的 style (en-US)  属性返回的对象具有相同的类型)。

CSSStyleDeclaration对象

但是我们往下翻CSSStyleDeclaration对象,可以看到样式表里设置的direction属性是拿不到值的。

getComputedStyle() 方法

DOM2 Style 在 document.defaultView 上增加了 getComputedStyle()方法。用于获取元素的所有CSS属性的值

入参

这个方法接收两个参数:
1、要获取计算样式的DOM元素(必须是Element对象)
2、伪元素字符串(如":after"),如果不需要查询伪元素,则第二个参数可以传递null

let style = window.getComputedStyle(element, [pseudoElt]);

出参

getComputedStyle()方法返回一个 返回的style是一个实时的 CSSStyleDeclaration 对象,包含元素的计算样式。但是这些样式是只读的

实时的概念是:当元素的样式更改时,它会自动更新本身。

getComputedStyle使用和实时属性值计算

与伪元素使用

这恐怕是这个方法最强大的地方了,他可以让你从伪元素拉取样式信息 (比如, ::after, ::before, ::marker, ::line-marker)。

看个例子:下图这个元素的伪元素上,有好多样式表里设置的属性,我们来获取一下

使用注意

方法调用

在firefox3.6上访问子框架内的样式,必须要通过 document.defaultView 对象来调用。

其他情况用window访问即可

属性获取

上边background我们是直接获取的简写,但实际这个对象存储的各个属性名字有小驼峰也有中横线命名,两种方式都可以获取

beforeStyle['background-size']
// 或者
beforeStyle.backgroundSize
中横线命名
小驼峰命名

兼容写法

function getStyleByAttr(obj, name{
  return window.getComputedStyle ?
    window.getComputedStyle(obj, null)[name] :
    obj.currentStyle[name];
}

兼容性

这么说吧,随便用

can i use

END
愿你历尽千帆,归来仍是少年。


让我们一起携手同走前端路!

关注公众号回复【加群】即可

● 为什么操作DOM会影响WEB应用的性能?

 一张图带你搞懂Javascript原型链关系

一张图带你搞懂Node事件循环

浏览 24
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报