css的选择器有哪些-适配不同页面元素的实操选择工具
刚学前端写样式那会,最头疼的就是分不清css的选择器有哪些,每次写代码全靠瞎试,样式要么全局错乱,要么精准选中不了目标元素,改一下代码牵扯出一堆未知问题。那时候只知道随便写个标签名加样式,完全不懂不同选择器的适配场景,踩了无数布局和样式覆盖的坑,慢慢在实操里摸透了各类选择器的用法。
最基础的就是标签选择器,也是最先接触、用得最多的基础选择器。它的逻辑特别简单,直接用HTML标签名选中所有对应元素。刚开始写简单页面,页面结构只有p、div、span这些基础标签,就全靠它统一样式。当时做一个新闻展示页面,想让所有段落文字统一字号和行高,直接写p标签样式,整个页面所有段落就同步生效了。但弊端也特别明显,只要用了标签选择器,页面里所有同名标签都会被修改,没法单独控制某一个元素,稍微复杂一点的页面就完全不够用。
后来折腾好久才搞明白,类选择器才是日常开发的主力。用class定义样式,元素自由绑定类名,灵活性直接拉满。之前做导航栏样式的时候,用标签选择器改a标签,所有超链接样式全都变了,页面按钮、文字链接全部乱套。换成类选择器单独给导航链接设置class,只针对导航栏的链接生效,其他链接完全不受影响。而且一个元素可以绑定多个类名,拆分样式功能,一个类控制颜色,一个类控制边距,复用性特别强,项目里百分之八十的样式都是靠类选择器实现的。
id选择器是当时最容易误用的一个。一开始以为它和类选择器差不多,随便给元素加id写样式,结果调试的时候频繁出现样式不生效、被覆盖的问题。后来实操出错多了才清楚,id是唯一标识,一个页面只能对应一个元素,优先级比类和标签选择器都高。现在只用来选中页面独一无二的元素,比如页面头部、底部、唯一的弹窗模块,基本不会用id写通用样式,避免后续样式层级混乱。
属性选择器属于小众但超好用的选择器,之前一直忽略这个类型,直到做表单页面踩了坑。当时需要统一所有输入框的样式,普通的input标签混杂了文本框、密码框、按钮,用标签选择器无法区分。偶然试了属性选择器,通过type属性精准选中text类型的输入框,单独设置边框和内边距,不用再逐个加class,省下了超多重复代码。不管是匹配属性存在、属性等于特定值,还是属性包含指定字符,都能精准筛选元素,适配表单、链接这类带固定属性的标签。
层级选择器是复杂布局的必备选择,初学的时候完全不懂层级关系,所有样式都写全局,导致嵌套元素样式冲突严重。做商品列表页的时候,外层容器和内部卡片都有div标签,全局样式互相干扰。后来用后代选择器,通过外层父级类名嵌套子元素标签,只选中容器内部的指定元素,完美隔离样式。还有子代选择器,只匹配直接子元素,不会穿透多层嵌套,适合需要严格控制层级、避免样式渗透的场景,多层嵌套的页面布局全靠它稳住样式。
伪类选择器是提升页面交互质感的关键,最常用的就是鼠标悬浮、点击激活、未访问状态这些。之前写按钮的时候,按钮默认样式死板,没有交互效果,加上hover伪类,鼠标悬浮时变色、缩放,页面瞬间灵动很多。还有a标签的link、visited、active伪类,能精准控制链接不同状态的样式,表单的focus伪类可以聚焦输入框样式,这些细节交互全部依赖伪类选择器实现。
伪元素选择器和伪类很容易混淆,实操中慢慢分清了两者的区别。伪类是给元素添加状态样式,伪元素是凭空生成虚拟元素,用来做装饰效果。平时做文字首行缩进、添加前后小图标、分割线,不用额外写HTML标签,直接用before、after伪元素生成内容,精简了页面结构,不用堆砌多余的空标签,代码整洁度提升很多。
通用选择器就是全局通配符,能选中页面所有元素。几乎不会用来写业务样式,唯一的用处就是页面初始化重置样式,清除所有元素默认的内外边距,统一浏览器默认样式,每次新建项目都会先写一遍通用选择器的重置代码,避免浏览器默认样式差异导致的布局错位。
现在写代码已经不会再纠结选择器的种类了,只会根据需求随手匹配最合适的类型,简单全局样式用标签,通用复用样式用类,唯一元素用id,精准筛选用属性,层级隔离用嵌套,交互和装饰交给伪类、伪元素。
敲完最后一行样式代码,关掉调试控制台,屏幕上的页面布局终于没有再出现错乱重叠的问题。