javascript如何与CSS交互_它怎样修改样式?
发布时间 - 2026-01-12 00:00:00 点击率:次直接修改element.style只影响行内样式,无法覆盖CSS文件或style块中的规则(除非无!important且优先级更低);需用驼峰命名、带单位赋值;读取时仅返回行内值,查最终样式须用getComputedStyle。
直接改 element.style 只影响行内样式
JavaScript 修改元素样式最常用的方式是操作 style 属性,但它只读写 HTML 中的 style 行内属性,不会覆盖 CSS 文件或 块里定义的规则,除非那些规则没加 !important 且优先级更低。
常见误操作:以为 el.style.color = 'red' 能让所有文本变红——其实它只对这个 el 生效,且一旦 CSS 里写了 color: blue !important,JS 就会被压制。
-
style属性名用驼峰写法:backgroundColor而不是background-color - 设置值必须带单位(
px、em、%等),el.style.width = 200无效,得写el.style.width = '200px' - 读取时,
el.style.xxx只返回行内设置的值,查不到 CSS 文件里写的;要查最终计算值,得用getComputedStyle(el).xxx
classList 是切换样式类的推荐方式
比起硬编码样式,用 CSS 类 + classList 更可控、更易维护,也天然支持 :hover、@media 等 CSS 能力。
const btn = document.querySelector('#submit');
btn.classList.add('disabled');
btn.classList.remove('active');
btn.classList.toggle('highlight');
btn.classList.contains('disabled'); // true
-
add()和remove()可一次传多个类名:el.classList.add('a', 'b', 'c') -
toggle('cls', boolean)的第二个参数决定是强制添加还是移除,不传则切换 - 避免直接赋值
el.className = 'new',会清空所有已有类
动态插入 CSS 规则要用 insertRule
如果需要在运行时生成整条 CSS 规则(比如主题色注入、组件 scoped 样式),不能靠改 style 或 classList,得操作 元素的 sheet。
const style = document.createElement('style');
document.head.appendChild(style);
const sheet = style.sheet;
sheet.insertRule('.theme-dark { color: #fff; background: #111; }', 0);
-
insertRule(rule, index)第二个参数是插入位置,0表示最前,会影响层叠顺序
- 注意浏览器兼容性:IE10+ 支持,但 IE 需用
addRule()(已废弃,不建议用) - 大量规则建议拼成字符串一次性注入
style.textContent,比反复insertRule快
getComputedStyle 读的是最终生效值,但有陷阱
它返回的是浏览器计算后的样式,看似“真实”,但要注意:
- 返回值全是字符串,包括
width、margin这些本应是数字的属性,都带单位:getComputedStyle(el).width === '200px' - 无法获取伪元素样式(如
::before),除非显式传第二个参数:getComputedStyle(el, '::before') - 某些属性(如
display)在元素display: none时可能返回'none',但其他布局相关属性(如height)可能返回'0px'或空字符串,行为不一致 - 性能敏感场景慎用:频繁调用会触发重排(reflow),尤其在循环中
style 直接、即时但脆弱;classList 间接、可复用但需预设类;insertRule 灵活但难调试;getComputedStyle 看似权威,实则受渲染时机和元素状态影响很大。
# css
# javascript
# java
# html
# js
# 伪元素
# 编码
# 浏览器
# app
# ssl
# ai
# red
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
js实现点击每个li节点,都弹出其文本值及修改
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
Laravel storage目录权限问题_Laravel文件写入权限设置
如何快速上传建站程序避免常见错误?
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
googleplay官方入口在哪里_Google Play官方商店快速入口指南
Laravel如何使用.env文件管理环境变量?(最佳实践)
在线制作视频网站免费,都有哪些好的动漫网站?
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
EditPlus中的正则表达式实战(5)
如何在阿里云通过域名搭建网站?
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
Laravel如何与Pusher实现实时通信?(WebSocket示例)
网站制作免费,什么网站能看正片电影?
详解Android——蓝牙技术 带你实现终端间数据传输
如何在IIS中配置站点IP、端口及主机头?
如何用5美元大硬盘VPS安全高效搭建个人网站?
Laravel如何实现API速率限制?(Rate Limiting教程)
Laravel集合Collection怎么用_Laravel集合常用函数详解
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
韩国服务器如何优化跨境访问实现高效连接?
如何快速搭建FTP站点实现文件共享?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
Mybatis 中的insertOrUpdate操作
如何快速搭建高效WAP手机网站?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
如何选择PHP开源工具快速搭建网站?
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Swift中swift中的switch 语句
Laravel如何实现用户密码重置功能?(完整流程代码)
如何在橙子建站上传落地页?操作指南详解
JavaScript模板引擎Template.js使用详解
如何在建站之星绑定自定义域名?
图册素材网站设计制作软件,图册的导出方式有几种?
深圳网站制作培训,深圳哪些招聘网站比较好?
高端企业智能建站程序:SEO优化与响应式模板定制开发
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Python制作简易注册登录系统
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
黑客入侵网站服务器的常见手法有哪些?
如何基于PHP生成高效IDC网络公司建站源码?


