How Broswers Work<二>渲染引擎--CSS解析
2016-03-06 16:26
537 查看
回忆一下在介绍解析时讲的概念,不像HTML一样,CSS符合上下文无关文法而且能被前面讲的两种解析类型解析。在CSS规格说明书中定义了CSS的词汇和语法,详细见http://www.w3.org/TR/CSS2/grammar.html.
让我们先看一个例子:
词汇被下面的正则表达式定义:
“ident“是”identifier“的缩写,像一个类的名一样。”name“是以一个id(与#相关)。
代表该语言规则的BNF:
说明: 一个规则集合(ruleset)的结构如下:
div.error和a.error是选择器。在花括号里的规则被这个规则集合应用。这个结构的定义如下:
这就意味着ruleset是一个选择器或者多个被逗号或空格分离的解析器(S 可替代空格)。一个ruleset包含整个花括号的内容并且在他的内部是一个规则说明或者是多个用分号分开的规则说明。规则说明和选择器将在下面用BNF定义。
Figure 7: parsing CSS
让我们先看一个例子:
词汇被下面的正则表达式定义:
comment \/\*[^*]*\*+([^/*][^*]*\*+)*\/ num [0-9]+|[0-9]*"."[0-9]+ nonascii [\200-\377] nmstart [_a-z]|{nonascii}|{escape} nmchar [_a-z0-9-]|{nonascii}|{escape} name {nmchar}+ ident {nmstart}{nmchar}*
“ident“是”identifier“的缩写,像一个类的名一样。”name“是以一个id(与#相关)。
代表该语言规则的BNF:
ruleset : selector [ ',' S* selector ]* '{' S* declaration [ ';' S* declaration ]* '}' S* ; selector : simple_selector [ combinator selector | S+ [ combinator selector ] ] ; simple_selector : element_name [ HASH | class | attrib | pseudo ]* | [ HASH | class | attrib | pseudo ]+ ; class : '.' IDENT ; element_name : IDENT | '*' ; attrib : '[' S* IDENT S* [ [ '=' | INCLUDES | DASHMATCH ] S* [ IDENT | STRING ] S* ] ']' ; pseudo : ':' [ IDENT | FUNCTION S* [IDENT S*] ')' ] ;
说明: 一个规则集合(ruleset)的结构如下:
div.error , a.error { color:red; font-weight:bold; }
div.error和a.error是选择器。在花括号里的规则被这个规则集合应用。这个结构的定义如下:
ruleset : selector [ ',' S* selector ]* '{' S* declaration [ ';' S* declaration ]* '}' S* ;
这就意味着ruleset是一个选择器或者多个被逗号或空格分离的解析器(S 可替代空格)。一个ruleset包含整个花括号的内容并且在他的内部是一个规则说明或者是多个用分号分开的规则说明。规则说明和选择器将在下面用BNF定义。
Webkit CSS parser
Webkit使用Flex and Bison 解析生成器自动生成CSS 解析器来解析CSS文件。回忆一下前面讲到的,Bison可生成一个自底向上的解析器。Firefox用的是一个自顶向下的程序员写出的解析器。两种解析器都会将CSS文件解析后转化成一个StyleSheet 对象,StyleSheet 对象都包含CSS规则。CSS规则的对象包含选择器和规则说明对象和其他与CSS语法一致的对象。Figure 7: parsing CSS
相关文章推荐
- Web布局连载——两栏固定布局(五)
- [div+css]晒晒最新制作专题推广页模板
- [css] line-height 百分比单位和数值单位的区别
- Apple官网研究之使用Justify布局导航
- 设计更快的网页(三):字体和 CSS 调整
- 纯CSS制作的新闻网站中的文章列表
- DVI 视频接口图文解析
- 10条影响CSS渲染速度的写法与使用建议第1/3页
- BS项目中的CSS架构_仅加载自己需要的CSS
- 很不错的 CSS Hack 又学了一招
- 发一个css比较清爽的写法
- CSS expression控制图片自动缩放效果代码[兼容 IE,Firefox]
- css布局网页水平居中常用方法
- CSS经典技巧十则第1/2页
- css 兼容性问题this.style.cursor=''hand''
- IE6不能正常解析CSS文件问题的解决方法及原因分析
- 欲练CSS ,必先解决IE的一些细节分析
- CSS文字截取功能实现代码
- 支持IE6 IE7 Firefox 的纯CSS的下拉菜单