[css]【转载】CSS样式分离之再分离

原文链接:http://www.zhangxinxu.com/wordpress/2010/07/css%E6%A0%B7%E5%BC%8F%E5%88%86%E7%A6%BB%E4%B9%8B%E5%86%8D%E5%88%86%E7%A6%BB/

一、关于CSS样式分离

zxx://一些名词表意含有自己的理解成分,或许与您的理解有偏差,希望不要拘泥于措辞。
无论是CSS的分离还是js的分离,其主要作用之一就是精简与重用。

CSS本身就代表着精简与重用。例如我们可以设置一个如下的样式:

.example{color:red;}

所有想让文字显示红色的标签都可以应用这个样式,这比10年前使用font标签,将color样式写在font标签上(尤其标签多时)要精简很多代码,代码可读性也更佳。

CSS样式分离,我一般指的是“以单独的CSS文件将CSS样式分离出来”,此处的重用多针对不同页面的重用,就是说,一个样式文件,可以多个页面使用,这对于一些公共样式的重构是很有用的。当然,对于一些重要的页面,例如淘宝首页,直接将CSS嵌在了页面头部,其降低链接请求的重要性要大于样式的重用。

以上估计大家都是很熟悉与常用的,我一般不会拿一些众所周知的白蜡拿来嚼的。本文会展示一些新的东西,关于CSS样式分离再分离。本文核心不在于展示如果分离,而是传达一种“库”与“CSS高度重用”的概念,同时也是为后面的文章“我是如何对项目CSS进行架构”做铺垫的。

二、CSS样式分离之再分离

“CSS样式分离之再分离”表型上的两个特点为“分离”和“命名”,掌握与理解其深层次思想的关键是思维方式的转变,这包括“CSS库概念”意识。举个例子吧,依照现在主流的写法,下截图所示的灰色背景的框框命名与样式可能如下:

