你知道这个 CSS 属性吗 —— getComputedStyle

简介: Computed 在 Vue 中常用,是一种计算属性,里面的值是响应式的,但你知道 getComputedStyle 这个 CSS 属性吗?Computed + Style ,没错,样式也能做到响应式。

Computed 在 Vue 中常用,是一种计算属性,里面的值是响应式的,但你知道 getComputedStyle 这个 CSS 属性吗?Computed + Style ,没错,样式也能做到响应式。


Window.getComputedStyle() - Web API 接口参考 | MDN MDN 这里可以得知:

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


style是一个实时的 CSSStyleDeclaration 对象,当元素的样式更改时,它会自动更新本身。


本篇带来 getComputedStyle 的 2 个巧用~


1. PC or Mobile



我们通常用响应式布局判断当前设备是 PC 端还是 Mobile,然后采用不同的样式。

@media screen and (max-width: 480px) {
    /* 小屏幕宽度下的响应式布局 */
}


如果想在 JS 也拿到这个信息(当前是 PC 还是 Mobile),可以获得 screen.width,但这个 width 信息是不准确的,手机也存在横屏的时候,会产生临界宽度的问题。


这个时候我们可以利用 getComputedStyle 拿 CSS 的伪元素信息,再搭配 CSS 原生支持的 any-hover 属性,就能在 CSS 和 JS 两处地方,准确地知道:当前是 PC 还是 Mobile。


@media (any-hover: none) {
    body::before {
        content: 'hoverNone';
        display: none;
    }
}
var strContent = getComputedStyle(document.body, '::before').content;


// strContent结果是'none'则表示支持 hover,是 PC 端,

// strContent结果是'"hoverNone"'则表示不支持 hover 经过,需要换成 click 事件,是 Mobile 端


这样 JS 就拥有了 CSS any-hover 的能力~


2. 黑暗模式



我们经常用到黑暗模式:自从有了 CSS 自定义属性,黑暗模式写起来也变得方便:

JS 如何共享自定义属性 --mode 的内容?

如何用 JS 判断当前是处于黑暗模式,还是浅色主题?

getComputedStyle 可以做到~~


:root {
    --mode: 'unknown';
}
@media (prefers-color-scheme: dark) {
    /* 黑暗模式 */
    :root {
         --mode: 'dark';
         --colorLink: #bfdbff;
         --colorMark: #cc0000;
         --colorText: #ffffff;
         --colorLight: #777777;
    }
}
@media (prefers-color-scheme: light) {
    /* 浅色主题 */
    :root {
         --mode: 'light';
         --colorLink: #34538b;
         --colorMark: #cc0000;
         --colorText: #000000;
         --colorLight: #cccccc;
    }
}


一行代码解决:


var mode = getComputedStyle(document.documentElement).getPropertyValue('--mode').trim();
// mode结果是'"dark"'则表示黑夜主题,深色模式,黑暗风格,护眼模式。


小结


getComputedStyle 属性和 CSS 伪类搭配有妙用!能让 JS 读取 CSS 的信息,让 JS 获取 CSS 的能力~~

而且 getComputedStyle 兼容性良好,有空试试吧?

image.png


相关文章
|
15天前
|
前端开发
css的渐变属性linear-gradient
css的渐变属性linear-gradient
|
5天前
|
前端开发
CSS属性:盒子模型
CSS属性:盒子模型
18 0
|
5天前
|
前端开发
CSS属性
CSS属性
17 0
|
7天前
|
前端开发
前端基础(五)_CSS文本文字属性、背景颜色属性
本文详细介绍了CSS中关于文本和背景颜色的样式属性。包括字体大小、字体族、字体加粗、字体样式、文本行高、`font`属性、文本颜色、文本对齐方式、文本装饰线、首行缩进等文本属性,以及背景颜色、背景图片、背景重复、背景位置等背景属性。文章通过示例代码展示了这些属性的具体应用和效果。
12 3
前端基础(五)_CSS文本文字属性、背景颜色属性
|
2月前
|
前端开发
CSS常用滤镜属性讲解
本文介绍了CSS滤镜的几种常用效果,包括高斯模糊、亮度和对比度调整、灰度化、图像反转、透明度调整、饱和度调整及复古滤镜等。例如,使用`blur(10px)`可使图像产生模糊效果,包裹层设置`overflow: hidden`可避免边缘模糊;`brightness(150%)`和`contrast(150%)`分别增强图像亮度和对比度;`grayscale(1)`将图像转为灰度;`invert(1)`实现图像颜色完全反转;`opacity(0.5)`调整图像半透明;`saturate(350%)`增加饱和度;`sepia(100%)`营造复古深褐色调;`hue-rotate(180deg)`改变
31 4
CSS常用滤镜属性讲解
|
2月前
|
前端开发
了解 css中 backface-visibility 属性
`backface-visibility` 是一个CSS属性,用于3D转换时控制元素背面的可见性,以优化渲染性能。默认情况下,背面被隐藏以减少不必要的渲染。此属性有两值:`visible` 表示背面可见;`hidden`(默认值)则隐藏背面。 通过双面卡片案例演示了其用法:两个重叠盒子,一个显示图片,另一个显示文字且初始状态为背面朝外。鼠标悬停时,图片盒子翻转显示背面,文字盒子翻转显示正面,同时设置 `backface-visibility: hidden` 以确保背面不被渲染。 兼容性良好,广泛支持现代浏览器。
36 2
了解 css中 backface-visibility 属性
|
9天前
|
前端开发
Vue3基础(十ba)___在css中使用props或者计算属性的变量,来实现动态样式
本文介绍了如何在Vue3中通过CSS变量和props或计算属性来实现动态样式。
12 0
|
2月前
|
前端开发 算法 开发者
CSS 的了解text-rendering属性
【8月更文挑战第24天】
|
2月前
|
前端开发 搜索推荐 UED
浅谈css的cusor属性
浅谈css的cusor属性
35 1
|
2月前
|
前端开发
CSS动画变形宝典:Transform属性,打造动态视觉盛宴!
CSS动画变形宝典:Transform属性,打造动态视觉盛宴!