大部分同学使用过CSS的屏幕宽度媒体查询,例如:这表示屏幕宽度超过900px时,内部样式生效。其实,CSS中包含大量以@符号开头的规则,称之为@规则。本文将介绍媒体查询外,其他有趣的且未来将扮演重要角色的@规则。@规则是一个CSS语句,以@符号开头,后跟标识符,并包含至分号或CSS块的内容。以下是一些@规则,由其标识符指定,每种规则具有不同的语法:除了@media、keyframes和@font-face,@supports、@counter-style、@property和@layer等规则已在或即将在Web应用中发挥关键作用。接下来,本文将深入探讨它们:@charset、@import、@namespace这三个规则可以一起讲解。它们的语法简单,易于理解。其中:如果CSS文件中包含非ASCII文本,如字体名称、伪元素content属性值或选择器中的非ASCII字符,需要确保CSS解析器知道如何正确转换字节为字符,以便理解CSS代码。若发现伪元素content中的内容乱码,可能是由于未声明字符集。@import有两式语法,还可以在后面定义媒体查询规则。合理使用@import有益处,如文件组织、缓存管理等。然而,使用@import影响页面性能,主要体现在加载时间和渲染速度上。媒体查询、@keyframes、@font-face这三个@规则广为人知。@keyframes和@font-face大家非常熟悉。但@media规则内有乾坤,除了屏幕宽度查询,还有许多不同功能的媒体查询。本文将列出未来可能更加重要的@media规则。prefers-reduced-motion、prefers-color-scheme、prefers-contrast、prefers-reduced-transparency和prefers-reduced-data这些规则用于适应用户偏好,如减弱动画效果、匹配明暗主题、调整内容色彩对比度、减少透明元素和减少数据传输。其中,prefers-reduced-data为实验功能,暂无浏览器支持。@supports特性检测@supports通过CSS语法实现特性检测,允许在内部CSS块中编写如果特性检测通过的CSS语句。它支持not、and和or操作符。@counter-style CSS计数器@counter-style允许开发者自定义计数器样式。它弥补了原有计数器规范在国际化排版方面的不足。@property CSS自定义属性@property是CSS Houdini API的一部分,允许开发者显式定义自定义CSS属性,支持属性类型检查、默认值设定及继承。@layer层@layer是CSS 2022年最受瞩目的新特性,用于控制大型项目中CSS文件和内容的管理。它允许开发者创建级联层,层内的规则级联在一起,提供对层叠机制的更多控制。@container容器查询@container提供基于容器可用宽度改变布局的能力,解决了过往媒体查询的局限性。它允许CSS在不改变视口宽度的情况下,根据容器宽度的变化调整布局。@scroll-timeline滚动时间线@scroll-timeline能设定动画开始和结束由滚动容器内的滚动进度决定,而非时间。它允许纯CSS实现滚动与动画的结合。然而,此特性已被废弃,不再推荐使用。总结,@规则家族强大,引入新特性和功能,增强CSS生态,使CSS能实现更多Web功能,预示着CSS在Web领域的重要角色。希望本文能提供帮助。