.topic_edit_box{display:inline-block; border:1px solid #ddd; background:#f7f7f7; padding:20px 40px;}

如果您有强烈的分离意识,尤其在大型的项目中,这段样式可能会是这个样子(注意命名):

.dib{display:inline-block;}
.bdd border:1px solid #ddd;}
.bgf7{background:#f7f7f7;}
.p20_40{padding:20px 40px;}

字面上很容易理解,就是把这段样式分离成一个一个单独的样式。当然,这只是表象,要想让样式再分离发挥其最大的功效,对其精髓思想有着较为深入的理解是很必须的,否则,您可能会用的很痛苦,或是滥用而产生其他一些问题。

三、样式分离再分离精简作用的理论基础

高中时学习马克思主义哲学,记得有部分是关于理论与实践的,“理论指导实践”,这句话对我影响很大。在我看来,任何一门学问,要想做到一定的高度,必须有一定的理论基础,这个理论可以在别人看来或是100年后看来是错误的,只要能在当下解释清楚,自圆其说,这就是优秀的理论。即使是做技术也是如此,我现在总是会从哲学中找到与现在所从事的技术所相同的地方,并将之归纳,以自己一套理论解释它,当然,这个理论不是凭空而来,而是在其他一些理论基础上建立起来的,例如,中国古代的那些传承千年的哲学观。

即使没有读过关于中国古代的一些哲学著作,例如《老子》《易经》,也应该在中国的神话剧中听过一些哲学观点,这些观点往往都是这些哲学体系的核心。例如:“无极生太极,太极生两仪,两仪生四向,四向生八卦,八卦生五行”。

按照“五行”学说,大自然是由“金木水火土”这五种要素所构成,随着这五个要素的盛衰,而使得大自然产生变化,不但影响到人的命运,同时也使宇宙万物循环不已。

也就是说,我们深处的整个自然,整个宇宙,仅仅通过5个元素就构成了。这5个元素,我们可以理解为基础,或者说是“库”。

如果我们把自然宇宙当作是一个复杂的页面,那么,这个页面仅仅使用5个样式就可以构成了!

再举另外一个例子,与我的大学生物专业相关的,人类的生老病死,复杂的行为,情感,归根结底都是有基因控制的,而基因仅仅有5种不同类型的碱基构成。也就是说,我们人类一切的一切都是有5中碱基(腺嘌呤、鸟嘌呤、胞嘧啶、胸腺嘧啶和尿嘧啶)构成的。

如果我们把人这个生物看做一个页面,那么这个页面仅仅使用5个样式就可以构成了。

不必深究细节,重在这类构成思想。

回到主题,我们的页面结构与表现是由CSS+HTML构成的,想想看,在CSS2中,总共有多少个属性,是很有限的。如果我们把CSS中的每个样式独立出来,作为最最基本的构成元素,就像基因中的碱基一样,那么,我们实际上、理论上要使用的CSS代码量是非常非常之少的,不会出现开心网一样高达81K大小的样式文件了。

如果CSS是碱基,那么理论上CSS文件大小仅仅是5个CSS属性的大小,如下:

A{a~~}
G{g~~}
C{c~~}
T{t~~}
U{u~~}

也就是说,最小的CSS文件不足50个字符大小。万物是相对,辩证的,CSS虽然理论上非常之小,但是,要实现同样的效果,HTML代码量就是非常庞大,于是可能会有类似下面的HTML代码:

<div><span class="A"></span><span class="A"></span><span class="G"></span><span class="A"></span><span class="G"></span><span class="A"></span><span class="G"></span><span class="C"></span><span class="C"></span><span class="C"></span><span class="A"></span><span class="T"></span><span class="T"></span><span class="A"></span><span class="G"></span>...</div>

一切都是权衡。

实际上,CSS有几十种不同的属性,撇开一些不定参数(例如宽度,高度,颜色值)的样式,CSS的基础构成也是非常有限的,例如下面截取的的一小段CSS库样式(命名仅供参考):

.l{float:left;}.r{float:right;}.cl{clear:both;}
.tc{text-align:center;}.tr{text-align:right;}.tl{text-align:left;}
.tdl{text-decoration:underline;}.tdn,a.tdl:hover,a.tdn:hover{text-decoration:none;}
.b{font-weight:bold;}.n{font-weight:normal; font-style:normal;}
.vm{vertical-align:middle;}.vtb{vertical-align:text-bottom;}.vt{vertical-align:top;}.vn{vertical-align:-2px;}
.fa{font-family:arial;}.ft{font-family:tahoma;}.fw{font-family:"微软雅黑"}.fs{font-family:‘宋体‘;}
.rel{position:relative;}.abs{position:absolute;}.ovh{overflow:hidden;}
.dn{display:none;}.db{display:block;}.dib{display:inline-block;}.di{display:inline;}
.cur{cursor:pointer;}

所以,理论上讲,几乎一半的样式效果,只需要上面这点CSS代码就可以了,例如,我们需要设置一个字体为“微软雅黑”,粗体,inline-block水平,相对定位的样式,则代码如下:

<strong class="fw dib rel"></strong>

样式的独立拆分,使得各种效果可以自由组合,这是有别于一个class类覆盖多个CSS属性的做法的。样式的独立拆分,精简的CSS文件,每个样式的重用性可谓发挥到的最大,同时,页面的后期维护变得异常轻松,样式冲突的可能性也是非常低的。实际上的CSS独立样式库不仅仅是上面展示的,还包括常见颜色,常见margin于padding值,清除浮动属性等。

CSS样式库又分为“通用库”,和“当前项目库”,不是本节重点,不多说。

总结这一节的核心观点,其实不难理解,就是“构成的基本元素越是独立,越是最简,其组合的可能性,元素的利用率越是高!”,CSS样式越是分离,其样式的利用率和覆盖率就越高,CSS代码就越精简!

万物守恒,CSS的精简会导致部分HTML代码的开销增大。本节重点在于理论,实际情况下面再叙述。

四、样式彻底分离的副作用

前面提到,就理论而言,样式越是拆分的彻底,CSS代码越是精简,CSS代码的重用率以及单个页面CSS样式的覆盖率都会相当惊人。但是,物极必反,理论不能代表实践。如果我们把所有的CSS样式进行拆分。对于一些复杂的UI效果,例如圆角自适应的导航,则此处的HTML代码开销会非常之大,此时一味的样式再分离,会使得HTML代码变得很痛苦。

所以,我们需要权衡,何时分离,哪些要分离?样式精简与重用仅仅是通过分离吗。

上面的问题不是一句话能说清楚的,其中有点只可意会的味道,这需要经验,以及结合自己的那套CSS准则,布局思想等!

但是,可以肯定的是,所有样式都要分离显然是不行的,更加可以肯定的是,目前基本上所有的网站的样式的分离都是不够的,远远不够,CSS也是需要架构的,而没有架构这一意识,分离反而会出问题。

五、不得不提的网页设计师

要想让样式分离发挥巨大的潜力,设计师在其中也扮演了至关重要的作用。如果遇到的是很随性的,细节要求不严的,没有固定设计准则的网页设计师,那么,抱歉,样式分离的惊人效用将大打折扣。不难理解,拿间距来说,假设一个项目60张设计页面,结果模块间间距有的10像素,有的10像素,有的则15像素;或是内边距(padding),没有统一的边距值,那么就会比较糟糕,分离出来的独立CSS重用性就很低,不但增加了CSS文件大小,页面本身就缺少统一性;或是颜色的例子,文字颜色凭感觉来,这里#333,那里又是#454545,然后又是#484848,这显然会有问题。或是宽度大小的设置等。

设计师设计要有模块化的思想,不要这里想到一个不多的设计效果,这里用一个,那里想到一个效果,就用另一个。这本身就缺少重用性,这会使得分离的效用大打折扣的。

六、隐形的阈值

我认为,分离的终极目的在于精简这个网站的CSS文件,将整个网站的CSS文件只精简至一个。于是这其中就存在一个阈值的问题,如果分离的功力不够,或是理解不够准确透彻,则网站的CSS文件就会大于50K,这时,可能就是又走上以前多样式文件,系列页面拆分的老路了。所以,其中就存在了一个隐形的阈值,是一个单CSS文件还是多CSS文件的阈值。

实际上,我是可以保证,一个CSS文件就可以搞定整个网站项目(前提是网站的风格要统一,要是这一个页面婉约派,另外一个豪放派,那就没辙了)的。但是,不是每个人都可以实现的,这需要对CSS理解透彻,知道如何使用最简单的代码实现同样的兼容性的效果;还要知道对整站CSS进行架构,还需要知道样式要适时合并。

如果您跨不了这个阈值,分离的作用仅仅是一定程度上精简的CSS,减小了一些开发维护成本而言,其更强大的精简CSS文件个数的作用就体现不出来了!

七、重要的结语

我从以前讲布局思想,讲无CSS rest,到现在的CSS样式分离之再分离,以及后面的CSS架构,都是一个体系里面的。我清楚的指导,这些东西,其实很多优秀的前端人员也是知道一二,或是比我理解更深刻的。但是,对于大多数同行而言,可能认为我“又在挑刺”,其实不然。

我把我自己的理解讲出来,是希望让您知道,现在绝大多数的CSS写法,架构都是有很多不足的,缺少创新。我就这么跟您说吧,您所做的任何项目,其实根本只要一个CSS文件就足够,您要是真的通透了CSS的“分离”、“架构”,即使这个网站项目有100个页面(风格统一),您也可以只使用一个CSS页面,并且可以控制CSS文件(未压缩)在40K以下。

我是自信可以这么实现的。我最近做的项目50多个页面,未压缩(含大量注释,竖排)的CSS文件,就30K左右,服务器端压缩后仅11K左右,同时网站整站自适应,从内容到各个按钮,导航,全部宽度自适应,兼容性良好。

要想CSS足够精简高效,请使用流体布局,少或无CSS reset,样式分离,样式合并,样式架构,理解所谓的“兼容性”。

这里提到的6点,前两点在前面的文章中已经简单阐释过,第三点“分离”就是本文的内容,而后面的合并,架构,以及“兼容性”将在后面按顺序阐述。

最后,还想强调一下适应性的问题。这里提到的“体系”纯粹是自己思考,积累形成的,是否对其他人适用,我是很怀疑的,尤其一些自认为CSS还不错,有一套自己固有模式的同行。人总是不同的,对CSS关注的地方也有所差异,成长学习经历不同,所处的团队不同,种种因素使得这些我认为非常有用,百益无一害的方法、思想在别人看来狗屁不通,一文不值,这也是可以理解的。

最后的最后,我呢,其实从业时间也短,资历还是有限的,有些想法,观点或许有不准确之处,欢迎各位同行指正。也欢迎发表您的观点,或是通过评论或是点击这里与我进行沟通交流。

原创文章,转载请注明来自张鑫旭-鑫空间-鑫生活[http://www.zhangxinxu.com]
本文地址:http://www.zhangxinxu.com/wordpress/?p=916

时间: 2024-10-17 17:06:33

[css]【转载】CSS样式分离之再分离的相关文章

[转载]CSS&lt;a href&gt;链接样式冲突解决方法!

给自己这个初学者看的! 原文地址:CSS<a  href>链接样式冲突解决方法!作者:叶朗 这里我简要的说一下:关于a href样式冲突 首先我有一个外部CSS样式文件(index.css)里面直接用a:link a:active直接写了 而网站首页和其他栏目页都调用<link href="css/index.css" rel="stylesheet" type="text/css" />,但是我想再在首页加上新的链接并且

Css3之基础-1 Css 概述、样式表使用方式、语法规范

一.CSS 概述 CSS概述 - CSS作用 CSS概念 - CSS (Cascading Style Sheets): 层叠样式表,又叫级联样式表,简称样式表 - 用于 HTML 文档中元素的样式定义 - 实现了将内容与表现分离 - 提高代码的可重用性和可维护性 CSS与HTML之间的关系 - HTML 用于构建网页的结构 - CSS 用于构建 HTML 元素的样式 - HTML 是页面的内容组成,CSS是页面的表现 HTML 属性与CSS样式的使用原则 - W3C 建议尽量使用CSS样式取代

精通CSS.DIV网页样式与布局

CSS:Cascading Style Sheet--层叠样式表 概念:控制网页样式并允许将样式信息与网页内容分离的一种标记性语言. CSS选择器: 1.标记选择器 h1{color:red;font-size:10px;} 2.类别选择器 .class{color:red;font-size:10px;} 3.ID选择器 #id{color:red;font-size:10px;} 滤镜的概念: CSS滤镜并不是浏览器的插件,也不符合CSS标准,而是微软公司为增强浏览器功能而特意开发的并整合在

精通CSS+DIV网页样式与布局--页面和浏览器元素

在页面和浏览器中,除了文字.图片.表格.表单等,还有很多各种各样的元素,在上篇博文中,小编主要简单的介绍了一下在CSS中如何设置表格和表单,今天小编主要简单介绍一下丰富的超链接特效.鼠标特效.页面滚动条.首先我们来看一张思维导图: 接着,小编会跟随上述思维导图的足迹,慢慢探寻,丰富的超链接特效中,我们首先来介绍动态超链接,我们来看一下例子的代码和运行的效果:  动态超链接 <span style="font-size:18px;"><span style="

精通CSS+DIV网页样式与布局--页面背景

上篇博客,我们主要简单的总结了CSS的图片效果,我们这回来讲讲CSS如何对网页的背景进行设置,网页的背景是整个网页的重要组成部分,她直接决定了整个网页的风格和色调.这篇博客简单的总结一下如何用CSS来设置背景颜色.背景图片.首先,我们来看一张图: 接着,小编会随着上述思维导图的脉络,对各个知识点进行详细讲解,首先,我们来看页面背景色,例子代码和运行效果如下所示:   页面背景色 <span style="font-size:18px;"><span style=&qu

精通CSS+DIV网页样式与布局--初探CSS

CSS英文名Cascading Style Sheet,中文名字叫层叠样式表,是用于控制页面样式并允许将样式信息与网页内容分离的一种标记性语言,DIV+CSS是WEB设计标准,它是一种网页的布局方法.与传统中通过表格(table)布局定位的方式不同,它可以实现网页页面内容与表现相分离.提起DIV+CSS组合,还要从XHTML说起.XHTML是一种在HTML(标准通用标记语言的子集)基础上优化和改进的新语言,目的是基于XML应用与强大的数据转换能力,适应未来网络应用更多的需求."DIV+CSS&q

结构和样式,行为的分离

实现高质量的代码需要我们在结构和样式,行为的分离的基础上做到:精简,重用,有序. 精简:尽量减小文件的大小,提高页面加载速度. 重用:提高代码的重用性,减少冗余代码,提高开发速度. 有序:提高代码的结构性,组织好代码结构更利于维护和应变特殊情况. 在我们的工作中你可能会遇到这样的代码,或者说你可能写出这样的代码 <td width="100%" height="20" class="f9pt" align="center"

编写高质量的代码--基础:结构和样式,行为的分离

实现高质量的代码需要我们在结构和样式,行为的分离的基础上做到:精简,重用,有序. 精简:尽量减小文件的大小,提高页面加载速度. 重用:提高代码的重用性,减少冗余代码,提高开发速度. 有序:提高代码的结构性,组织好代码结构更利于维护和应变特殊情况. 在我们的工作中你可能会遇到这样的代码,或者说你可能写出这样的代码 <td width="100%" height="20" class="f9pt" align="center"

web前端篇:CSS使用,样式表特征,选择器

目录 web前端篇:CSS使用,样式表特征,选择器 1.CSS介绍 2.CSS使用 3.样式表特征 4.CSS选择器 5.选择器的优先级 6.练习题: web前端篇:CSS使用,样式表特征,选择器 1.CSS介绍 CSS :Cascading Style Sheet 层叠样式表 作用 :修饰和美化页面元素,实现网页排版布局 2.CSS使用 1行内样式/内联样式 特点 :在具体的标签中使用style属性,引入CSS样式代码 语法: CSS 样式声明 / 语句: 对当前元素添加样式 语法:CSS 属