① 运算符组合选择器(关系选择器)
② 属性组合选择器
③ 群组选择器
伪类和伪元素都是选择器,适用于:
示例:
::first-line可以选中块级元素的第一行。由于内容、设备宽度变化,第一行的内容也在变化。比起更改 HTML,直接定位某个元素的第一行在实际应用中更加方便。
两者区别如下:
伪类
用于选择元素的特定状态。单冒号开头。分为:
伪元素
用于选择元素的 特定部分。双冒号开头。举例:
为兼容早期浏览器,实际使用时,多将双冒号写作单冒号
原因:早期规范没有明确伪元素必须双冒号,当时浏览器多用单冒号,现代浏览器同时兼容单和双冒号
如果不考虑兼容,规范应使用双冒号
大小写字母,数字,连字符(-),下划线(_)以及 ISO 10646 字符编码 U+00A1 及以上
类名或 ID 以数字、连字符(-)开头.或#后加\3
无效选择器,即运行环境无法解析的 CSS 选择器
运行环境会跳过无效选择器
群组选择器包含无效选择器,该群组选择器都被跳过
开发者工具中,调试 CSS 时,现代浏览器会自动更正错误命名
利用浏览器跳过无效选择器和无效属性的特性
无效选择器,无效属性常用于区分运行环境(多为浏览器),进而:
① 选择器
② 属性
通过组合 CSS hacks 和私有属性,在较低版本的浏览器中,保持页面布局和基本样式,在高版本浏览器,使用更高级属性或运行环境的私有属性,增强页面样式,提升用户体验。
渐进性增强,是改善 CSS 兼容性,开发框架的设计思想之一,核心是:
示例:
<style>
div { /* All */
-width: expression(this.width > 500 ? '500px' : 'auto'); /* IE6 */
max-width: 500px; /* IE7+ */
color: black; /* IE6 黑 */
}
p + div { /* IE7+ */
color: blue; /* IE7 - IE8 蓝 */
}
:not(p) { /* IE9+ */
color: red; /* IE9+ 红 */
-webkit-font-smoothing: antialiased; /* Webkit浏览器 MacOS 平滑文字 */
-moz-osx-font-smoothing: grayscale; /* 火狐浏览器 MacOS 平滑文字 */
}
</style>
<p>p</p>
<div>div</div>
ID > 类 > 类型(标签) > 相邻 > 子代 > 后代 > 通配符 > 属性 > 伪类
示例:
.content * {},会先匹配到所有元素,再向上筛选出父元素 className 为 content 的子元素
根据效率和读取顺序,提高性能的方法如下:
工作中,多使用类名,少使用关系、伪类选择器,可读和可维护性也会提高
2. 减少选择器层级
工作中,选择器层次不建议超过 4 级。用 SASS 或 LESS 时,应避免不必要的嵌套
3. 高效率选择器在前
工作中,避免使用类、标签选择器限制 ID 选择器,避免使用标签选择器限制类选择器。
低效率选择器在前,通常可以优化。示例 .content #id {} 可直接写成 #id {},div .content 可以给 div 起类名
4. 避免使用通配符选择器
通配符选择器效率低,且使用 * 的场景,通常有其他解决方案
5. 多用 继承
示例:
<style>
div * { /* bad case */
font-size: 12px;
}
div { /* good case */
font-size: 12px;
}
</style>
<div>
<p></p>
<p></p>
<p></p>
</div>
阅读量:2012
点赞量:0
收藏量:0