7.2尺寸与适配系列—— 读写样式的4种方法的特点与区别

204 阅读2分钟

本人已参与新人「创作礼活动」,一起开启掘金创作之路。

一、重点API

1.1 操作样式的方法

分为读、写两种,即获取、设置。

  • 元素.style.属性名:仅支持获取行内样式,即明确写在元素的 style 属性上的样式;
  • window.getComputedStyle,返回的是计算后的包含了所有样式CSSStyleDeclaration 类型的对象;如果获取的样式没有设置,则会获取真实值,而不是默认值,如:没有设置width,不会获取auto,而是当前真实的长度;
  • document.styleSheets:返回一个StyleSheetList / CSSStyleSheet 对象,这个对象对应的是通过引入或者嵌入文档中的样式表;即对象中的cssRules(或rules)包含外链<link>和内部<style>标签写入的样式但只能读取到内部样式(保持原样未计算),不能读取到行内、外链及计算后的样式;
  • 设置或修改 CSS 属性: ele.style.setProperty;

总结: 以上的三种CSS获取元素大小的方法,只能获取元素的CSS大小,却无法获取元素本身实际的大小。比如加上了内边距、滚动条、边框之类的。

/* 设置或修改 CSS 属性 */
:root { --theme_primary_color: #4279fd }
document.documentElement.style.setProperty('--theme_primary_color', this.theme['--theme_primary_color']);
或
const declaration = document.styleSheets[0].cssRules[0].style; 
const setprop = declaration.setProperty("background-color", "yellow");

cssRules(或rules)只能获取到内联和链接样式的宽和高,不能获取到行内和计算后的样式。

style与getComputedStyle异同

相同点不同点
1、二者返回的都是 CSSStyleDeclaration 对象,取相应属性值得时候都是采用的 CSS 驼峰式写法1、element.style 读取的只是元素的内联样式,即写在元素的 style 属性上的样式;而 getComputedStyle 读取的样式是最终样式,包括了内联样式、嵌入样式和外部样式。
2、element.style 既支持读也支持写,我们通过 element.style 即可改写元素的样式。而 getComputedStyle 仅支持读并不支持写入。我们可以通过使用 getComputedStyle 读取样式,通过 element.style 修改样式