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

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

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

一、空格运算符
J(KT)U9J
b ~5dL"x"w       (1)CSS语言
gqC7@#w ur A!f+Jkxb
      简单地说,CSS语言类似JS语言,是通过客户端下载后,通过本地浏览器解析。而CSS语言又是非常低级的“弱类型”语言,离JS这种基于对象的比较完善的“弱类型”语言,还差相当一段距离。要知道CSS样式是定义出来的,而样式的呈现是根据文档流顺序和CSS优先级别,浏览器自己识别计算后显示出来的。而浏览器又有忽略和纠错功能(尤以IE为甚),所以样式定义的语法有错误,并不影响浏览器正常工作,只不过显示不出应有的效果罢了。在我们设计定义样式的时候,排错是比较令人苦恼的,其本质原因是于这种弱类型CSS语言本身的不严禁性有关系的,所以我们就更应该注重CSS定义的严禁,才能出较少的错误,较快更好的完成工作。
z x3C:qx(dAu
3y0bv+hm"z,@ n       (2)CSS的运算符
9q5U-] V+V1lE
{}n#mq\*zE3f       首先说,CSS语言的运算符就不多,有.#{}:";还有一个非常重要的空格。这几个运算符,都是常用的定义声明符号。而在CSS样式定义中,空格就有点特殊,我们可以把它视为在.Net或Java中命名空间或类包定义中的 . 运算符。换句话说,我们可以把空格视为路径指向的箭头,表明HTML标签的父子级别关系。CSS是与HTML想关联的,也就是说,CSS的每一个定义都与“某个HTML标签”或“某段模块化HTML代码”相对应,而HTML可以调用多个样式类。一个CSS样式类可以根据HTML代码来“复合定义”;一个HTML标签也可以“复合调用”多个样式类。所以说,CSS样式定义的复杂性与关联的HTML是密不可分。 Kog"izG:[
&~0Z L!PO/^ k
      (3)实例说明[code]<style type="text/css"> yFb.{-\H y7H
td .b {  %~y-MZ(U(i]
       color:#00ff00;  
5Mm)w4]M2S } 2vjR-k T#M2o;i L
th.b {   
U6sip I| k-f        color:#ff0000; y"a4nv{ X9?
       font-family:黑体;
w9T X9d;~!rB-j$i        font-size:20px;
'Y:\ hd6R!~ }
9h'X,z"{NU9dJ .b { )A|jJP
       color:#0000ff; "}$c.U:l y
       font-size:12px;
x[4h4[Gp@'I } _.K)R'S,R
</style> B:Of+XaY@
<table> D)J#_ ^fIC3e
       <tr>
vSUf.[J j}(L0H                H}b1D2Xu+u N
              <td><div class="b">第一个类b的类路径是th .b</div></td>  E5HK2k(S
              <th class="b">第二个类b的类路径是th.b</td>
$VQR }~'WC5qf               <td class="b">第三个类b的类路径是 .b</th>
~dma,X0XpU_        </tr>  
o Tz/M8V,J)W </table> K yc@:P
<div class="b">第三个类b的类路径是 .b</div>[/code]讲解: YG+i{+C#n"bA
y0e(o7^0Z!M(D@iBE
      1、第一个类b的类路径是td .b,定义该HTML文档内所有的td标签内的带class="b"的标签的样式 。[code]td .b {  
])h [B|0mCOig        color:#00ff00;  &Hq f2~%KQ
}[/code]定义的是<td><div class="b">text</div></td>这组代码块中的b类,class="b"是包含在td标签内的,是td的子级,所以在这里要用“空格”指向明确表明父子级别关系。&c9?x`1UR

_nl ?+t.q"S@-f       2、第二个类b的类路径是th.b,定义的是该HTML文档内所有的带class="b"的th标签的样式。[code]th.b {   
f!FY*i,R @        color: #FF0000
z T"A8f$K l2V }[/code]定义的是<th class="b">text</td>,在这里的代码中,th和class='b'是平级的,先th后.b组成一个同级类路径th.b,所以没有空格代表“HTML类”和“自定义类”具有同级路径!
9Vh5z H/bh
f {b2Eq0i[u0\j       3、第三个类b的类路径是 .b,定义该HTML文档内所有的td标签的样式,它是该文档的一个全局样式,是body .b的简写。[code].b { !L6e0JF+c4G S
       color:#0000ff; QJOcV.~B0B
       font-size:12px; ED ]ez&y
}[/code]定义了<td class="b">第三个类b的类路径是td.b</th>和<div class="b">第三个类b的类路径是 .b</div>这两处的b类没有明确的路径指向,优先级别要比有明确路径的低。
ec&Q3jC`:Z X'|| @+P
      4、大家可以看到,在HTML代码中,同样都是class="b",但是在CSS定义时,采用的类路径不同,作用就不同了。类路径越完整,优先级越高。在具体应用的时候,我们可以,使用完整类路径来定义某HTML代码块某一些特殊地方,做异化处理。例如本例表头th的黑体字显示效果。
3h!u[L idr K0A CY4F%`g6WP
      二、HTML中复合调用样式类;y#F `S o6{

D y[F.QzZ!Y       (1)在一个HTML标签内,可以复合调用多个样式类,也是用空格做运算符,复合类名总字符不能超过256。lPw]:B ae

X/Zn3vK+pGy*k$V G       (2)示例:[code]<style type="text/css"> n)CkJue
.myTxt {
? F"qH+]^        font-size:50px;        {"ld*Qb_#A8?/CP
       font-family:Arial Black; %f q'I9F,xqd
}
9@N4g T'M]~ .txtRed {
*v`1O G,S}w.C]"yT[        color:red;  
l)pc L(K Rt } i6n/BE M+ZB
.txtOrange {
9EXv s/Qq/}        colorrange; 3S6~6af G*S.Y
}
-_]f\v6w(?9d .txtGreen {
2[y$t-Em ]        color:green; C`.PMVD
} *Ab#p,DQFV6Ye
.txtBlue { s{(Oq|
       color:blue; ky cb%b"f
}
Y7Qgxb3B </style>
d0~O_&p M2y;W <ul>
| [3X}7a;n+F        <li class="myTxt txtRed">123</li>
L p$xWP z {Kq        <li class="myTxt txtOrange">Text</li>
2PW-X7[QU        <li class="txtGreen">Text</li>
o4w4@+e9Ds ?O3jG        <li class="myTxt txtBlue">Text</li> ^;V(d$in\
</ul>[/code](3)应用:
*z(T jfR V
,z vP;RnT~ S/E       对于某些多数样式属性累同,仅有几个不同样式属性的定义,可以用这个方法来缩写。也可以在某个不改变某个通用样式类的同时,用HTML调用复合类,突出局部特例。
:s}#Fg3R ?TseAN;K Z
      三、CSS+HTML的模块化设计
s"Rv6F?O%h'c|
6x(L.L.F6Z       (1)举个简单例子:df5B ehw2i
]q Y E9\ zkd
      .classNameA .classNameB .classNameC "l J4i0dSH,YQ
;\0m0SZa)Q^k
      就是一个类包路径,A包含B,B包含C. 意思就是,在A块内的全部HTML代码(包括B块、C块),先应用样式classNameA; 然后,在B块内的全部HTML代码(包括C块),先应用样式classNameA,之后再先应用样式classNameB; 最后,在C块内的全部HTML代码,先应用样式classNameA,再先应用样式classNameB,最后应用样式classNameB;
EZy.\'p;U 9M0DTqj'J5B3H
      (2)在样式表中,关于类包的路径,对于某些复杂的HMTL代码,最后写绝对路径,就是每一个类名都不要拉下。这样可读性更强,错误率更小;当然,宽容度就越低。 ;?&J p0~:m/m W
D8wNt u X dy7I
      例如[code]<style type="text/css">  
~LZV:e M!_ /*控制 li 的样式*/  1yq x_2Ej&M
.a1 ul li {   d2wk6j_ N
    color:red;  
6jKY)bU\q#b }
/V4Q%L;F\5~6C2NM
"O5_9yQk2A /*控制class="a"的div块内,全部连接 a 的样式*/ )aZ d4T'w#O6BL#D
.a1 a {
:K1}"a ^8G]j d0@     font-size:20px; 1R T Ue0O g RW~
}
Um|(\)Vc/z,f
S!z"Cw.f0{3J%e4f /*控制class="a"的div块内,一个一个为 class="mylink"的样式*/ P#Ov8x L
.a1 .myLink { 'Wj ]s)Q%?$E0G\g&u}q
       font-size:12px;
Z.Qeo-XNbyNN }
_+g ]h2g MT%B7q X?.KH*t+~;^}
/*控制 li 内连接a的样式*/
E/K$}/QZ7i,F? .a1 ul li a {
\'n:U"YDp,N        font-size:40px; }8t\ldKM
} V-j3myI {z
2t/f5p ~_)`
/*控制名 li 内,一个为 class="mylink"的连接的样式 */
!]["K0TAc .a1 ul li .myLink { bG q7U$Q
       font-size:60px;
"w\xg(Lk:lf        font-family:黑体; I \7jpk-VO
}
QU3m$gy{ `.K*g`
7Hw!r{ xL ~ /*b1样式*/ 6b+nn6lwR
.b1 {
(V]3B,e-PF&a       color:blue; A'M w7SX6vHs{k
} 'FH'o'gMP!|
/*控制 li 内 b1 的样式*/
Y_KTCvns .a1 ul li .b1 {
sg0y%Y(l-x'|"Cl      color:green; r7L0DC9l}F
}
:nPy;Pob.o:SZv </style>
-K#p jzN0mQ)v
H mGpE)wY | <div class="a1">
p.@%f;`X       <a href="#">linkText</a>
/y @@D,@'}qu       <a href="#" class="myLink">titleText</a> $tg E k,z P^
      <div class="b1">b11111111</div>
`,i ^!O-p c-d-t       <ul>
}\}@-{{             <li> nCFwsF
                   <a href="#">titleText</a>
l"{"@-U,[.x-i/{&u q                    <div class="b1">nameCN</div>
bvUI @1SE @/W             </li>
X ZH:|/L jx0y(y             <li>
/L'Fe$wNnD2X!C                    <a href="#" class="myLink">titleText</a> %H X#\#`_1T-q
                   <div class="b1">nameCN<span class="c1">nameEN</span></div>
7i;v)j!e\             </li> +[3|A;E ~,T+G+i'ex
            <li>titleText</li> +X5{"R8f qvz
            <li>titleText</li> ['H;|m3u9l7F6w
            <li>titleText</li> #t?,u?0Z1H!n!r
      </ul> jt3KE7c'b1B_
</div> [/code]样式,按*.HTML从内层到外层;按*.CSS上下文,从下文到上文;按内联样式表上下文,从下文到上文;按内嵌>内联>外联的优先级; h!I8R7\:P&F Rq&u
叠加覆盖计算最终显示效果。.a9V~ mWrd {~-r
)CN~ n7^R
      CSS语句,严格说是JS代码的一类,换句话说,CSS语句也是“弱类型”的,空格是一个“运算符”,由于“弱类型”不严谨,所以,没有空格的时候,虽然不报错,也有显示效果,但那是按错误逻辑运算的,有时歪打正着,但确莫名其妙。再加上有很多满足各浏览器的HACK语法,CSS语句就更加零乱不堪。所以,写的时候,尽量在满足宽容度的情况下,严禁一些。
页: [1]
查看完整版本: CSS模块化设计——从空格谈起