动态设置 CSS 样式时,如何写入各浏览器兼容性样式?

简介: 动态设置 CSS 样式时,如何写入各浏览器兼容性样式?

前言


我们知道,通过原生 JS 脚本动态设置内联样式的方式有:

<!-- 省略一万行代码... -->
<style>
  @keyframes slidein {
    from {
      transform: scaleX(0);
    }
    to {
      transform: scaleX(1);
    }
  }
</style>
<div id="app">关关雎鸠,在河之洲...</div>

const element = document.getElementById('app')
// 1️⃣ 方式一(泛指一类,下同)
element.style.fontSize = '30px'
// 2️⃣ 方式二
element.style.setProperty('font-size', '30px')
// 3️⃣ 方式三(请注意,这可能会抹掉其他 CSS 属性的哦)
element.style.cssText = 'color: 30px'
element.setAttribute('style', 'color: 30px')


但是,这里面有一些限制在里面...


  • 方式一:无法设置权重 !important,若带上权重,其属性值也不会生效。
  • 方式二:无法设置带 -webkit--moz--o--ms- 等各浏览器厂商实验性或非标准的 CSS 属性,如 -webkit-animation
  • 方式三:可以处理以上两种方式无法实现的功能。另外,要获取内联样式中某个 CSS 属性是否含有 !important 权重,也需借助 element.style.cssText 方可获取。


正文


验证


方式一

// 对比一
element.style.fontSize = '30px' // 有效
element.style.fontSize = '50px !important' // 无效,除了不会设置权重之外,50px 也不会生效哦。
// 对比二
// 假设 element 元素本身就含有 font-size: 30px !important 的内联样式
element.style.fontSize // 输出 "30px",注意是不含权重的
element.style.fontSize = '50px' // 这是有效的,同时权重也会丢失
element.style.fontSize = '50px !important' // 无效
// 对比三
element.style.animation = '3s slidein' // 有效
element.style.webkitAnimation = '3s slidein' // 有效,但是最终会变成 animation: "3s slidein",而不是 -webkit-animation: "3s slidein"
element.style.MozAnimation = '3s slidein' // 有效,但同上


小结:


  • 通过 element.style.fontSize 这一类形式读写内联样式时,都无法读取写入权重,而且需要注意的是 element.style.fontSize = '30 !important' 并不会被写入哦。
  • 通过 element.style.webkitAnimation = '3s slidein'element.style.MozAnimation = '3s slidein' 形式写入包含浏览器厂商特性的 CSS 属性时,将会被处理成标准的 CSS 属性。例如:-webkit-animation 变为 animation,跟预期结果是有出入的。
  • 另外,请注意写法。标准 CSS 属性是小驼峰形式,而带浏览器厂商特性的 CSS 属性,则可能不是小驼峰命名规则。例如:webkitXxxMozXxx 首字母大小写就不一样。

请注意,以上示例仅列举了个别属性,但其实是泛指同一类。


方式二

// 对比一
element.style.setProperty('font-size', '30px') // 有效
element.style.setProperty('font-size', '30px', 'important') // 有效(可设置权重,但请注意是不含 ! 的)
// 对比二
element.style.setProperty('-webkit-animation', '3s slidein') // 有效,可会变为 animation。同方式一
element.style.setProperty('-moz-animation', '3s slidein') // 有效,可会变为 animation。同方式一


小结:


  • 可通过 CSSStyleDeclaration.setProperty(propertyName, value, priority) 方法,并传递 important(请注意是不含 ! 的) 给 priority 参数,来设置 CSS 优先级。


方式三


这种方式,除了可以实现以上功能之外,最重要的是,它可以设置 -webkit--moz--o--ms- 等实验性或非标准的 CSS 属性。

element.style.cssText = 'font-size: 30px; -webkit-animation: 3s slidein' // 有效
element.setProperty('style', 'font-size: 30px; -webkit-animation: 3s slidein') // 有效

⚠️ 尽管以上两种方式都能实现,但注意可能会抹掉当前元素的其他 CSS 属性,可利用类型以下的方式处理。

const { cssText } = element.style
element.style.cssText = `${cssText} font-size: 30px; color: #f00`


References



The end.

目录
相关文章
|
26天前
|
前端开发
如何设置 CSS 盒子模型的边框样式?
CSS盒子模型的边框样式可以通过`border`属性设置,包括边框宽度、样式和颜色。例如:`border: 2px solid red;` 设置了2像素宽的红色实线边框。也可分别设置四边,如`border-top`、`border-right`等。
|
15天前
|
前端开发 JavaScript UED
|
17天前
|
Web App开发 缓存 UED
如何设置浏览器的缓存策略?
【10月更文挑战第23天】通过合理地设置浏览器的缓存策略,可以在提高网页性能、减少网络流量的同时,确保用户能够获取到最新的内容,从而提升用户体验和网站的性能优化效果。
54 4
|
17天前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
17 1
|
1月前
|
前端开发 JavaScript
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
159 1
|
1月前
|
编解码 前端开发 JavaScript
使用 CSS 打印样式为 Web 页面设置专业的打印机效果
使用 CSS 打印样式为 Web 页面设置专业的打印机效果
52 2
|
20天前
|
前端开发
HTML 样式- CSS3
内部样式表适用于单个文件的特别样式,通过&lt;head&gt;部分的&lt;style&gt;标签定义;外部样式表适用于多个页面,通过&lt;link&gt;标签引用外部CSS文件;&lt;style&gt;定义样式,&lt;link&gt;引用资源;已弃用的标签有&lt;font&gt;、&lt;center&gt;、&lt;strike&gt;,属性有color和bgcolor。
|
20天前
HTML 样式- CSS2
HTML样式实例展示了如何使用`font-family`、`color`和`font-size`属性来定义字体样式,以及使用`text-align`属性来设置文本的对齐方式。示例包括标题和段落的样式设置。
|
20天前
|
前端开发
HTML 样式- CSS1
CSS (层叠样式表) 用于为 HTML 元素添加样式,包括颜色、文本、盒子模型等。CSS 可以通过内联样式、内部样式表或外部引用的方式添加到 HTML 中。推荐使用外部引用方式。本教程将介绍如何使用 CSS 为 HTML 添加样式,并提供实例演示。
|
15天前
|
JSON 移动开发 JavaScript
在浏览器执行js脚本的两种方式
【10月更文挑战第20天】本文介绍了在浏览器中执行HTTP请求的两种方式:`fetch`和`XMLHttpRequest`。`fetch`支持GET和POST请求,返回Promise对象,可以方便地处理异步操作。`XMLHttpRequest`则通过回调函数处理请求结果,适用于需要兼容旧浏览器的场景。文中还提供了具体的代码示例。
在浏览器执行js脚本的两种方式