css 新手最容易写错的选择器有哪些_避免混用 id 与 class
发布时间 - 2026-01-13 00:00:00 点击率:次class 和 id 选择器必须严格对应:. 对应 class 属性,# 对应 id 属性;多 class 元素 CSS 中需连写无空格(如 .a.b);id 仅用于 JS 或锚点,样式应统一用 class。
class 和 id 选择器写反了,浏览器不会报错但样式不生效
这是新手最常踩的坑:把 class="header" 写成 id="header",却在 CSS 里用 .header 去选;或者反过来,HTML 用了 class="btn-primary",CSS 却写成 #btn-primary。浏览器完全不报错,只是默默忽略匹配失败的选择器。
关键判断点:. 开头一定对应 class 属性,# 开头一定对应 id 属性,二者不能交叉使用。
- 检查 HTML 中的属性名是
class还是id - 检查 CSS 选择器开头是
.还是# - 用浏览器开发者工具(F12)看元素是否被该 CSS 规则“击中”——没被列在“Styles”面板里,大概率就是选错了
误以为 class 可以用 # 选,或 id 可以用 . 选
有人觉得“反正都唯一”,就用 #my-class 去选 class="my-class",或者用 .my-id 去选 id="my-id"。这是无效的——CSS 选择器语法严格区分语义:# 只认 id 属性值,. 只认 class 属性值,和内容是否重复、是否唯一无关。
哪怕你只用了一次 class="logo",也必须写成 .logo;哪怕你给某个元素加了 id="wrapper",也不能靠 .wrapper 拿到它。
立即学习“前端免费学习笔记(深入)”;
-
#logo→ 只匹配id="logo" -
.logo→ 只匹配class="logo"(可多个元素) -
[id="logo"]或[class="logo"]是属性选择器,能绕过语法限制,但没必要,且性能略差
混淆 class 多值写法与空格分隔的后代选择器
HTML 中 class="btn btn-primary disabled" 是合法的,但新手常误写成 CSS 里的 .btn .btn-primary .disabled(带空格),结果变成“找 .btn 里面的 .btn-primary 里面的 .disabled”,而不是“同时有这三个 class 的元素”。
要选同时具备多个 class 的元素,必须连写无空格:.btn.btn-primary.disabled。
.btn.btn-primary.disabled {
opacity: 0.6;
cursor: not-allowed;
}- 空格 = 后代选择器(层级关系)
- 紧挨着的点 = 同时满足多个 class(逻辑与)
- 多 class 元素在 HTML 中用空格分隔,在 CSS 中用连续点连接
用 id 当作样式钩子,导致难以复用和维护
虽然 #nav-bar 能生效,但 id 在页面中必须唯一,且优先级远高于
class(#id 的 specificity 是 100,.class 是 10),容易引发样式覆盖冲突。新手常为每个按钮、标题都配一个 id,结果后期改一个样式要满页找 id 修改。
正确做法:id 仅用于 JS 锚点、getElementById 或 ARIA 关联(如 aria-labelledby),纯样式一律用 class。
- 需要复用?→ 用
class - 需要 JS 精准控制单个元素?→ 用
id,但别在 CSS 里依赖它做样式 - 想提高 specificity?用多个 class(如
.btn.btn--large.btn--primary),别靠#
真正难的不是记住 . 和 # 的区别,而是习惯性地把语义和用途分开:id 是“这个东西叫什么名字”,class 是“这个东西属于哪一类”。混用一次不报错,混用十次就难定位。
# css
# html
# js
# go
# 浏览器
# app
# 工具
# 区别
# 属性选择器
# class
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在宝塔面板创建新站点?
如何实现建站之星域名转发设置?
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
Python自动化办公教程_ExcelWordPDF批量处理案例
网站制作价目表怎么做,珍爱网婚介费用多少?
音乐网站服务器如何优化API响应速度?
如何快速搭建虚拟主机网站?新手必看指南
韩国服务器如何优化跨境访问实现高效连接?
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
LinuxCD持续部署教程_自动发布与回滚机制
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
Linux系统命令中screen命令详解
Laravel如何配置Horizon来管理队列?(安装和使用)
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
详解Oracle修改字段类型方法总结
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Windows Hello人脸识别突然无法使用
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
如何快速生成高效建站系统源代码?
在线教育网站制作平台,山西立德教育官网?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
简历在线制作网站免费版,如何创建个人简历?
大同网页,大同瑞慈医院官网?
Laravel如何实现模型的全局作用域?(Global Scope示例)
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
JavaScript如何操作视频_媒体API怎么控制播放
JavaScript如何实现类型判断_typeof和instanceof有什么区别
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
JavaScript模板引擎Template.js使用详解
nginx修改上传文件大小限制的方法
Laravel如何处理文件下载请求?(Response示例)
如何快速查询网站的真实建站时间?
详解Huffman编码算法之Java实现
Python文件流缓冲机制_IO性能解析【教程】
🚀拖拽式CMS建站能否实现高效与个性化并存?
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
智能起名网站制作软件有哪些,制作logo的软件?
如何在Windows虚拟主机上快速搭建网站?

