2021-04-24 19:07:33
在 JavaScript 中修改 HTML 元素的 CSS 样式主要有两种方式:直接操作 style 属性和通过 classList 管理 CSS 类。以下是具体操作指南及注意事项:
一、使用 style 属性直接修改内联样式通过元素的 style 属性可直接设置内联样式,适用于快速修改少量样式,但会覆盖原有内联样式(优先级高于外部 CSS)。

基本用法:
const element = document.getElementById('myElement');element.style.backgroundColor = 'red'; // 修改背景色element.style.fontSize = '20px'; // 修改字体大小批量修改:使用 cssText 一次性设置多个样式(会覆盖原有内联样式):
element.style.cssText = 'background-color: blue; color: white;';注意事项:
避免频繁操作 style,可能引发重绘(Reflow)影响性能。
无法覆盖 CSS 中的 !important 声明。
样式名需使用驼峰命名(如 backgroundColor 而非 background-color)。
通过 classList 添加、移除或切换 CSS 类,适合复杂样式管理,不覆盖原有样式,且便于复用和维护。

定义 CSS 类(在 CSS 文件中或 <style> 标签内):
.highlight { background-color: yellow; font-weight: bold;}操作类名:
const element = document.getElementById('myElement');element.classList.add('highlight'); // 添加类element.classList.remove('highlight'); // 移除类element.classList.toggle('highlight'); // 切换类if (element.classList.contains('highlight')) { // 检查类 console.log('Element has highlight class');}样式与逻辑分离,便于维护。
支持 CSS 优先级规则(如通过 !important 或选择器权重控制)。
性能差异:
style 属性直接修改内联样式,速度略快,但差异通常可忽略。
频繁操作 DOM(无论 style 或 classList)均会导致重绘,建议批量操作或使用 requestAnimationFrame 优化。
CSS 优先级规则(从高到低):
!important 声明
内联样式(style 属性)
ID 选择器(如 #id)
类/属性/伪类选择器(如 .class、:hover)
元素/伪元素选择器(如 div、::before)
示例:若需覆盖内联样式,需使用更高优先级的选择器或 !important。
使用 window.getComputedStyle() 获取元素最终计算样式(包括继承和默认样式):
const element = document.getElementById('myElement');const style = window.getComputedStyle(element);console.log(style.backgroundColor); // 输出背景色值console.log(style.fontSize); // 输出字体大小五、不推荐的操作方式通过 JavaScript 修改 CSS 变量实现全局样式更新:
定义变量:
:root { --main-color: blue;}body { background-color: var(--main-color);}修改变量值:
const root = document.documentElement;root.style.setProperty('--main-color', 'red'); // 背景色变为红色一处修改,多处生效。
支持主题切换和动态效果。
