CSS机制@At-rule 详解

本文介绍了CSS中的AT规则,包括@charset、@import等共计九种类型。这些规则用于定义字符集、导入样式文件、定制字体及创建动画等功能,是前端开发中不可或缺的一部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://css-tricks.com/the-at-rules-of-css/

https://developer.mozilla.org/en-US/docs/Web/CSS/At-rule

大家可能在CSS中见到过字符@然后加一些关键字的用法,这种用法就称之为AT规则,在CSS中,种类还是很多的,这里总结列举下:

@charset、@import、@namespace、@document、@font-face、@keyframes、@media、@page、@supports

所谓“常规规则”指的是语法类似下面的规则:@[KEYWORD] (RULE)

  • @charset
  • @import
  • @namespace

所谓“嵌套规则”就是带有花括号{} , 语法类似下面的规则 @[KEYWORD] { /* 嵌套语句 */ }

  • @document
  • @font-face
  • @keyframes
  • @media
  • @page
  • @supports
1. @charset

定义字符集。⽤于提示CSS文件使用的字符编码方式,它如果被使用,必须出现在最前面。这个规则只在给出语法解析阶段前使用,并不影响页面上的展示效果;

某些软件,例如Dreamweaver新建CSS文件时候,自动会带有下面所示代码,但实际开发时候,作用不大,因为meta中已经有所设置 (<meta charset="utf-8">),会覆盖,所以我都是直接删掉的。

@charset "utf-8";
2. @import

导入其他CSS样式文件。除了@charset规则不会被引入,@import可以引⼊另⼀个文件的全部内容。

实际上线时候,不建议使用,多请求,阻塞加载之类。但本地开发可以使用,用做CSS模块化开发,然后使用一些(如grunt)工具进行压缩并合并。但是呢,相比less, sass等还是有不足,就是@import语句只能在CSS文件顶部,使得文件的前后关系控制,就不那么灵活。

@import 'index.css';
@import url('index.css');
3. @namespace

此规则应用到XML HTML(XHTML)上特别有用,因为这样的话XHTML元素可以作为选择器在CSS中使用。

/* XHTML命名空间 */
@namespace url(http://www.w3.org/1999/xhtml);

/* 内嵌在XHTML的SVG的命名空间 */
@namespace svg url(http://www.w3.org/2000/svg);
4. @document

CSS 4.0规范有相关说明。如果文档满足给定的一些条件,就可以应用我们指定的一些样式。比如说,这个CSS文件被子站A调用,和被子站C调用,我们可以通过域名匹配来执行不同的CSS样式。这样,我们可以有效避免冲突,或者防止外链之类

@document 
  /* 页面URL需要是 */
  url(http://www.zhangxinxu.com/),
  
  /* 页面URL的开头必须是... */
  url-prefix(www.zhangxinxu.com/wordpress/),
  
  /* 该域上的所有页面 */
  domain(zhangxinxu.com),

  /* 所有https协议页面 */
  regexp("https:.*")
{
  
  /* 开始样式 */
  body { font-family: Comic Sans; }

}
5. @font-face

自定义字体用的。IE6也支持

@font-face {
  font-family: 'MyWebFont';
  src:  url('myfont.woff2') format('woff2'),
        url('myfont.woff') format('woff');
}
6. @keyframes

用来声明CSS3 animation动画关键帧

@keyframes fadeIn {
0% {
 opacity: 0;
}
100% {
 opacity: 1;
}
}
7. @media

媒介查询

@media all and (min-width: 1280px) {
    /* 宽度大于1280干嘛干嘛嘞... */ 
}
@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 2dppx) { 
    /* Retina屏幕干嘛干嘛嘞... */ 
}
@media print {
    /* 闪开闪开,我要打印啦! */ 
}
@media \0screen\,screen\9 {
    /* IE7,IE8干嘛干嘛嘞... */ 
}
@media screen\9 {
    /* IE7干嘛干嘛嘞... */ 
}
8. @page

page⽤于分页媒体访问网页时的表现设置,页面是⼀种特殊的盒模型结构,除了页面本身,还可以设置它周围的盒,这个规则用在打印文档时候修改一些CSS属性。使用@page我们只能改变部分CSS属性,例如间距属性margin, 打印相关的orphans, widows, 以及page-break-*, 其他CSS属性会被忽略。

@page :first {
   margin: 1in;
}
上面CSS表示:first页面也要有:left, :right页面margin间距。zxx: 
//@page的伪类包括::blank, :first, :left, :right
9. @supports

是否支持某CSS属性声明的AT规则,浏览器对其支持性越来越好了

/* 检查是否支持CSS声明 */ 
@supports (display: flex) {
  .module { display: flex; }
}

/* 检查多个条件 */ 
@supports (display: flex) and (-webkit-appearance: checkbox) {
  .module { display: flex; }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值