﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-依然的小屋-文章分类-css</title><link>http://www.blogjava.net/wangyoucao1015/category/34593.html</link><description>我试着假装，心不曾伤！</description><language>zh-cn</language><lastBuildDate>Wed, 22 Oct 2008 17:39:08 GMT</lastBuildDate><pubDate>Wed, 22 Oct 2008 17:39:08 GMT</pubDate><ttl>60</ttl><item><title>老调重弹的CSS优先级</title><link>http://www.blogjava.net/wangyoucao1015/articles/234398.html</link><dc:creator>依然</dc:creator><author>依然</author><pubDate>Wed, 15 Oct 2008 03:26:00 GMT</pubDate><guid>http://www.blogjava.net/wangyoucao1015/articles/234398.html</guid><wfw:comment>http://www.blogjava.net/wangyoucao1015/comments/234398.html</wfw:comment><comments>http://www.blogjava.net/wangyoucao1015/articles/234398.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangyoucao1015/comments/commentRss/234398.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangyoucao1015/services/trackbacks/234398.html</trackback:ping><description><![CDATA[在讲CSS优先级的优先级之前，我们得要了解什么是CSS，CSS是用来做什么的。
<p>　　首先，我们对CSS作一个简单的说明：CSS是层叠样式表（Cascading Style
Sheets）的简称。它的规范代表了互联网历史上一个独特的发展阶段。现在对于从事网页制作的朋友来说，应该很少没有听说过CSS了，因为在制作网页过
程中我们经常需要用到。 </p>
<p>　　其次：我们能通过CSS为文档设置丰富且易于修改的外观，以减轻网页制作者的工作负担，从而减轻制作及后期维护的代价。 </p>
<p>　　其实现在还来讲CSS是什么，CSS有什么作用完全是多余的，相信从事网页制作的朋友都已经或多或少的接触过了。 </p>
<p>　　言归正传，我们开始进入今天的话题： </p>
<p>　　<strong>一、什么是CSS优先级？</strong> </p>
<p>　　所谓CSS优先级，即是指CSS样式在浏览器中被解析的先后顺序。 </p>
<p>　　<strong>二、CSS优先级规则</strong> </p>
<p>　　既然有优先级，那么就会有一个规则来约定这个优先级，而这个&#8220;规则&#8221;就是本次所需要讲的重点。 </p>
<p>　　样式表中的特殊性描述了不同规则的相对权重，它的基本规则是： <br />
1. 统计选择符中的ID属性个数。 <br />
2. 统计选择符中的CLASS属性个数。 <br />
3. 统计选择符中的HTML标记名个数。 </p>
<p>　　最后，按正确的顺序写出三个数字，不要加空格或逗号，得到一个三位数(css2.1是用4位数表示)。( 注意，你需要把数字转换成一个以三个数字结尾的更大的数)。相应于选择符的最终数字列表可以很容易确定较高数字特性凌驾于较低数字的。 </p>
<p>　　例如： <br />
1. 每个ID选择符(#someid)，加 0,1,0,0。 <br />
2. 每个class选择符(.someclass)、每个属性选择符(形如[attr=value]等)、每个伪类(形如:hover等)加0,0,1,0。 <br />
3. 每个元素或伪元素(:firstchild)等，加0,0,0,1。 <br />
4. 其它选择符包括全局选择符*，加0,0,0,0。相当于没加，不过这也是一种specificity，后面会解释。 </p>
<p><strong>　　三、特性分类的选择符列表</strong> </p>
<p>　　以下是一个按特性分类的选择符的列表： </p>
<p>
</p>
<table border="1" cellpadding="0" cellspacing="0" width="500">
    <tbody>
        <tr>
            <td>
            <p class="0" style="text-align: justify;"><span style="font-weight: bold; font-size: 10.5pt; font-family: 'Times New Roman';"><font face="宋体">选择符</font></span></p>
            <!--endfragment--></td>
            <td>
            <p class="0" style="text-align: justify;"><span style="font-weight: bold; font-size: 10.5pt; font-family: 'Times New Roman';"><font face="宋体">特性值</font></span></p>
            <!--endfragment--></td>
        </tr>
        <tr>
            <td>
            <p class="0" style="text-align: justify;"><span style="font-size: 10.5pt; font-family: 'Times New Roman';">h1 {color:blue;}</span></p>
            <!--endfragment--></td>
            <td>
            <p class="0" style="text-align: justify;"><span style="font-size: 10.5pt; font-family: 'Times New Roman';">1</span></p>
            <!--endfragment--></td>
        </tr>
        <tr>
            <td>
            <p class="0" style="text-align: justify;"><span style="font-size: 10.5pt; font-family: 'Times New Roman';">p em&nbsp;{color:purple;}</span></p>
            <!--endfragment--></td>
            <td>2</td>
        </tr>
        <tr>
            <td>
            <p class="0" style="text-align: justify;"><span style="font-size: 10.5pt; font-family: 'Times New Roman';">.apple&nbsp;{color:red;}</span></p>
            <!--endfragment--></td>
            <td>10</td>
        </tr>
        <tr>
            <td>
            <p class="0" style="text-align: justify;"><span style="font-size: 10.5pt; font-family: 'Times New Roman';">p.bright&nbsp;{color:yellow;}</span></p>
            <!--endfragment--></td>
            <td>11</td>
        </tr>
        <tr>
            <td>
            <p class="0" style="text-align: justify;"><span style="font-size: 10.5pt; font-family: 'Times New Roman';">p.bright&nbsp;em.dark&nbsp;{color:brown;}</span></p>
            <!--endfragment--></td>
            <td>22</td>
        </tr>
        <tr>
            <td>
            <p class="0" style="text-align: justify;"><span style="font-size: 10.5pt; font-family: 'Times New Roman';">#id316&nbsp;{color:yellow}</span></p>
            <!--endfragment--></td>
            <td>100</td>
        </tr>
    </tbody>
</table>
<p><br />
单从上面这个表来看，貌似不大好理解，下面再给出一张表： </p>
<p>
</p>
<table border="1" cellpadding="0" cellspacing="0" width="500">
    <tbody>
        <tr>
            <td>
            <p class="0" style="text-align: justify;"><span style="font-weight: bold; font-size: 10.5pt; font-family: 'Times New Roman';"><font face="宋体">选择符</font></span></p>
            </td>
            <td>
            <p class="0" style="text-align: justify;"><span style="font-weight: bold; font-size: 10.5pt; font-family: 'Times New Roman';"><font face="宋体">特性值</font></span></p>
            </td>
        </tr>
        <tr>
            <td>h1&nbsp;{color:blue;}</td>
            <td>1</td>
        </tr>
        <tr>
            <td>p em&nbsp;{color:purple;}</td>
            <td>1+1=2</td>
        </tr>
        <tr>
            <td>.apple {color:red;} </td>
            <td>10</td>
        </tr>
        <tr>
            <td>p.bright {color:yellow;}</td>
            <td>1+10=11</td>
        </tr>
        <tr>
            <td>p.bright em.dark {color:brown;} </td>
            <td>1+10+1+10=22</td>
        </tr>
        <tr>
            <td>#id316 {color:yellow} </td>
            <td>100</td>
        </tr>
    </tbody>
</table>
<p>　　通过上面，就可以很简单的看出，HTML标记的权重是1,CLASS的权重是10,ID的权重是100，继承的权重为0（后面会讲到）。 </p>
<p>　　按这些规则将数字符串逐位相加，就得到最终的权重，然后在比较取舍时按照从左到右的顺序逐位比较。 </p>
<p>　　优先级问题其实就是一个冲突解决的问题，当同一个元素（内容）被CSS选择符选中时，就要按照优先级取舍不同的CSS规则，这其中涉及到的问题其实很多。 </p>
<p>　　说到这里，我们不得不说一下CSS的继承性。 </p>
<p><strong>　　四、CSS的继承性</strong> </p>
<p>　　<strong>4.1 继承的表现</strong> </p>
<p>　　继承是CSS的一个主要特征，它是依赖于祖先-后代的关系的。继承是一种机制，它允许样式不仅可以应用于某个特定的元素，还可以应用于它的后代。例如一个BODY定义了的颜色值也会应用到段落的文本中。 </p>
<p><strong>样式定义：</strong>body {color:#f00;} <br />
<strong>举例代码：</strong>&lt;p&gt;CSS&lt;strong&gt;继承性&lt;/strong&gt;的测试&lt;/p&gt; <br />
<strong>举例效果：</strong> <img alt="" src="http://www.doyoe.com/model/xhtmlcss/teach/priority/img/1.gif" /></p>
<p>　　这段代码的应用结果是：&#8220;CSS继承性的测试&#8221;这段话是红颜色的，&#8220;继承性&#8221;几个字由于应用了&lt;strong&gt;标签，所以是粗体。
很显然，这段文字都继承了由body {color:#f00;}样式定义的颜色。这也就是为什么说继承性是CSS的一部分。 </p>
<p>　　然而CSS继承性的权重是非常低的，是比普通元素的权重还要低的0。 </p>
<p>　　我们仍以上面的举例代码为例：在样式定义中添加一条：strong {color:#000;}。 </p>
<p><strong>举例效果：</strong> <img alt="" src="http://www.doyoe.com/model/xhtmlcss/teach/priority/img/2.gif" /></p>
<p>　　发现只需要给&lt;strong&gt;加个颜色值就能覆盖掉它继承自&lt;body&gt;的样式颜色。由此可见：任何显示申明的规则都可以覆盖其继承样式。 </p>
<p>　　<strong>4.2 继承的局限性</strong> </p>
<p>　　继承是CSS重要的一部分，我们甚至不用去考虑它为什么能够这样，但CSS继承也是有限制的。 </p>
<p>　　有一些属性不能被继承，如：border, margin, padding, background等。 </p>
<p><strong>样式定义：</strong>div {border:1px solid #000;} <br />
<strong>举例代码：</strong>&lt;div&gt;我是&lt;em&gt;border&lt;/em&gt;我是不能被继承滴&lt;/div&gt; <br />
<strong>预期效果：</strong> <img alt="" src="http://www.doyoe.com/model/xhtmlcss/teach/priority/img/4.gif" /><br />
<strong>实际效果：</strong> <img alt="" src="http://www.doyoe.com/model/xhtmlcss/teach/priority/img/3.gif" /></p>
<p>　　从上面的效果中，我们可以看出，border是不能被继承的，还有一些其它的属性也是如此，这里就不一一列举。 </p>
<p>　　<strong>五、附加说明</strong></p>
<p>　　1. 文内的样式优先级为1,0,0,0，所以始终高于外部定义。这里文内样式指形如&lt;div
style="color:red"&gt;blah&lt;/div&gt;的样式，而外部定义指经由&lt;link&gt;或&lt;style&amp;
gt;卷标定义的规则。 <br />
2. 有!important声明的规则高于一切。 <br />
3. 如果!important声明冲突，则比较优先权。 <br />
4. 如果优先权一样，则按照在源码中出现的顺序决定，后来者居上。 <br />
5. 由继承而得到的样式没有specificity的计算，它低于一切其它规则(比如全局选择符*定义的规则)。 <br />
6. 关于经由@import加载的外部样式，由于@import必须出现在所有其它规则定义之前(如不是，则浏览器应该忽略之)，所以按照后来居上原则，一般优先权冲突时是占下风的。 </p>
<p>　　还需要说一下，IE是可以识别位置错误的@import的，但无论@import在什么地方，它都认为是位于所有其它规则定义之前的，这可能会引发一些误会。 </p>
<p>　　优先权问题看起来简单，但背后还是有非常复杂的机制，在实际应用中需要多多留意。 </p>
<p>　　<strong>六、练习</strong></p>
<p>　　看完上面的文字后，来做几道非常简单的题目。（<strong>自己答完前，请不要先看各题给出的链接地址哦</strong>）</p>
<p>1. 如何让使用两个使用相同样式名的元素具有不同的效果：<a href="http://www.doyoe.com/model/xhtmlcss/teach/priority/test1.htm">链接</a> <br />
<strong>固定效果：</strong> <img alt="" src="http://www.doyoe.com/model/xhtmlcss/teach/priority/img/5.gif" /><br />
<strong>固定代码： </strong>&lt;div class="test"&gt;传说中的测试&lt;/div&gt; <br />
&lt;p class="test"&gt;传说中的测试&lt;/p&gt; </p>
<p>2. 如何让&lt;h3&gt;始终为黑色，而&lt;em&gt;在不被&lt;h3&gt;包含的情况为红色：<a href="http://www.doyoe.com/model/xhtmlcss/teach/priority/test2.htm">链接</a> <br />
<strong>固定效果：</strong> <img alt="" src="http://www.doyoe.com/model/xhtmlcss/teach/priority/img/6.gif" /><br />
<strong>固定代码： </strong>&lt;h3&gt;讨论&lt;em&gt;CSS&lt;/em&gt;优先级&lt;/h3&gt; <br />
&lt;p&gt;讨论&lt;em&gt;CSS&lt;/em&gt;优先级&lt;/p&gt; </p>
<p>3. 如何写一个外部样式使得&lt;h3 style="color:#000;"&gt; 覆盖我&lt;/h3&gt;的颜色为红色：<a href="http://www.doyoe.com/model/xhtmlcss/teach/priority/test3.htm">链接</a> </p>
<p>4. 如何让同时具有.a,.b样式的元素只表现.a的颜色样式：<a href="http://www.doyoe.com/model/xhtmlcss/teach/priority/test4.htm">链接</a> <br />
<strong>固定代码：</strong>&lt;p class="a b"&gt;传说中滴测试&lt;/p&gt;</p>
<img src ="http://www.blogjava.net/wangyoucao1015/aggbug/234398.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangyoucao1015/" target="_blank">依然</a> 2008-10-15 11:26 <a href="http://www.blogjava.net/wangyoucao1015/articles/234398.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UTF-8的BOM问题</title><link>http://www.blogjava.net/wangyoucao1015/articles/228530.html</link><dc:creator>依然</dc:creator><author>依然</author><pubDate>Fri, 12 Sep 2008 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/wangyoucao1015/articles/228530.html</guid><wfw:comment>http://www.blogjava.net/wangyoucao1015/comments/228530.html</wfw:comment><comments>http://www.blogjava.net/wangyoucao1015/articles/228530.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangyoucao1015/comments/commentRss/228530.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangyoucao1015/services/trackbacks/228530.html</trackback:ping><description><![CDATA[通常情况下，我都会使用Windows系统自带的记事本程序编写网页程序，但在编写或修改php博客系统代码后，进行调试时总是会出现如同以下几点问题：<br />
<br />
--不能登入或者不能登出；<br />
--页顶出现一条空白；<br />
--页顶出现错误警告；<br />
--其它不正常的情况。<br />
<br />
分析原因：<br />
<br />
由于本人习惯使用UTF-8编码，在编写或修改代码后都保存为utf-8编码格式。虽然现在几乎所有的文本编辑软件都可以显示并编辑UTF-8编码的文件，但是很遗憾的是其中很多软件的表现并不理想。<br />
<br />
类似WINDOWS自带的记事本等软件，在保存一个以UTF-8编码的文件时，会在文件开始的地方插入三个不可见的字符（0xEF 0xBB 0xBF，即BOM——Byte Order Mark）。它是一串隐藏的字符，用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件，这样并不会产生什么麻烦。但对于 PHP来说，PHP在设计时就没有考虑BOM的问题，不会忽略UTF-8编码的文件开头BOM的那三个字符，会把BOM作为该文件开头正文的一部分。由于必须在&lt;?或者&lt;?php后面的代码才会作为PHP代码执行，所以将会造成在页面上输出这三个字符，显示效果就要看浏览器了，一般是一个空行或是一个乱码。由于在html一开头有这3个字符的存在，即使页面的 top padding 设置为0，也无法让整个网页紧贴浏览器顶部。由于受COOKIE送出机制的限制，在这些文件开头已经有BOM的文件中，COOKIE无法送出（因为在 COOKIE送出前PHP已经送出了文件头），所以登入和登出功能失效。一切依赖COOKIE、SESSION实现的功能全部无效。<br />
<br />
解决办法：<br />
<br />
在编辑、更改任何文本文件时，请务必使用不会乱加BOM的编辑器。Linux下的编辑器应该都没有这个问题。WINDOWS下，请勿使用记事本等编辑器。推荐的编辑器是：<br />
Editplus 2.12版本以上；<br />
EmEditor；<br />
UltraEdit（需要取消&#8216;添加BOM&#8217;的相关选项）；<br />
Dreamweaver（需要取消&#8216;添加BOM&#8217;的相关选项）<br />
等。<br />
<br />
对于已经添加了BOM的文件，要取消的话，可以用以上编辑器另存一次。（Editplus需要先另存为gb，再另存为UTF-8。）或者，用这个程序（PHP版本4.3以上）
<img src ="http://www.blogjava.net/wangyoucao1015/aggbug/228530.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangyoucao1015/" target="_blank">依然</a> 2008-09-12 10:37 <a href="http://www.blogjava.net/wangyoucao1015/articles/228530.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>