CSS3网页设计从入门到精通(微课精编版)
上QQ阅读APP看书,第一时间看更新

1.1 CSS概述

本节简单介绍一下CSS的基本情况。

1.1.1 CSS历史

早期的HTML结构和样式是混在一起的,通过HTML标签组织内容,通过标签属性设置显示效果,这就造成了网页代码混乱不堪,代码维护非常困难。

1994年年初,哈坤·利提出了CSS的最初建议。伯特·波斯(Bert Bos)当时正在设计一款Argo浏览器,于是他们一拍即合,决定共同开发CSS。

1994年年底,哈坤在芝加哥的一次会议上第一次展示了CSS的建议,1995年他与波斯一起再次展示这个建议。当时W3C(World Wide Web Consortium,万维网联盟)组织刚刚成立,W3C对CSS的前途很感兴趣,为此组织了一次讨论会,哈坤、波斯是这个项目的主要技术负责人。

1996年年底,CSS语言正式设计完成,同年12月,CSS的第一个版本正式出版(http://www.w3.org/TR/CSS1/)。

1997年年初,W3C组织专门负责CSS的工作组,负责人是克里斯·里雷。于是该工作组开始讨论第一个版本中没有涉及的问题。

1998年5月,CSS2正式出版(http://www.w3.org/TR/CSS2/)。

2002年,W3C的CSS工作组启动了CSS2.1开发。CSS2.1是CSS2的修订版,它纠正了CSS 2.0版本中的一些错误,并且更精确地描述CSS的浏览器实现。

2004年,CSS2.1正式发布。

2006年年底,CSS2.1进一步完善,CSS2.1也成为目前最流行、获得浏览器支持最完整的CSS版本,它更准确地反映了CSS当前的状态。

CSS3的开发工作在2000年之前就开始了,但是距离最终的发布还有相当长的路要走,为了提高开发速度,也为了方便各主流浏览器根据需要渐进式支持,CSS3按模块化进行全新设计,这些模块可以独立发布和实现,这也为日后CSS的扩展奠定了基础。

到目前为止,CSS3还没有推出正式的完整版,但是已经陆续推出了不同的模块,这些模块已经被大部分浏览器支持或部分实现。

CSS3属性支持情况请访问https://bestvpn.org/whats-my-ip/详细了解。可以看出,完全支持CSS3属性的浏览器包括Chrome和Safari,其他主流浏览器除IE早期版本和Firefox 3外也基本支持。

1.1.2 CSS3模块

CSS1和CSS2.1都是单一的规范,其中CSS1主要定义了网页对象的基本样式,如字体、颜色、背景、边框等。CSS2增加了高级概念:浮动、定位,以及高级选择器,如子选择器、相邻选择器和通用选择器等。

CSS3被划分成多个模块组,每个模块组都有自己的规范。这样的好处是CSS3规范的发布不会因为存在争论的部分而影响其他模块的推进。对于浏览器来说,可以根据需要决定哪些CSS功能被支持。对于W3C制定者来说,可以根据需要进行针对性的更新,从而更加灵活和及时地修订一个整体的规范,这样更容易扩展新鲜的技术特性。

2001年5月23日,W3C完成CSS3的工作草案,在该草案中制订了CSS3发展路线图,路线图详细列出了所有模块,并计划在未来逐步进行规范(权威参考:http://www.w3.org/TR/css3-roadmap/)。

下面简单介绍CSS3各主要模块内容和参考地址,用户仅做了解或备查参考。


2002年5月15日发布CSS3 line模块(http://www.w3.org/TR/CSS3-linebox/),该模块规范了文本行模型。

2002年11月7日发布CSS3 Lists模块(http://www.w3.org/TR/CSS3-lists/),该模块规范了列表样式。

2002年11月7日发布CSS3 Border模块(http://www.w3.org/TR/2002/WDcss3-border-20021107/),新添加了背景边框功能。该模块后来合并到背景模块(http://www.w3.org/TR/css3-background/)中。

2003年5月14日发布CSS3 Generated and Replaced Content模块(http://www.w3.org/TR/css3-content/),该模块定义了CSS3的生成及更换内容功能。

2003年8月13日发布CSS3 Presentation Levels模块(http://www.w3.org/TR/css3-preslev/),该模块定义了演示效果功能。

2003年8月13日发布CSS3 Syntax模块(http://www.w3.org/TR/CSS3-syntax/),该模块重新定义了CSS语法规则。

2004年2月24日发布CSS3 Hyperlink Presentation模块(http://www.w3.org/TR/css3-hyperlinks/),该模块重新定义了超链接表示规则。

2004年12月16日发布CSS3 S peech模块(http://www.w3.org/TR/CSS3-speech/),该模块重新定义了语音“样式”规则。

2005年12月15日发布CSS3 Cascading and inheritance模块(http://www.w3.org/TR/css3-cascade/),该模块重新定义了CSS层叠和继承规则。

2007年8月9日发布CSS3 Basic Box模块(http://www.w3.org/TR/CSS3-box/),该模块重新定义了CSS基本盒模型规则。

2007年9月5日发布CSS3 Grid Positioning模块(http://www.w3.org/TR/CSS3-grid/),该模块定义了CSS网格定位规则。

2009年3月20日发布CSS3 Animations模块(http://www.w3.org/TR/CSS3-animations/),该模块定义了CSS动画模型。

2009年3月20日发布CSS3 3D Transforms模块(http://www.w3.org/TR/CSS3-3d-transforms/),该模块定义了CSS 3D转换模型。

2009年6月18日发布CSS3 Fonts模块(http://www.w3.org/TR/CSS3-fonts/),该模块定义了CSS字体模型。

2009年7月23日发布CSS3 Image Values模块(http://www.w3.org/TR/CSS3-images/),该模块定义了图像内容显示模型。

2009年7月23日发布CSS3 Flexible Box Layout模块(http://www.w3.org/TR/CSS3-flexbox/),该模块定义了灵活的框布局模块。

2009年8月4日发布Lssom View uodule模块(http://www.w3.org/TR/cssom-view/),该模块定义了CSS视图模块。

2009年12月1日发布CSS3 Transitions模块(http://www.w3.org/TR/css-transitions-1/),该模块定义了动画过渡效果模型。

2009年12月1日发布CSS3 2D Transforms模块(http://www.w3.org/TR/css-transforms-1/),该模块定义了2D转换模型。

2010年4月29日发布CSS3 Template Layout模块(http://www.w3.org/TR/CSS3-layout/),该模块定义了模板布局模型。

2010年4月29日发布CSS3 Generated Content for Paged Media模块(http://www.w3.org/TR/css3-gcpm/),该模块定义了分页媒体内容模型。

2010年10月5日发布CSS3 Text模块(http://www.w3.org/TR/CSS3-text/),该模块定义了文本模型。

2010年10月5日发布CSS3 Backgrounds and Borders模块(http://www.w3.org/TR/CSS3-background/),该模块更新了边框和背景模型。


1.1.3 CSS3开发状态

CSS3每一个模块都有独立的开发和更新计划,如图1.1所示,从该图中可以看到CSS3当前发展的详细进度。更详细的信息可参见http://www.w3.org/Style/CSS/current-work.html,其中介绍了CSS3具体划分为多少个模块组、CSS3所有模块组目前所处的状态,以及将在什么时间发布。

图1.1 CSS3所有模块进度表

其中,Current列表示模块当前的状态,Upcoming列表示即将进行的状态。各种状态缩写词说明如下。


WD:Working Draft,表示工作草案。

LC:Last Call,表示最终工作草案。

CR:Candidate Recommendation,表示候选推荐标准。

PR:Proposed Recommendation,表示建议推荐标准。

REC:Recommendation,表示推荐标准。


【扩展】

W3C标准只是推荐标准,并没有强制执行的效力。不过,鉴于W3C在Web标准领域的影响力和强大号召力,W3C发布的推荐标准,通常浏览器厂商都很重视并积极支持。

一般情况下,W3C标准制订经历下面几个阶段,这些阶段都有专有术语,拥有定义好的含义,虽然也有变化,但修订频率不高,最新版是2005年制订的,具体说明如下。

第1阶段:工作草案(Working Draft)。

工作组依据工作组章程(Charter)提出一系列工作草案。公众和W3C会员可以提出评论和问题,工作组必须处理这些反馈。本阶段时长依多种因素而变。

第2阶段:最终工作草案(Last Call Working Draft)。

工作组已完成工作,并要求公众和W3C会员提交最后的评论与问题。同样,工作组必须处理这些反馈。如果出现问题,可能要回到工作草案阶段。本阶段时长通常为3周,但也可以更长。

第3阶段:候选推荐标准(Candidate Recommendation)。

当最终工作草案阶段结束且问题都得到解决后,将进入候选推荐标准阶段。此时认为该规范已经稳定,可以展开试验性实施了。工作组必须将实施中得到的反馈整合到规范中。同样,如果出现问题,须返回工作草案阶段。根据实施进展,本阶段通常持续0~1年。

第4阶段:建议推荐标准(Proposed Recommendation)。

如无意外,规范将进入建议推荐标准阶段。在此阶段,W3C总监(Tim Berners-Lee)将正式请求W3C会员审阅建议推荐标准。本阶段时长不少于4周。

第5阶段:推荐标准(Recommendation)。

根据审阅结果,W3C总监宣布该规范成为W3C推荐标准,中间可能发生微小改动,或者返回工作草案阶段,或者彻底从W3C工作日程上移去。技术规范一旦成为推荐标准,它就是官方的W3C标准了。

当然由于种种因素,有些W3C草案未能在W3C得到青睐,最终只能成为Note,这意味着没有厂商会去实现它。

最后,在实际操作中,很多浏览器厂商出于利益或技术上的考虑,可能会不完全遵照W3C推荐标准来实现其产品,因此用户会发现各个厂商的浏览器对CSS3技术支持程度各不相同。

1.1.4 浏览器支持状态

CSS3特性大部分都已经有了很好的浏览器支持度。各主流浏览器对CSS3的支持越来越完善,下面来了解一下两大平台(Mac和Windows)、五大浏览器(Chrome、Firefox、Safari、Opera和IE)对CSS3新特性和CSS3选择器的支持情况。

CSS3属性支持情况如图1.2所示(http://fmbip.com/litmus/)。可以看出,完全支持CSS3属性的浏览器有Chrome和Safari,而且不管是Mac平台还是Windows平台全支持。

图1.2 CSS3属性支持列表

CSS3选择器支持情况如图1.3所示(http://fmbip.com/litmus/)。除了IE家族和Firefox 3,其他几乎全部支持。其中,Chrome、Safari、Firefox 3.6、Opera 10.5最好。

图1.3 CSS3选择器支持列表

注意:各主流浏览器也定义大量私有属性,方便用户体验CSS3的新特性。例如:


以Webkit引擎为核心的浏览器(如Safari、Chrome)的私有属性都以-webkit-前缀定义。

以Gecko引擎为核心的浏览器(如Firefox)的私有属性都以-moz-前缀定义。

以Konqueror引擎为核心的浏览器的私有属性都以-khtml-前缀定义。

Opera浏览器的私有属性以-o-前缀定义。

Internet Explorer浏览器的私有属性以-ms-前缀定义,IE 8+支持-ms-前缀。