查看完整版本: CSS模块化设计——从空格谈起

迷失的亲 2007-12-16 06:10

CSS模块化设计——从空格谈起

一、空格运算符hR b2H az T-b
c[3M1ED3RdX3V
      (1)CSS语言
s"c;`SA(W/{ 5F0tn z"c
      简单地说,CSS语言类似JS语言,是通过客户端下载后,通过本地浏览器解析。而CSS语言又是非常低级的“弱类型”语言,离JS这种基于对象的比较完善的“弱类型”语言,还差相当一段距离。要知道CSS样式是定义出来的,而样式的呈现是根据文档流顺序和CSS优先级别,浏览器自己识别计算后显示出来的。而浏览器又有忽略和纠错功能(尤以IE为甚),所以样式定义的语法有错误,并不影响浏览器正常工作,只不过显示不出应有的效果罢了。在我们设计定义样式的时候,排错是比较令人苦恼的,其本质原因是于这种弱类型CSS语言本身的不严禁性有关系的,所以我们就更应该注重CSS定义的严禁,才能出较少的错误,较快更好的完成工作。 kZ+^O G7Je&n

DIl;nG jkZ w       (2)CSS的运算符9W/R.T?;DB

B*W/{9b8_7}7f0d&@       首先说,CSS语言的运算符就不多,有.#{}:";还有一个非常重要的空格。这几个运算符,都是常用的定义声明符号。而在CSS样式定义中,空格就有点特殊,我们可以把它视为在.Net或Java中命名空间或类包定义中的 . 运算符。换句话说,我们可以把空格视为路径指向的箭头,表明HTML标签的父子级别关系。CSS是与HTML想关联的,也就是说,CSS的每一个定义都与“某个HTML标签”或“某段模块化HTML代码”相对应,而HTML可以调用多个样式类。一个CSS样式类可以根据HTML代码来“复合定义”;一个HTML标签也可以“复合调用”多个样式类。所以说,CSS样式定义的复杂性与关联的HTML是密不可分。
6fZul.z+P }"f$I
J,uH6\$uX4\       (3)实例说明[code]<style type="text/css">
H4~:Ok@8a%tZ td .b {  
]1e0|"e3k,[@u/u        color:#00ff00;  
rZa wx/@h,CO } ]2zo%r5^l
th.b {   
(v.P-N X(T8@2o P0q        color:#ff0000;
xC#}E{ t5vk&{%`D$V        font-family:黑体; !tZ'fj#s/U&LS5u
       font-size:20px;
^T&]8S x~4CO }
+~\Vc/ki~,H .b {
XJUNP*^y        color:#0000ff; AkY~*_uX!j2CK
       font-size:12px;
'B+~$i4K/A0\ }
dn Vo'R7vgO} </style> ,] ] xxD3AN"I#t
<table> pX!~+G8nq;T/lL
       <tr> 7O*o ]L/B#o1w&F&D
               *}p],Q'? I?i7U qdm
              <td><div class="b">第一个类b的类路径是th .b</div></td>  
\3ZMltF               <th class="b">第二个类b的类路径是th.b</td> 9nAIRkZ
              <td class="b">第三个类b的类路径是 .b</th>
0T5FiqU0cW        </tr>  
*}3e:m^~,pj </table> S2eT F^ H@.r.W
<div class="b">第三个类b的类路径是 .b</div>[/code]讲解: 4ALr8m}g5bM

KLQ7w^r3L$r       1、第一个类b的类路径是td .b,定义该HTML文档内所有的td标签内的带class="b"的标签的样式 。[code]td .b {  
k9HH6YLS3K        color:#00ff00;  
L"? gV\9zl }[/code]定义的是<td><div class="b">text</div></td>这组代码块中的b类,class="b"是包含在td标签内的,是td的子级,所以在这里要用“空格”指向明确表明父子级别关系。sT9hnE
"|"~R+@$h7E
      2、第二个类b的类路径是th.b,定义的是该HTML文档内所有的带class="b"的th标签的样式。[code]th.b {   
v _8Kj4T9}        color: #FF0000 *w]F5p#Fk
}[/code]定义的是<th class="b">text</td>,在这里的代码中,th和class='b'是平级的,先th后.b组成一个同级类路径th.b,所以没有空格代表“HTML类”和“自定义类”具有同级路径!^lsH,_G5H/NB

