继承──页面重构中的模块化设计(三)
Ghost 发表于 [2010-04-16 13:24]
前面我们了解了 样式的作用域的分类 和 栏目级作用域 。在权值中,还有一个很重要的因素,需要做下补充,起因是这样的,有个同学在CSS森林群里问了个问题:根据样式权值两个关键的因素
- 权值的大小跟选择器的类型和数量有关
- 样式的优先级跟样式的定义顺序有关
可以知道,如果10个标签选择器的权值应该比一个类选择的权值高,像这样:
div div div div div div div div div div div{color:blue;}
.c10{color:red;}
<div class="c1">
<div class="c2">
<div class="c3">
<div class="c4">
<div class="c5">
<div class="c6">
<div class="c7">
<div class="c8">
<div class="c9">
<div class="c10">
<div>这段文字是什么颜色?</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
div{color:blue;}
.c10{color:red;}
是不是跟想的不太一样?难道前面所说的权值是有问题的?前面讲的权值并没有问题,不过漏了一个重要的规则: 继承的权值小于0,0,0,1 。
- 样式的继承
- 指被包在内部的标签将拥有外部标签的样式性质。
继承最大的意义在于可以减少重复的定义,比如要定义整个页面的文本颜色,只需要定义body的color样式,body里的所有标签都会继承body的color定义。是不是很方便?方便是相对的,当你想要为body内部分标签定义另一种文本颜色时,继承也许会成为增加重复定义、降低性能的祸首。
并不是所有的样式定义都具有继承的性质,整理了一下常用有继承性的定义1,这些定义在使用的时候要比较注意。
简单分析下上面的例子,最后一部分的代码:
<div class="c10">
<div>这段文字是什么颜色?</div>
</div>
当定义了c10后,根据权值,类定义的权值是0,0,1,0,应该是比div这个定义0,0,0,1要高的,但由于div是直接定义到标签上的,比起从c10的定义中继承来的定义权值更高。稍微改下就清楚了:
<div class="c1">
<div class="c2">
<div class="c3">
<div class="c4">
<div class="c5">
<div class="c6">
<div class="c7">
<div class="c8">
<div class="c9">
<div class="c10">
<p>这段文字是什么颜色?</p>
<div>这段文字是什么颜色?</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
从 修改后的例子 可以看到,p标签继承了c10的定义,显示为红色。因此,在使用标签选择器的时候,应特别注意它的作用域,个人的建议是,除了最基本的reset之外,在公共作用域中最好不要使用标签选择器,在栏目级作用域中也应尽可能的少用。
1 常用有继承性的样式定义:
- text-indent
- text-align
- layout-flow
- writing-mode
- line-break
- white-space
- word-wrap
- list-style
- list-style-image
- list-style-position
- list-style-type
- font
- font-style
- font-variant
- font-weight
- font-size
- line-height
- font-family
- color
- text-transform
- letter-spacing
- word-spacing
文章地址:http://www.cssforest.org/blog/index.php?id=164
《继承──页面重构中的模块化设计(三)》采用的授权是创作共用的 “署名-非商业性使用-相同方式共享 3.0 通用许可”.
文章被分类到:重构思想














weilaixu 在 146 日 之前 说:
呃…现在手上的项目,自己设计,规划的功夫下了很大,现在写起来,基本上只是复制粘贴和写点继承相关的。但是由于降低质量实现快速开发,如果后期有板块变动的问题就必须得改html了,鬼,把评论框弄大点好哇····虽然webkit可以自己拖拉
FA-小虎 在 146 日 之前 说:
这个跟东西平时没去仔细研究,看了后受益匪浅啊。
gyrate 在 146 日 之前 说:
居然发现有几个关于文字的样式定义是从来没有用到过的,页面文字排版的细节难道就在这里
二十六公斤 在 146 日 之前 说:
教材CSS教材真多···每次来都受益匪浅··
vincent 在 129 日 之前 说:
写了很多年的样式,也遇到到过这些问题,这些细微的问题却从来没有去考究过。特别是定义在颜色方面,时常遇到定义失效问题,几天终于明晰了~呵呵
www.proxy-edu.com 在 127 日 之前 说:
这样也能优化,
学习了!
Jesse 在 108 日 之前 说:
补充一个 opacity
也具有继承性
operafans 在 104 日 之前 说:
大部分内容是对的,但有一点是错误的,标签选择器的权值永远都比一个类选器择器的权值低,无论有多少个,如果把第一个例子改为:
<div class=“c1”> <div class=“c2”> <div class=“c3”> <div class=“c4”> <div class=“c5”> <div class=“c6”> <div class=“c7”> <div class=“c8”> <div class=“c9”> <div class=“c10”> 这段文字是什么颜色? </div> </div> </div> </div> </div> </div> </div> </div> </div> </div>
就可以看出问题了,第一个例子中.c10是一个继承的样式,当然权值比直接的标签选择器低。
Ghost 在 104 日 之前 说:
@operafans 也许你应该整理下思路了,前后两句的观点是矛盾的。前面说标签选择器的权值比类选择器低,后面又说.c10比标签选择器低。
这一部分所要讲的就是继承的问题,例子当然是跟继承相关的了,以你所改的代码,已经是直接定义,没有可比性。
你说的“标签选择器的权值永远都比一个类选器择器的权值低,无论有多少个”倒是给我提了个醒,面前所说的的确把这一点给漏掉了。
operafans 在 102 日 之前 说:
@Ghost,也许你也理解错了,可能我也没表达清楚,我的意思是说继承的样式的权重是最低的。
sunjix5852 在 23 日 之前 说:
看了之后,的确是好文章!