<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IInterest &#187; 基础是非常重要的</title>
	<atom:link href="http://www.iinterest.net/tag/%e5%9f%ba%e7%a1%80%e6%98%af%e9%9d%9e%e5%b8%b8%e9%87%8d%e8%a6%81%e7%9a%84/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.iinterest.net</link>
	<description>关注移动互联网 &#38; HTML5</description>
	<lastBuildDate>Sat, 07 Jan 2012 08:07:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>CSS的特殊性 (specificity)</title>
		<link>http://www.iinterest.net/2010/05/08/css-specificity/</link>
		<comments>http://www.iinterest.net/2010/05/08/css-specificity/#comments</comments>
		<pubDate>Fri, 07 May 2010 17:00:17 +0000</pubDate>
		<dc:creator>Bell</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[基础是非常重要的]]></category>

		<guid isPermaLink="false">http://www.iinterest.net/?p=841</guid>
		<description><![CDATA[CSS的特殊性是非常重要却又经常被忽视的属性,特别是在团队合作下的产品迭代开发中,因为不注重CSS的特殊性最后导致某些代码混乱不堪,这里就把自己对CSS特殊性的认识做一些归纳总结. CSS的特殊性(specificity)也可以称为CSS的优先级或权值:对于每个样式表规则,浏览器都会计算选择器的特殊性,从而使元素属性声明在有冲突的情况下能够正确显示. 特殊性的描述可以把它看成一个4位数: 0.0.0.0 ,数值越大的特殊性越高(例如:0.1.0.0&#62;0.0.1.2),也是最终浏览器显示的效果. 特殊性的具体特性: 内联样式的特殊性为 1.0.0.0 ID选择器的特殊性为 0.1.0.0 类或者伪类的特殊性为 0.0.1.0 元素和伪元素的特殊性为 0.0.0.1 简单的说就是:内联样式的特殊性&#62;ID选择器&#62;类或者伪类&#62;元素和伪元素. 看几个例子: &#60;div style=”backgroud:red”&#62;&#8230; /* 1.0.0.0 */ #iin1{ backgroud:blue;} /* 0.1.0.0 */ .iin2{ backgroud:green;} /* 0.0.1.0 */ 如果这样写&#60;div id=”iin1&#8243; class=”iin2&#8243; style=”backgroud:red”&#62;&#8230;因为这几个样式定义存在冲突,所以显示效果需要根据特殊性来判断,从例子中可以很明显的看出&#60;div style=”backgroud:red”&#62;&#8230;/* 1.0.0.0 */最大,所以&#60;div&#62;的背景色最终为红色;继续: a{ color:red;} /* &#8230; <a href="http://www.iinterest.net/2010/05/08/css-specificity/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>CSS的特殊性是非常重要却又经常被忽视的属性,特别是在团队合作下的产品迭代开发中,因为不注重CSS的特殊性最后导致某些代码混乱不堪,这里就把自己对CSS特殊性的认识做一些归纳总结.</p>
<p><strong>CSS的特殊性(specificity)</strong>也可以称为CSS的优先级或权值:对于每个样式表规则,浏览器都会计算选择器的特殊性,从而使元素属性声明在有冲突的情况下能够正确显示.</p>
<p>特殊性的描述可以把它看成一个4位数: 0.0.0.0 ,数值越大的特殊性越高(例如:0.1.0.0&gt;0.0.1.2),也是最终浏览器显示的效果.</p>
<h3>特殊性的具体特性:</h3>
<ul>
<li>内联样式的特殊性为 1.0.0.0</li>
<li>ID选择器的特殊性为 0.1.0.0</li>
<li>类或者伪类的特殊性为 0.0.1.0</li>
<li>元素和伪元素的特殊性为 0.0.0.1</li>
</ul>
<p>简单的说就是:内联样式的特殊性&gt;ID选择器&gt;类或者伪类&gt;元素和伪元素.<br />
<span id="more-841"></span><br />
看几个例子:</p>
<blockquote><p>&lt;div style=”backgroud:red”&gt;&#8230; /* 1.0.0.0 */<br />
#iin1{ backgroud:blue;} /* 0.1.0.0 */<br />
.iin2{ backgroud:green;} /* 0.0.1.0 */</p></blockquote>
<p>如果这样写&lt;div id=”iin1&#8243; class=”iin2&#8243; style=”backgroud:red”&gt;&#8230;因为这几个样式定义存在冲突,所以显示效果需要根据特殊性来判断,从例子中可以很明显的看出&lt;div style=”backgroud:red”&gt;&#8230;/* 1.0.0.0 */最大,所以&lt;div&gt;的背景色最终为红色;继续:</p>
<blockquote><p>a{ color:red;} /* 0.0.0.1 */<br />
p a{ color:blue;} /* 0.0.0.2 */<br />
p a.more{ color:green;} /* 0.0.1.2 */</p></blockquote>
<p>根据特殊性规则:<br />
&lt;a href=”#”&gt;&lt;/a&gt;    <span style="color: #ff0000;">&lt;a&gt;为红色</span>;<br />
&lt;p&gt;&lt;a href=”#”&gt;&lt;/a&gt;&lt;/p&gt;    <span style="color: #0000ff;">&lt;a&gt;为蓝色</span>;<br />
&lt;p&gt;&lt;a href=”#” class=”more”&gt;&lt;/a&gt;&lt;/p&gt;    <span style="color: #339966;">&lt;a&gt;为绿色</span>;</p>
<h3>连接符和通配符不具有特殊性</h3>
<p>即特殊性为0.0.0.0; 例如下面两组例子,它们的的特殊性相同:</p>
<blockquote><p>div p{ color:red;} /* 0.0.0.2 */<br />
body * p{ color:blue} /* 0.0.0.2*/</p></blockquote>
<blockquote><p>ol&gt;li{ color:red;} /* 0.0.0.2 */<br />
ol li{ color:blue;} /* 0.0.0.2 */</p></blockquote>
<p>那么遇到上面的情况浏览器该如何渲染呢? 浏览器会根据选择器出现的先后顺序来判断,后出现的选择器会把先出现的给覆盖掉,所以最后两组例子都会显示为蓝色.而且浏览器会将内部样式(即&lt;style&gt;&#8230;&lt;/style&gt;中的样式)的顺序判断为在外链样式之后,也就是说内部样式会覆盖掉外链样式中相同的属性定义.</p>
<h3>继承同样不具有特殊性</h3>
<p>例:</p>
<blockquote><p>p{ color:blue;} /* 0.0.0.1 */<br />
*{ color:red;} /* 0.0.0.0 */</p></blockquote>
<p>虽然通配符*定义在p的后面,但最终&lt;p&gt;中的文字还是会显示为蓝色;值得注意的是继承的”不具有特殊性”不同于上面提到的连接符和通配符,它是连0都没有! 这又会给我们带来什么意外呢?看看下面的例子:</p>
<blockquote><p>&#8230;<br />
&lt;style&gt;<br />
*{ color:red;}<br />
&lt;/style&gt;</p>
<p>&lt;body&gt;<br />
&lt;p&gt;这里的文字&lt;em&gt;hello&lt;/em&gt;&lt;/p&gt;<br />
&lt;/body&gt;<br />
&#8230;</p></blockquote>
<p>例子很好理解,因为通配符定义了所有元素,所以&lt;p&gt;和&lt;em&gt;都是的红色(这里p,em特殊性为0.0.0.0).然后我们对例子做一点修改:</p>
<blockquote><p>&#8230;<br />
&lt;style&gt;<br />
*{ color:red;}<br />
<span style="color: #ff6600;">.blue{ color:blue;}</span><br />
&lt;/style&gt;</p>
<p>&lt;body&gt;<br />
&lt;p <span style="color: #ff6600;">class=”blue”</span>&gt;这里的文字&lt;em&gt;hello&lt;/em&gt;&lt;/p&gt;<br />
&lt;/body&gt;<br />
&#8230;</p></blockquote>
<p>这里给&lt;p&gt;加了个blue的类,我们期望的是&lt;p&gt;里面的文字都变为蓝色,同时也想当然的认为&lt;em&gt;会继承&lt;p&gt;的blue类的蓝色,但事实却是:</p>
<div class="runcode">
<p><textarea name="runcode" class="runcode_text" id="runcode_zXSzJ8">
&lt;!DOCTYPE html &gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot; /&gt;
&lt;title&gt;CSS的特殊性-iinterest&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
*{color: red;}
.blue{color:blue; }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p class=&quot;blue&quot;&gt;这里的文字&lt;em&gt;hello&lt;/em&gt;&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</textarea></p>
<p><input type="button" value="运行" class="runcode_button" onclick="runcode_open_new('runcode_zXSzJ8');"/> <input type="button" value="复制" class="runcode_button" onclick="runcode_copy('runcode_zXSzJ8');"/> 提示：你可以先修改部分代码再运行。</p>
</div>
<p>出现这种意外的原因就在于继承的特殊性连0都没有,而通配符的特殊性为0,所以通配符的样式被显示出来&#8230;</p>
<h3>最后一个影响特殊性的声明:!important</h3>
<p>例:</p>
<blockquote><p>h1{ color:red!important;}</p></blockquote>
<p>!important被称为重要声明,被标记为!important的属性其特殊性最高,当出现有冲突的重要声明时,同样安照出现的先后顺序决定最后的显示.<br />
例:</p>
<blockquote><p>h1{color:red!important;}<br />
h1{color:blue!important;}</p></blockquote>
<p>最后h1文字为蓝色</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iinterest.net/2010/05/08/css-specificity/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