Y!b6Y`9tfU       3、第三个类b的类路径是 .b,定义该HTML文档内所有的td标签的样式,它是该文档的一个全局样式,是body .b的简写。[code].b {
3Q&B6UT7f        color:#0000ff; &r5W4uA5ei+|8lO8m&o
       font-size:12px;
*b'wjs0R&s|7n }[/code]定义了<td class="b">第三个类b的类路径是td.b</th>和<div class="b">第三个类b的类路径是 .b</div>这两处的b类没有明确的路径指向,优先级别要比有明确路径的低。
4e{4b1cLv(} /S$Jj6C ^7X'}
      4、大家可以看到,在HTML代码中,同样都是class="b",但是在CSS定义时,采用的类路径不同,作用就不同了。类路径越完整,优先级越高。在具体应用的时候,我们可以,使用完整类路径来定义某HTML代码块某一些特殊地方,做异化处理。例如本例表头th的黑体字显示效果。
,P)y0V _9C
0TP4t&?"m"d$b/vKL       二、HTML中复合调用样式类
#c6sE r`FKLh
-D;W V7h m ~}_1J       (1)在一个HTML标签内,可以复合调用多个样式类,也是用空格做运算符,复合类名总字符不能超过256。
o)r,qaC w)L&k &Wn/m8B7J&Mz
      (2)示例:[code]<style type="text/css">
`3RufF4H8`T .myTxt { 5f~n7b+BD
       font-size:50px;        
nV/K|U        font-family:Arial Black;
_(kE$xP9i)N#l } V*wA1B`"t
.txtRed { .f t lKpk(Gq4W
       color:red;  .B@] x%khA
} vDQfs-P
.txtOrange {
_nduN-Xi        colorrange;
$ya%B)M&fb }
9OS Q YdH4Ku .txtGreen { ~:N#X*zt'CB
       color:green; hPj"m9nX:G
}
F o3mO8Y&U%K(?c .txtBlue {
?/L%_ S\\FN        color:blue;
g#a"_Tp6w.w)U }
A b)lK:zvO$`:L </style>
v1J9b V'w%S[ <ul>
&hS9|.h'i1F)L        <li class="myTxt txtRed">123</li>
@ R d%pV1x9p,L IBD        <li class="myTxt txtOrange">Text</li>
a(VU~l MJD        <li class="txtGreen">Text</li>
(G:Ma+L M2R%E{5B j        <li class="myTxt txtBlue">Text</li> 4@(Pv\5V(oFy
</ul>[/code](3)应用:
$G~+^ q9yvEcs
Q8\!sj'@s/O       对于某些多数样式属性累同,仅有几个不同样式属性的定义,可以用这个方法来缩写。也可以在某个不改变某个通用样式类的同时,用HTML调用复合类,突出局部特例。
TS9q c!LU (LZo/SG
      三、CSS+HTML的模块化设计
S1` _*c+df
@rN3?XU cU8w5T       (1)举个简单例子:K:U P6f?a L4Y
*|,fmE8Z;UZ5j,FQ
      .classNameA .classNameB .classNameC
^^A+lfM
$Pt+?sX_zu^[       就是一个类包路径,A包含B,B包含C. 意思就是,在A块内的全部HTML代码(包括B块、C块),先应用样式classNameA; 然后,在B块内的全部HTML代码(包括C块),先应用样式classNameA,之后再先应用样式classNameB; 最后,在C块内的全部HTML代码,先应用样式classNameA,再先应用样式classNameB,最后应用样式classNameB;
;|+k'l5?v+?G
t3s6TQg a1UA!X       (2)在样式表中,关于类包的路径,对于某些复杂的HMTL代码,最后写绝对路径,就是每一个类名都不要拉下。这样可读性更强,错误率更小;当然,宽容度就越低。
MV7uP8w&l;H'} B
?1E0o0X w!^3_lMDNO       例如[code]<style type="text/css">  d)~N8M RM Jb
/*控制 li 的样式*/  
9t&s([W#S7r(Y*yy6G,I .a1 ul li {  C0G2Cci\!b,F1SN
    color:red;  $b(UD3k#p'?
} (S;N3dj)H'U
;Vf-q;].OC`\9n1Q
/*控制class="a"的div块内,全部连接 a 的样式*/
xB|S3K .a1 a { $@ma6j\1Y)I"C
    font-size:20px;
t BXO(Z r G9n,q.c } 3I|j_~PL3O

jJ f+t%p /*控制class="a"的div块内,一个一个为 class="mylink"的样式*/ !?)v1u9Z6x7Z
.a1 .myLink { x-S CP5],m9zZ7DX(w
       font-size:12px; &^!Q+n0H*i)~j-[
}
y8P2y&eN xR9Q 7i*OT].}
/*控制 li 内连接a的样式*/
M*aO _9}*l+Dd O .a1 ul li a { %cEY$I$W#r
       font-size:40px; BC1?E3U Y Q{;H%y
}
+Rvz4JO /k9x(j [(@4i}y
/*控制名 li 内,一个为 class="mylink"的连接的样式 */ :T[#m.s l%U5H
.a1 ul li .myLink {
S!^2Ra([p        font-size:60px;
df&I^;tP        font-family:黑体; !O)f |Q:OK/k
} /h%k.dPu6H7Na4Vm
\5j*M:C w)UQ[*{ AZ
/*b1样式*/ &A5?%E4l9^
.b1 { bVz(x t jw-E+r
      color:blue; *x$O+a5q%wE[(Id(m
}
rW%j Ld(o`W /*控制 li 内 b1 的样式*/ ;l^c&}2rAE!c6nr/Y9k
.a1 ul li .b1 { O5a8\"f,Y|*h
     color:green;
h FC0H!c/YR|q }
D&^ \u;o6mq!u1a*^\ </style>
oDSD!p 4sWx8Y*}&q-|4H1f;j
<div class="a1">
9i%n NwXM       <a href="#">linkText</a> 5\({;cgaKvP
      <a href="#" class="myLink">titleText</a> Ly1i I k ~y,@1\
      <div class="b1">b11111111</div>
km0a!^5Fj,OW       <ul> +DyZ iN p7`
            <li> ]RZD2n,J&X-nf-b
                   <a href="#">titleText</a>
*e6H"n0vT`0\                    <div class="b1">nameCN</div>
P${YGp,M(SK             </li> r,`:t(wj
            <li>
@5g@&D3V#T-_m                    <a href="#" class="myLink">titleText</a>
ne3n:S[                    <div class="b1">nameCN<span class="c1">nameEN</span></div>
$l5x2X`R0VC             </li>
j/} eh+Qu|,@             <li>titleText</li> u8]7v A TO
            <li>titleText</li> /c E o#^;[.X_
            <li>titleText</li>
y+RnLh*O       </ul>
rX&O;^.k*p m </div> [/code]样式,按*.HTML从内层到外层;按*.CSS上下文,从下文到上文;按内联样式表上下文,从下文到上文;按内嵌>内联>外联的优先级;
q+i#y]-n+X 叠加覆盖计算最终显示效果。
aJ.l mc1C8p *sJCa q`,d
      CSS语句,严格说是JS代码的一类,换句话说,CSS语句也是“弱类型”的,空格是一个“运算符”,由于“弱类型”不严谨,所以,没有空格的时候,虽然不报错,也有显示效果,但那是按错误逻辑运算的,有时歪打正着,但确莫名其妙。再加上有很多满足各浏览器的HACK语法,CSS语句就更加零乱不堪。所以,写的时候,尽量在满足宽容度的情况下,严禁一些。
页: [1]
查看完整版本: CSS模块化设计——从空格谈起
查看完整版本: CSS模块化设计——从空格谈起