<?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>PlanABC - 怿飞’s Blog &#187; HTML/CSS/XML/XSL</title>
	<atom:link href="http://www.planabc.net/category/html-css-xml-xsl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.planabc.net</link>
	<description>落草为根—专注前端技术&#38;&#38;关注用户体验</description>
	<lastBuildDate>Sun, 31 Jan 2010 13:23:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>第4届D2前端技术论坛开始报名</title>
		<link>http://www.planabc.net/2009/12/05/4th-d2-start/</link>
		<comments>http://www.planabc.net/2009/12/05/4th-d2-start/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 09:24:04 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[d2]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=334</guid>
		<description><![CDATA[2005年前端工程师的职位开始在中国出现，2007年第一届D2前端技术论坛在杭州举行，从此D2伴随着中国的前端一起成长，从此越来越多的互联网产品的背后有着职业前端工程师坚定的身影。
在D2上我们曾交流过某项具体的前端技术，也曾探讨过团队协作的方式，那些美妙的话题都深入到我们频繁敲键盘的指尖。回首我们过去四年的坚持和梦想，现在是时候分享我们的积累和成果了。当架构、安全、性能等等在前端的领域扎根的时候，我们自己也在悄然发生质变，而推动这些变化的人和事正是D2想告诉你的。


本届主题：蜕变·成长
论坛时间：2009年12月19日(星期六)
论坛地点：杭州市滨江区网商路699号, 阿里巴巴B2B园区 （地图）
举办单位：阿里巴巴
特别致谢：CSDN、JavaEye、谋智网络、百度、豆瓣、华章图书、口碑网、蓝色理想、　　　　　 腾讯网、图... ]]></description>
			<content:encoded><![CDATA[<p>2005年前端工程师的职位开始在中国出现，2007年第一届D2前端技术论坛在杭州举行，从此D2伴随着中国的前端一起成长，从此越来越多的互联网产品的背后有着职业前端工程师坚定的身影。</p>
<p>在D2上我们曾交流过某项具体的前端技术，也曾探讨过团队协作的方式，那些美妙的话题都深入到我们频繁敲键盘的指尖。回首我们过去四年的坚持和梦想，现在是时候分享我们的积累和成果了。当架构、安全、性能等等在前端的领域扎根的时候，我们自己也在悄然发生质变，而推动这些变化的人和事正是D2想告诉你的。</p>
<p><span id="more-1494"></span></p>
<ul>
<li><strong>本届主题</strong>：<a href="http://www.d2forum.org/d2/4/">蜕变·成长</a></li>
<li><strong>论坛时间</strong>：2009年12月19日(星期六)</li>
<li><strong>论坛地点</strong>：杭州市滨江区网商路699号, 阿里巴巴B2B园区 （<a href="http://hangzhou.edushi.com/?oid=29529">地图</a>）</li>
<li><strong>举办单位</strong>：<a href="http://www.alibaba.com/">阿里巴巴</a></li>
<li><strong>特别致谢</strong>：<a href="http://www.csdn.net/">CSDN</a>、<a href="http://www.javaeye.com/">JavaEye</a>、<a href="http://www.g-fox.cn/">谋智网络</a>、<a href="http://www.baidu.com/">百度</a>、<a href="http://www.douban.com/">豆瓣</a>、<a href="http://www.hzbook.com/ps/">华章图书</a>、<a href="http://www.koubei.com/">口碑网</a>、<a href="http://www.blueidea.com/">蓝色理想</a>、<br />　　　　　 <a href="http://www.qq.com/">腾讯网</a>、<a href="http://www.turingbook.com/">图灵教育</a>、<a href="http://www.taobao.com/">淘宝网</a>、<a href="http://www.alipay.com/">支付宝</a>。</li>
<li><strong>官网地址</strong>：<a href="http://www.d2forum.org/d2/4/">d2forum.org</a></li>
<li><strong>推广视频</strong>：<a href="http://v.youku.com/v_show/id_XMTM2NDI0MDU2.html">http://v.youku.com/v_show/id_XMTM2NDI0MDU2.html</a></li>
<li><strong>报名地址</strong>：<a href="http://www.d2forum.org/d2/4/sign_up.html">http://www.d2forum.org/d2/4/sign_up.html</a>（截止时间：2009.12.14 0:0:0）</li>
<li><strong>日程安排</strong>：<br />
<table>
<thead>
<tr>
<th scope="col" width="100">时间</th>
<th scope="col" width="310">主题</th>
<th scope="col">嘉宾</th>
</tr>
</thead>
<tbody>
<tr>
<td>08:45 – 09:15</td>
<td>入场</td>
<td></td>
</tr>
<tr>
<td>09:15 – 10:15</td>
<td>《模板语言与大前端》</td>
<td><a href="http://www.d2forum.org/2009/05/04/d2_fourth_guest_intro_jindawei/">金大为（百度）</a></td>
</tr>
<tr>
<td>10:30 – 11:30</td>
<td>《从YUI2到YUI3看前端的演变》</td>
<td><a href="http://www.d2forum.org/2009/04/30/d2_fourth_guest_intro_zhangkejun/">张克军（豆瓣）</a></td>
</tr>
<tr>
<td>11:30 – 13:00</td>
<td>午饭/休息/参观（阿里巴巴免费提供午餐）</td>
<td></td>
</tr>
<tr>
<td>13:00 – 14:00</td>
<td>《SilverlightQQ项目实践——Silverlight架构思考》</td>
<td><a href="http://www.d2forum.org/2009/04/16/d2_fourth_guest_intro_zyk/">甄焱鲲（腾讯）</a></td>
</tr>
<tr>
<td>14:15 – 15:15</td>
<td>《前端安全概览及防范》</td>
<td><a href="http://www.d2forum.org/2009/05/09/d2_fourth_guest_intro_mingcheng/">吕峰军（淘宝）</a></td>
</tr>
<tr>
<td>15:30 – 16:30</td>
<td>《前端性能优化与自动化》</td>
<td><a href="http://www.d2forum.org/2009/12/03/d2_fourth_guest_intro_yanxuekun/">鄢学鵾（口碑）</a></td>
</tr>
<tr>
<td>16:30 – 18:00</td>
<td>交流互动</td>
<td></td>
</tr>
</tbody>
</table>
<p>注意：以上安排可能会根据具体情况进行一些补充与修改。</p>
</li>
</ul>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=334&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2009/12/05/4th-d2-start/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>CSS Expression 的优化</title>
		<link>http://www.planabc.net/2009/09/21/optimization_of_css_eexpression/</link>
		<comments>http://www.planabc.net/2009/09/21/optimization_of_css_eexpression/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 08:41:08 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[expression]]></category>
		<category><![CDATA[优化]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=292</guid>
		<description><![CDATA[IE 浏览器中 CSS Expression 特性的最大的问题：会反复执行，每秒钟可能执行了成百上千次，有严重的性能问题。
如何对 CSS Expression 进行优化呢？
至少：如果我们将 CSS Expression 在匹配的元素中仅执行一次，性能将会提升很大。
old9 在 《CSS Expression Reloaded》一文中提供了一个解决方案：
在 CSS Expression 语句体里，将触发该 Expression 的 CSS 属性重置。
例如：
div {
    zoom: expression(function(el){el.style.zoom = "1"; alert(el.tagName);}(this));
}
补充几点：

CSS Expression 执行在任意一个匹配的元素上。
在 CSS expression 内， “this”关键字指向当前匹配的 HTML 元素。
CSS 属性选用一些不常用的属性来触发，触发完重置回默认值。

最近在 Ajaxian 的文章《Creating a querySelector for IE that runs at “native speed”》 中看到作者 Dion Almaer 也提供了一个类似的解决方式：
div [...... ]]></description>
			<content:encoded><![CDATA[<p>IE 浏览器中 CSS Expression 特性的最大的问题：会反复执行，每秒钟可能执行了成百上千次，有严重的性能问题。</p>
<p>如何对 CSS Expression 进行优化呢？</p>
<p>至少：如果我们将 CSS Expression 在匹配的元素中仅执行一次，性能将会提升很大。</p>
<p><a href="http://old9.blogsome.com/" title="web.Frontend" target="_blank">old9</a> 在 <a href="http://old9.blogsome.com/2008/10/26/css-expression-reloaded/" title="CSS Expression Reloaded" target="_blank">《CSS Expression Reloaded》</a>一文中提供了一个解决方案：</p>
<blockquote><p>在 CSS Expression 语句体里，将触发该 Expression 的 CSS 属性重置。</p></blockquote>
<p>例如：</p>
<pre><code>div {
    zoom: expression(function(el){el.style.zoom = "1"; alert(el.tagName);}(this));
}</code></pre>
<p>补充几点：</p>
<ol>
<li>CSS Expression 执行在任意一个匹配的元素上。</li>
<li>在 CSS expression 内， “this”关键字指向当前匹配的 HTML 元素。</li>
<li>CSS 属性选用一些不常用的属性来触发，触发完重置回默认值。</li>
</ol>
<p>最近在 <a href="http://ajaxian.com/" title="Ajaxian" target="_blank">Ajaxian</a> 的文章<a href="http://ajaxian.com/archives/creating-a-queryselector-for-ie-that-runs-at-native-speed" title="" target="_blank">《Creating a querySelector for IE that runs at “native speed”》</a> 中看到作者 Dion Almaer 也提供了一个类似的解决方式：</p>
<pre><code>div {
    -singlex: expression(this.singlex ? 0 : (function(t) { alert(t.tagName); t.singlex = 0; } )(this));
}</code></pre>
<p>但此代码并没有完全解决 CSS Expression 最大的性能问题，因为每次触发还是要去执行 Expression 脚本。甚至你可以滚动下你鼠标的中间滚轮，意向不到的问题将会发生。</p>
<p>最后强调：<strong>仅是对 CSS Expression 做了优化，但并未说 CSS Expression 就不存在其他方面的问题。</strong></p>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=292&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2009/09/21/optimization_of_css_eexpression/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>如何在 IE 中使用 HTML5 元素</title>
		<link>http://www.planabc.net/2009/06/13/how_to_use_html5_elements_in_ie/</link>
		<comments>http://www.planabc.net/2009/06/13/how_to_use_html5_elements_in_ie/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 06:47:03 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=249</guid>
		<description><![CDATA[Sjoerd Visscher 发现了一个简洁的 方法 让样式在 IE 中作用到未知的元素上——仅需 JS 创建此未知元素即可：
document.createElement(elementName)
同理（对于 IE 来说 HTML5 元素即是未知元素），该方法也可顺延到 HTML5 的元素上（详细见：John Resig 写的 《HTML5 Shiv》 一文）：
&#60;html&#62;
&#60;head&#62;
&#60;style&#62;section { color: red; }&#60;/style&#62;
&#60;script&#62;document.createElement("section")&#60;/script&#62;
&#60;/head&#62;
&#60;body&#62;
&#60;section&#62;Hello World!&#60;/section&#62;
&#60;/body&#62;
&#60;/html&#62;
在 IE 中，为了更方便使用 HTML5 元素，我们可以引入这样的脚本：
(function(){
    // from: http://dean.edwards.name/weblog/2007/03/sniff/
    if(!/*@cc_on!@*/0) return; 

    var html5 = "abbr,article,aside,audio,bb,canvas,datagrid,datalist,details,dialog,eventsource,figure,footer,hgroup,header,mark,menu,meter,nav,output,progress,section,time,video".split(',');
    f... ]]></description>
			<content:encoded><![CDATA[<p><a href="http://w3future.com/weblog/" target="_blank" title="Sjoerd Visscher's weblog - w3future.com">Sjoerd Visscher</a> 发现了一个简洁的 <a href="http://intertwingly.net/blog/2008/01/22/Best-Standards-Support#c1201006277" target="_blank" title="CSS rules to apply to unknown elements in IE">方法</a> 让样式在 IE 中作用到未知的元素上——仅需 JS 创建此未知元素即可：</p>
<pre><code>document.createElement(elementName)</code></pre>
<p>同理（对于 IE 来说 <a href="http://dev.w3.org/html5/spec/Overview.html" target="HTML5" target="_blank">HTML5</a> 元素即是未知元素），该方法也可顺延到 <a href="http://dev.w3.org/html5/spec/Overview.html" target="HTML5" target="_blank">HTML5</a> 的元素上（详细见：<a href="http://ejohn.org/" title="John Resig" target="_blank">John Resig</a> 写的 <a href="http://ejohn.org/blog/html5-shiv/" title="HTML5 Shi" target="_blank">《HTML5 Shiv》</a> 一文）：</p>
<pre><code>&lt;html&gt;
&lt;head&gt;
&lt;style&gt;section { color: red; }&lt;/style&gt;
&lt;script&gt;document.createElement("section")&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;section&gt;Hello World!&lt;/section&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>在 IE 中，为了更方便使用 <a href="http://dev.w3.org/html5/spec/Overview.html" target="HTML5" target="_blank">HTML5</a> 元素，我们可以引入这样的脚本：</p>
<pre><code>(function(){
    // from: http://dean.edwards.name/weblog/2007/03/sniff/
    if(!/*@cc_on!@*/0) return; 

    var html5 = "abbr,article,aside,audio,bb,canvas,datagrid,datalist,details,dialog,eventsource,figure,footer,hgroup,header,mark,menu,meter,nav,output,progress,section,time,video".split(',');
    for(var i = 0, len = html5.length; i < len; i++ ) {
        document.createElement(html5[i]);
    }
})();</code></pre>
<p>详细具体应用的案例如下：</p>
<ul>
<li><a href="http://www.fofronline.com/2009-06/moving-markup-towards-html5/" target="_blank" title="Moving markup towards HTML5">《Moving markup towards HTML5》</a></li>
<li><a href="http://www.brucelawson.co.uk/tests/html5-elements.html" target="_blank" title="Test new HTML 5 elements">《Test new HTML 5 elements》</a></li>
</ul>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=249&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2009/06/13/how_to_use_html5_elements_in_ie/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>影响 reflow 的因素及其优化</title>
		<link>http://www.planabc.net/2009/04/13/reflow/</link>
		<comments>http://www.planabc.net/2009/04/13/reflow/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 10:25:09 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[reflow]]></category>
		<category><![CDATA[优化]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=227</guid>
		<description><![CDATA[如果对于 reflow 这个概念你还不太清楚或者不知道，请先阅读：

《Notes on HTML Reflow》
《What is a reflow?》
《Gecko:Reflow Refactoring》
《reflow》
《形象化的reflow》
《样式的执行效率-reflow》

Yahoo! 性能工程师 Nicole Sullivan 在最新的文章 《Reflows &#38; Repaints: CSS Performance making your JavaScript slow?》 中总结了导致 reflow 发生的一些因素：

调整窗口大小（Resizing the window）
改变字体（Changing the font）
增加或者移除样式表（Adding or removing a stylesheet）
内容变化，比如用户在input框中输入文字（Content changes, such as a user typing text in
an input box）
激活 CSS 伪类，比如 :hover (IE 中为兄弟结点伪类的激活)（Activation of CSS pseudo classes such as [...... ]]></description>
			<content:encoded><![CDATA[<p>如果对于 <a title="Notes on HTML Reflow" href="http://www.mozilla.org/newlayout/doc/reflow.html" target="_blank">reflow</a> 这个概念你还不太清楚或者不知道，请先阅读：</p>
<ul>
<li><a title="Notes on HTML Reflow" href="http://www.mozilla.org/newlayout/doc/reflow.html" target="_blank">《Notes on HTML Reflow》</a></li>
<li><a title="What is a reflow?" href="http://dougt.wordpress.com/2008/05/24/what-is-a-reflow/" target="_blank">《What is a reflow?》</a></li>
<li><a title="Gecko:Reflow Refactoring" href="https://wiki.mozilla.org/Gecko:Reflow_Refactoring" target="_blank">《Gecko:Reflow Refactoring》</a></li>
<li><a title="reflow" href="http://realazy.org/blog/2007/09/09/reflow/" target="_blank">《reflow》</a></li>
<li><a title="形象化的reflow" href="http://www.aoao.org.cn/blog/2008/05/reflow/" target="_blank">《形象化的reflow》</a></li>
<li><a title="样式的执行效率-reflow" href="http://www.missormiss.com/reflow.html" target="_blank">《样式的执行效率-reflow》</a></li>
</ul>
<p>Yahoo! 性能工程师 <a title="http://www.stubbornella.org/content/" href="http://www.stubbornella.org/content/" target="_blank">Nicole Sullivan</a> 在最新的文章 <a title="Reflows &amp; Repaints: CSS Performance making your JavaScript slow?" href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/" target="_blank">《Reflows &amp; Repaints: CSS Performance making your JavaScript slow?》</a> 中总结了导致 reflow 发生的一些因素：</p>
<ol>
<li>调整窗口大小（Resizing the window）</li>
<li>改变字体（Changing the font）</li>
<li>增加或者移除样式表（Adding or removing a stylesheet）</li>
<li>内容变化，比如用户在input框中输入文字（Content changes, such as a user typing text in<br />
an input box）</li>
<li>激活 CSS 伪类，比如 :hover (IE 中为兄弟结点伪类的激活)（Activation of CSS pseudo classes such as :hover (in IE the activation of the pseudo class of a sibling)）</li>
<li>操作 class 属性（Manipulating the class attribute）</li>
<li>脚本操作 DOM（A script manipulating the DOM）</li>
<li>计算 offsetWidth  和 offsetHeight 属性（Calculating offsetWidth and offsetHeight）</li>
<li>设置 style 属性的值 （Setting a property of the style attribute）</li>
</ol>
<p><a title="Notes on HTML Reflow" href="http://www.mozilla.org/newlayout/doc/reflow.html" target="_blank">reflow</a> 会引起开销，影响页面的性能，那如何才能做到合理的优化呢？<a title="http://www.stubbornella.org/content/" href="http://www.stubbornella.org/content/" target="_blank">Nicole Sullivan</a> 也提供了部分建议：</p>
<ol>
<li>如果想设定元素的样式，通过改变元素的 class 名 (尽可能在 DOM 树的最里层)（Change classes on the element you wish to style (as low in the dom tree as possible)）</li>
<li>避免设置多项内联样式（Avoid setting multiple inline styles）</li>
<li>应用元素的动画，使用 position 属性的 fixed 值或 absolute 值（Apply animations to elements that are position fixed or absolute）</li>
<li>权衡平滑和速度（Trade smoothness for speed）</li>
<li>避免使用 table 布局（Avoid tables for layout）</li>
<li>避免使用CSS的 JavaScript 表达式 (仅 IE 浏览器)（Avoid JavaScript expressions in the CSS (IE only)）</li>
</ol>
<p>详细阅读：</p>
<ul>
<li><a title="Reflows &amp; Repaints: CSS Performance making your JavaScript slow?" href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/" target="_blank">《Reflows &amp; Repaints: CSS Performance making your JavaScript slow?》</a></li>
</ul>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=227&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2009/04/13/reflow/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>如何快速定位页面中复杂 CSS BUG 问题</title>
		<link>http://www.planabc.net/2009/01/14/how_to_quickly_locate_the_complicated_css_bug/</link>
		<comments>http://www.planabc.net/2009/01/14/how_to_quickly_locate_the_complicated_css_bug/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 03:40:02 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=178</guid>
		<description><![CDATA[相信大家对于常见 CSS BUG 的处理已经相对比较熟悉，例如：IE6 Three Pixel Gap、IE5/6 Doubled Float-Margin Bug 等等。但时常我们也会碰到复杂的 CSS BUG 问题，所谓“复杂”实质是指触发的条件很复杂，而“BUG” 也并非指一定是浏览器的 BUG 。对于此类问题，我们首先要解决的是如何定位到问题，只有快速的定位到问题，才能更好的解决问题。
对于快速定位，个人的经验处理一般如下（基本可以定位到我在 淘宝 遇到的 90% 以上的复杂 CSS BUG 问题）：
1、检查页面的标签是否闭合
不要小看这条，也许折腾了你两天都没有解决的 CSS BUG 问题，却仅仅源于这里。毕竟页面的模板一般都是由开发来嵌套的，而他们很容易犯此类问题。
快捷提示：可以用 Dreamweaver 打开文件检查，一般没有闭合的标签，会黄色背景高亮。
2、样式排除法
有些复杂的页面也许加载了 N 个外... ]]></description>
			<content:encoded><![CDATA[<p>相信大家对于常见 CSS BUG 的处理已经相对比较熟悉，例如：<a href="http://www.positioniseverything.net/explorer/threepxt" target="_blank" title="IE6 Three Pixel Gap">IE6 Three Pixel Gap</a>、<a href="http://www.positioniseverything.net/explorer/doubled-margin.html" target="_blank" title="IE5/6 Doubled Float-Margin Bug">IE5/6 Doubled Float-Margin Bug</a> 等等。但时常我们也会碰到复杂的 CSS BUG 问题，所谓“复杂”实质是指触发的条件很复杂，而“BUG” 也并非指一定是浏览器的 BUG 。对于此类问题，我们首先要解决的是如何定位到问题，只有快速的定位到问题，才能更好的解决问题。</p>
<p>对于快速定位，个人的经验处理一般如下（基本可以定位到我在 <a href="http://www.taobao.com" target="_blank" title="淘宝网">淘宝</a> 遇到的 90% 以上的复杂 CSS BUG 问题）：</p>
<p>1、检查页面的标签是否闭合</p>
<p>不要小看这条，也许折腾了你两天都没有解决的 CSS BUG 问题，却仅仅源于这里。毕竟页面的模板一般都是由开发来嵌套的，而他们很容易犯此类问题。</p>
<p>快捷提示：可以用 Dreamweaver 打开文件检查，一般没有闭合的标签，会黄色背景高亮。</p>
<p>2、样式排除法</p>
<p>有些复杂的页面也许加载了 N 个外链 CSS 文件，那么逐个删除 CSS 文件，找到 BUG 触发的具体 CSS 文件，缩小锁定的范围。</p>
<p>对于刚才锁定的问题 CSS 样式文件，逐行删除具体的样式定义，定位到具体的触发样式定义，甚至是具体的触发样式属性。</p>
<p>3、模块确认法</p>
<p>有时候我们也可以从页面的 HTML 元素出发。删除页面中不同的 HTML 模块，寻找到触发问题的 HTML 模块。</p>
<p>4、检查是否清除浮动</p>
<p>其实有不少的 CSS BUG 问题是因为没有清除浮动造成的。养成良好的清除浮动的习惯是必要的，推荐使用 <a href="http://www.planabc.net/2008/05/04/yui_grids_css/" target="_blank" title="无额外 HTML 标签的清除浮动的方法">无额外 HTML 标签的清除浮动的方法</a>（尽量避免使用 overflow:hidden;zoom:1 的类似方法来清除浮动，会有太多的限制性）。</p>
<p>5、检查 IE 下是否触发 <a href="http://www.satzansatz.de/cssd/onhavinglayout.htm" target="_blank" title="haslayout">haslayout</a></p>
<p>很多的 IE 下复杂 CSS BUG 都与 IE 特有的 <a href="http://www.satzansatz.de/cssd/onhavinglayout.htm" target="_blank" title="haslayout">haslayout</a> 息息相关。熟悉和理解 <a href="http://www.satzansatz.de/cssd/onhavinglayout.htm" target="_blank" title="haslayout">haslayout</a> 对于处理复杂的 CSS BUG 会事半功倍。推荐阅读 old9 翻译的 <a href="http://old9.blogsome.com/2006/04/11/onhavinglayout" title="On having layout" target="_blank">《On having layout》</a>（如果无法翻越穿越伟大的 GFW，可阅读 <a href="http://bbs.blueidea.com/viewthread.php?tid=2636904" title="On having layout" target="_blank">蓝色上的转帖</a> ） </p>
<p>快捷提示：如果触发了 haslayout，IE 的调试工具 <a href="http://www.microsoft.com/downloadS/details.aspx?familyid=E59C3964-672D-4511-BB3E-2D5E1DB91038&#038;displaylang=en" target="_blank" title="IE Developer Toolbar下载">IE Developer Toolbar</a> 中的属性中将会显示 haslayout 值为 -1。</p>
<p>6、边框背景调试法</p>
<p>故名思议就是给元素设置显眼的边框或者背景（一般黑色或红色），进行调试。此方法是最常用的调试 CSS BUG 的方法之一，对于复杂 BUG 依旧适用。经济实惠还环保^^</p>
<p>最后想给大家强调一点的是，养成良好的书写习惯，减少额外标签，尽量语义，符合标准，其实可以为我们减少很多额外的复杂 CSS BUG，更多的时候其实是我们自己给自己制造了麻烦。希望大家远离 BUG ，生活越来越美好。</p>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=178&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2009/01/14/how_to_quickly_locate_the_complicated_css_bug/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>按钮在 IE 中两边被拉伸的 BUG</title>
		<link>http://www.planabc.net/2008/11/12/the_stretched_buttons_bug/</link>
		<comments>http://www.planabc.net/2008/11/12/the_stretched_buttons_bug/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 08:07:09 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[button]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=140</guid>
		<description><![CDATA[大家在写按钮（input、button）的时候会发现在 IE 下：

随着字数的增多，两边的间距也会越来越大。
在 WIN 的XP 风格下，当字数很多时，两边还会出现严重的锯齿。

到底是什么原因呢？
蓝色理想 原 WEB标准化专栏 的斑竹 zbm2001z 给出了一个答案：
1、IE 在按钮的 value 值每增加 4 个字节（汉字为 2 个）时，就会在按钮的两边产生总共一个字节的内边距宽度。
2、IE 的按钮（XP 风格）默认样式是一个固定尺寸的圆角矩形图片作背景，所以一旦按钮变宽变高后，这个固定尺寸的圆角矩形图片的边缘自然就会出现“拉毛”的现象了。

对于第二个问题我们暂时没办法去解决，除非 WIN 系统自己修复 BUG ，但对于第一个问题 ，我们还是可以修复的。
IE 下给按钮元素设置 overflow 属性的 visible 值（注 ：padding 值仅在设置了overflow:visible 属性后才有效），这个属性... ]]></description>
			<content:encoded><![CDATA[<p>大家在写按钮（input、button）的时候会发现在 IE 下：</p>
<ol>
<li>随着字数的增多，两边的间距也会越来越大。</li>
<li>在 WIN 的XP 风格下，当字数很多时，两边还会出现严重的锯齿。</li>
</ol>
<p>到底是什么原因呢？</p>
<p><a href="http://www.blueidea.com" target="_blank" title="蓝色理想">蓝色理想</a> 原 <a href="http://bbs.blueidea.com/forum-5-1.html" target="_blank" title="WEB标准化专">WEB标准化专栏</a> 的斑竹 <a href="http://bbs.blueidea.com/space-uid-51676.html" target="_blank" title="zbm2001z">zbm2001z</a> 给出了<a href="http://bbs.blueidea.com/viewthread.php?tid=2707183&#038;page=1#pid2954478" target="_blank" title="按钮内容一长就模糊">一个答案</a>：</p>
<blockquote><p>1、IE 在按钮的 value 值每增加 4 个字节（汉字为 2 个）时，就会在按钮的两边产生总共一个字节的内边距宽度。<br />
2、IE 的按钮（XP 风格）默认样式是一个固定尺寸的圆角矩形图片作背景，所以一旦按钮变宽变高后，这个固定尺寸的圆角矩形图片的边缘自然就会出现“拉毛”的现象了。</li>
</blockquote>
<p>对于第二个问题我们暂时没办法去解决，除非 WIN 系统自己修复 BUG ，但对于第一个问题 ，我们还是可以修复的。</p>
<p>IE 下给按钮元素设置 overflow 属性的 visible 值（注 ：padding 值仅在设置了overflow:visible 属性后才有效），这个属性其实在上次写的<a href="http://www.planabc.net/2008/04/14/background-clip_background-origin/" target="_blank" title="background-clip 与 background-origin 的一则运用">《background-clip 与 background-origin 的一则运用》</a>一文中已经使用。不过在今天阅读了<a href="http://latrine.dgx.cz/the-stretched-buttons-problem-in-ie" target="_blank" title="The stretched buttons problem in IE">《The stretched buttons problem in IE》</a>后，发现原来还有一个小 <a href="http://jehiah.cz/archive/button-width-in-ie-revised" target="_blank" title="Button Width in IE - Revised">BUG</a> —— 如果将按钮置于表格单元格中，虽然按钮显示正确了，但是原先预留的宽度大小却没有改变，仍然占据着空间，需要在 IE6 中设置按钮的宽度（width）为 0（IE7同样也存在此 BUG，但暂时没有寻找到好的方式解决）。</p>
<p>最终的修复代码如下（<a href="http://knowhow.davidgrudl.com/css/styling-forms/demo4.html" target="_blank" title="The stretched buttons problem in IE">Demo</a>）：</p>
<pre><code>input.button {
    padding: 0 .25em;
    width: auto;
    _width: 0;
    overflow:visible !ie;
}</code></pre>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=140&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/11/12/the_stretched_buttons_bug/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>可以给img元素设置背景图</title>
		<link>http://www.planabc.net/2008/09/27/using_a_background_image_on_an_image/</link>
		<comments>http://www.planabc.net/2008/09/27/using_a_background_image_on_an_image/#comments</comments>
		<pubDate>Sat, 27 Sep 2008 14:45:35 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[background]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=92</guid>
		<description><![CDATA[惊叹于老外的发现 《CSS Background image on html image element?》，自己从没关注过，也没想过如此的问题。
实现方法很简单：设置 img 元素为块元素（display:block;），并赋一个 padding 值。
例如（simple demo ）：
img {
    display:block;
    background:url('parallax.gif') no-repeat bottom left;
    padding:93px 100px 75px 100px;
}
根据上面的原理，举一反三，通过类似的方法，我们还可以给 img 元素设置双边：
img {
    display:block;
    padding:1px;
    background:red;
    border:1px solid black;
}... ]]></description>
			<content:encoded><![CDATA[<p>惊叹于老外的发现 <a href="http://www.contentwithstyle.co.uk/Blog/183/css-background-image-on-html-image-element" target="_blank" title="CSS Background image on html image element?">《CSS Background image on html image element?》</a>，自己从没关注过，也没想过如此的问题。</p>
<p>实现方法很简单：<strong>设置 img 元素为块元素（display:block;），并赋一个 padding 值。</strong></p>
<p>例如（<a href="http://www.contentwithstyle.co.uk/resources/img_bg_demo/" target="_blank" title="Image Demo">simple demo</a> ）：</p>
<pre><code>img {
    display:block;
    background:url('parallax.gif') no-repeat bottom left;
    padding:93px 100px 75px 100px;
}</code></pre>
<p>根据上面的原理，举一反三，通过类似的方法，我们还可以给 img 元素设置双边：</p>
<pre><code>img {
    display:block;
    padding:1px;
    background:red;
    border:1px solid black;
}</code></pre>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=92&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/09/27/using_a_background_image_on_an_image/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Google Chrome 浏览器支持的 CSS 选择器</title>
		<link>http://www.planabc.net/2008/09/04/google-chrome_browser_css_selector_support/</link>
		<comments>http://www.planabc.net/2008/09/04/google-chrome_browser_css_selector_support/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 05:14:50 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=91</guid>
		<description><![CDATA[Google Chrome 浏览器是基于 Safari 正在使用的 Webkit 引擎，使用的版本是 AppleWebKit/525.13 。不过 Safari3.1 使用的是最新版本：AppleWebKit/525.18。
那 Google Chrome 浏览器对 CSS 选择器的支持又如何呢？感谢 Engage 公司的女前端开发工程师 Estelle 测试整理的《Google Chrome Browser CSS Selector Support》：http://www.evotech.net/blog/2008/09/google-chrome-browser-css-selector-support/... ]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.google.com/chrome" target="_blank" title="Google Chrome">Google Chrome</a> 浏览器是基于 Safari 正在使用的 Webkit 引擎，使用的版本是 AppleWebKit/525.13 。不过 Safari3.1 使用的是最新版本：AppleWebKit/525.18。</p>
<p>那 Google Chrome 浏览器对 CSS 选择器的支持又如何呢？感谢 <a href="http://engage.com/" target="_blank" title="Engage">Engage</a> 公司的女前端开发工程师 <a href="http://www.evotech.net/blog/about/" target="_blank" title="About Estelle">Estelle</a> 测试整理的《Google Chrome Browser CSS Selector Support》：<br /><a href="http://www.evotech.net/blog/2008/09/google-chrome-browser-css-selector-support/" target="_blank" title="Google Chrome Browser CSS Selector Support">http://www.evotech.net/blog/2008/09/google-chrome-browser-css-selector-support/</a></p>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=91&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/09/04/google-chrome_browser_css_selector_support/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>position:relative 的使用限制</title>
		<link>http://www.planabc.net/2008/08/13/limited_use_of_position_relative/</link>
		<comments>http://www.planabc.net/2008/08/13/limited_use_of_position_relative/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 01:35:02 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[position]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=88</guid>
		<description><![CDATA[在 W3C 规范中 position 是可以使用在任何元素上的，但 position:relative 却有部分例外：
The effect of &#8216;position:relative&#8217; on table-row-group, table-header-group, table-footer-group, table-row, table-column-group, table-column, table-cell, and table-caption elements is undefined.
经测试，在浏览器（IE 除外）中给 table 定义 position:relative 属性是无效的。如果的确需要在表格中使用该属性，建议在单元格中嵌套一个 div 元素，再在其上设置 position:relative 属性来模拟。... ]]></description>
			<content:encoded><![CDATA[<p>在 W3C 规范中 <a href="http://www.w3.org/TR/2006/WD-CSS21-20061106/visuren.html#propdef-position" target="_blank" title="position">position</a> 是可以使用在任何元素上的，但 position:relative 却有部分例外：</p>
<blockquote><p>The effect of &#8216;position:relative&#8217; on table-row-group, table-header-group, table-footer-group, table-row, table-column-group, table-column, table-cell, and table-caption elements is undefined.</p></blockquote>
<p>经测试，在浏览器（IE 除外）中给 table 定义 position:relative 属性是无效的。如果的确需要在表格中使用该属性，建议在单元格中嵌套一个 div 元素，再在其上设置 position:relative 属性来模拟。</p>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=88&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/08/13/limited_use_of_position_relative/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>XHTML1.1 Tags List</title>
		<link>http://www.planabc.net/2008/07/31/xhtml11_tags_list/</link>
		<comments>http://www.planabc.net/2008/07/31/xhtml11_tags_list/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 03:09:24 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=86</guid>
		<description><![CDATA[http://ore.to/htmllint/tagslist.cgi?HTMLVersion=XHTML11... ]]></description>
			<content:encoded><![CDATA[<p><a href="http://ore.to/htmllint/tagslist.cgi?HTMLVersion=XHTML11" target="_blank" title="XHTML1.1 Tags List">http://ore.to/htmllint/tagslist.cgi?HTMLVersion=XHTML11</a></p>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=86&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/07/31/xhtml11_tags_list/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>line-height 属性的继承问题</title>
		<link>http://www.planabc.net/2008/07/25/unitless-line-heights/</link>
		<comments>http://www.planabc.net/2008/07/25/unitless-line-heights/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 05:19:53 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[line-height]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=83</guid>
		<description><![CDATA[淘宝商城的 detail 页面“产品详情”部分是商家自定义区块，曾出现这样一个问题：
&#60;style type="text/css"&#62;
p {
    line-height:17px;
}
&#60;/style&#62;

&#60;div class=&#34;mdse-detail&#34;&#62;
    &#60;p&#62;
        &#60;strong style=&#34;font-size:30px&#34;&#62;
            品牌：XZX&#60;br /&#62;
            市场价：145元&#60;br /&#62;
       [...... ]]></description>
			<content:encoded><![CDATA[<p><a href="http://mall.taobao.com" title="淘宝商城" target="_blank">淘宝商城</a>的 detail 页面“产品详情”部分是商家自定义区块，曾出现这样一个问题：</p>
<pre><code>&lt;style type="text/css"&gt;
p {
    line-height:17px;
}
&lt;/style&gt;

&lt;div class=&quot;mdse-detail&quot;&gt;
    &lt;p&gt;
        &lt;strong style=&quot;font-size:30px&quot;&gt;
            品牌：XZX&lt;br /&gt;
            市场价：145元&lt;br /&gt;
            颜色：黑色&lt;br /&gt;
            面料：棉&lt;br /&gt;
            尺码：S  M  L&lt;br /&gt;
            衣长：S 89  M 90   L 91&lt;br /&gt;
            肩宽：S 35  M 36   L 37&lt;br /&gt;
            胸围：S 88  M 92   L 96&lt;br /&gt;
            下摆：S 104 M 108  L 112&lt;br /&gt;
            袖长：S 17  M 17.5 L18&lt;br /&gt;
            由于测量方法不同，误差在2CM左右！
        &lt;/strong&gt;
    &lt;/p&gt;
&lt;/div&gt;</code></pre>
<p>你会发现上面例子的文字会重叠在一起！这是什么原因呢？</p>
<p>由于.detail-content 中的 p 元素继承了默认设置的全局样式 line-height:17px，而自定义区块又是由商家自定义，其内字体被设置为了 font-size:30px;（可能为任意值），根据 <a href="http://meyerweb.com/eric/css/inline-format.html" target="_blank" title="Inline formatting model">Inline formatting model</a>，得知该文字的 line-box 高为 17px，多出的字体部分上下溢出，所以会出现字体重叠的现象。</p>
<p>那这个问题如何解决呢？</p>
<p><strong>解决方案：</strong>我们给 .mdse-detail 下的 p 元素设定样式属性<strong> line-height:1.4</strong>。</p>
<p>为什么解决方案里的 1.4 不带单位？</p>
<p>元素的 line-height 属性值会继承父元素（或祖先元素）的 line-height 属性值，如果属性值有单位，则继承的值是换算后具体的 px 值而非原始的值（比如：em、%），而如果属性值没有单位，则浏览器会继承数值（无单位），然后根据该元素的 font-size 值重新解析得到新的 line-height 值。这个和 table 的 tr 设置 display 属性有一点点类似（tr.style.display = &#8221;;，IE 显示 block，而 Firefox 等标准浏览器显示 table-row）。</p>
<p>还有另外一个相对低效的方法，但也不失为一个快捷的解决方案：</p>
<pre><code>.mdse-detail p * {
    line-height:140%;
}</code></pre>
<p>参考阅读：<a href="http://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/" target="_blank" title="Unitless line-heights">《Unitless line-heights》</a></p>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=83&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/07/25/unitless-line-heights/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>如何给 legend 标签设定宽度</title>
		<link>http://www.planabc.net/2008/07/24/legend_width/</link>
		<comments>http://www.planabc.net/2008/07/24/legend_width/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 09:28:41 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[legend]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=82</guid>
		<description><![CDATA[我们在做表单的时候经常会使用到这样的结构：
&#60;fieldset&#62;
    &#60;legend&#62;哪些浏览器legend标签设定的宽度有效&#60;/legend&#62;
    &#60;input type="checkbox" value="ie6" name="width" id="ie6" checked="checked" /&#62;&#60;label for="ie6"&#62;IE6&#60;/label&#62;
    &#60;input type="checkbox" value="ie7" name="width" id="ie7"checked="checked" /&#62;&#60;label for="firefox"&#62;IE7&#60;/label&#62;
    &#60;input type="checkbox" value="firefox2" name="width" id="firefox2" /&#62;&#60;label for="firefox2"&#62;Firefox2&#60;/label&#62;
    &#60;input type="checkbox" value="firefox3" name="width" id="firefox3" /&#62;&#60;label for="firefox3"&#62;Firefox3&#60;/label&#62;
    &#60;input type="checkbox" value="opera" name="width" id="opera" checked="checked" [...... ]]></description>
			<content:encoded><![CDATA[<p>我们在做表单的时候经常会使用到这样的结构：</p>
<pre><code>&lt;fieldset&gt;
    &lt;legend&gt;哪些浏览器legend标签设定的宽度有效&lt;/legend&gt;
    &lt;input type="checkbox" value="ie6" name="width" id="ie6" checked="checked" /&gt;&lt;label for="ie6"&gt;IE6&lt;/label&gt;
    &lt;input type="checkbox" value="ie7" name="width" id="ie7"checked="checked" /&gt;&lt;label for="firefox"&gt;IE7&lt;/label&gt;
    &lt;input type="checkbox" value="firefox2" name="width" id="firefox2" /&gt;&lt;label for="firefox2"&gt;Firefox2&lt;/label&gt;
    &lt;input type="checkbox" value="firefox3" name="width" id="firefox3" /&gt;&lt;label for="firefox3"&gt;Firefox3&lt;/label&gt;
    &lt;input type="checkbox" value="opera" name="width" id="opera" checked="checked" /&gt;&lt;label for="opera"&gt;Opera9.0+&lt;/label&gt;
    &lt;input type="checkbox" value="safari" name="width" id="safari"checked="checked" /&gt;&lt;label for="safari"&gt;Safari3.0+&lt;/label&gt;
&lt;/fieldset&gt; </code></pre>
<p>当我们使用 CSS 给 legend 标签设定固定宽度时：</p>
<pre><code>legend {
    background:red;
    width:500px;
}</code></pre>
<p>在 IE6、IE7、Opera9.0+、Safari3.0+ 都正能常显示，而在 Firefox2 和 Firefox3 中宽度却失效。</p>
<p>在这里我们不去深究为什么，只探讨解决的方法：</p>
<p>我们可以通过在 legend 标签内添加一个标签，并给标签设定所需要的宽度，此宽度的单位不可为百分比（%）:</p>
<p>HTML 修改为：</p>
<pre><code>&lt;fieldset&gt;
    &lt;legend&gt;&lt;span&gt;哪些浏览器legend标签设定的宽度有效&lt;/span&gt;&lt;/legend&gt;
    &lt;input type="checkbox" value="ie6" name="width" id="ie6" checked="checked" /&gt;&lt;label for="ie6"&gt;IE6&lt;/label&gt;
    &lt;input type="checkbox" value="ie7" name="width" id="ie7"checked="checked" /&gt;&lt;label for="firefox"&gt;IE7&lt;/label&gt;
    &lt;input type="checkbox" value="firefox2" name="width" id="firefox2" /&gt;&lt;label for="firefox2"&gt;Firefox2&lt;/label&gt;
    &lt;input type="checkbox" value="firefox3" name="width" id="firefox3" /&gt;&lt;label for="firefox3"&gt;Firefox3&lt;/label&gt;
    &lt;input type="checkbox" value="opera" name="width" id="opera" checked="checked" /&gt;&lt;label for="opera"&gt;Opera9.0+&lt;/label&gt;
    &lt;input type="checkbox" value="safari" name="width" id="safari"checked="checked" /&gt;&lt;label for="safari"&gt;Safari3.0+&lt;/label&gt;
&lt;/fieldset&gt; </code></pre>
<p>CSS 修改为：</p>
<pre><code>legend span {
    background:red;
    width:500px;
    display:block;
}</code></pre>
<p>可参考：<a href="http://archivist.incutio.com/viewlist/css-discuss/91296" target="_blank" title="how to set width of LEGEND tags in FF">《how to set width of LEGEND tags in FF》</a></p>
<p><a href="http://www.htmlcssjs.com/blog/" target="_blank" title="正淳：Rage's Blog">正淳</a> 同时也提供了另外的一种解决方案，无需修改结构，仅修改样式即可：</p>
<pre><code>legend {
    background:red;
    text-indent:-600px;
    padding-left:600px;

    /*IE下还原初始方式，只设定宽度*/
    *width:600px;
    *text-indent:0;
    *padding-left:0;
}</code></pre>
<p><strong>题外话：</strong>CSS 的兼容其实并不难，多尝试多实践就可以解决，最重要的是自己要去动手，只有动手了才会有更多的收获，才会有更深的印象。	</p>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=82&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/07/24/legend_width/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>如何跨浏览器使用连续字符的换行</title>
		<link>http://www.planabc.net/2008/07/03/cross_browser_word_breaker/</link>
		<comments>http://www.planabc.net/2008/07/03/cross_browser_word_breaker/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 12:33:22 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=80</guid>
		<description><![CDATA[由于连续的字符（字母、符号、数字）在默认情况下是不换行的，可能会破坏整个界面布局。
那如何解决这个问题呢？
在 IE 和 Safari 1.3+ 下相对比较容易解决，使用 CSS 属性 word-wrap: break-word;。有朋友会问为什么不是使用 word-break:break-all; ，因为有一个特殊的情况，该属性无法解决换行——连续的英文标点符号。
注：word-break 主要使用在 CJK 文本，即：中文（Chinese）、日文（Japanese）、韩文（Korean）。
而 Firefox 和 Opera 浏览器，无法识别  word-wrap: break-word; 和 word-break:break-all; 属性。可以通过脚本给连续字符的每个字符之间插入 \ u8203 的字符（该字符在非 IE 浏览下不占据空间），使连续变为了不连续，达到了换行的效果。
breakWord = function(dEl){
    var dWalker = document.createTreeWalker(dEl, NodeFilter.SHOW_TEXT, null, false);
    var node,s,c = String.fromCharCode('8203');
    while (dW... ]]></description>
			<content:encoded><![CDATA[<p>由于连续的字符（字母、符号、数字）在默认情况下是不换行的，可能会破坏整个界面布局。</p>
<p>那如何解决这个问题呢？</p>
<p>在 IE 和 Safari 1.3+ 下相对比较容易解决，使用 CSS 属性 <a href="http://www.w3.org/TR/css3-text/#word-wrap" target="_blank" title="Force Wrapping: the 'word-wrap' property">word-wrap: break-word;</a>。有朋友会问为什么不是使用 <a href="http://www.w3.org/TR/css3-text/#word-break" target="_blank" title="Line Breaking Restrictions: the 'word-break' property">word-break:break-all;</a> ，因为有一个特殊的情况，该属性无法解决换行——连续的英文标点符号。</p>
<p><strong>注：</strong><a href="http://www.w3.org/TR/css3-text/#word-break" target="_blank" title="Line Breaking Restrictions: the 'word-break' property">word-break</a> 主要使用在 CJK 文本，即：中文（Chinese）、日文（Japanese）、韩文（Korean）。</p>
<p>而 Firefox 和 Opera 浏览器，无法识别  word-wrap: break-word; 和 word-break:break-all; 属性。可以通过脚本给连续字符的每个字符之间插入 \ u8203 的字符（该字符在非 IE 浏览下不占据空间），使连续变为了不连续，达到了换行的效果。</p>
<pre><code>breakWord = function(dEl){
    var dWalker = document.createTreeWalker(dEl, NodeFilter.SHOW_TEXT, null, false);
    var node,s,c = String.fromCharCode('8203');
    while (dWalker.nextNode()){
        node = dWalker.currentNode;
        s = trim( node.nodeValue ) .split('').join(c);
        node.nodeValue = s;
    }
    return true;
}</code></pre>
<p>详细的脚本，可参看 <a title="Hedger Wang" href="http://www.hedgerwow.com/">Hedger Wang</a> 整理的脚本<a href="http://www.hedgerwow.com/360/dhtml/css-word-break.html" target="_blank" title="Cross Browser Word Breaker">《Cross Browser Word Breaker》</a></p>
<p>对于 Firefox ，你还可以通过 <a href="http://www.w3.org/TR/xbl/" target="_blank" title="XBL bindings">XBL bindings</a> 来实现此效果：<a href="http://blog.stchur.com/2007/02/22/emulating-css-word-wrap-for-mozillafirefox/" title="Emulating CSS word-wrap for Mozilla/Firefox" target="_blank">《Emulating CSS word-wrap for Mozilla/Firefox》</a></p>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=80&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/07/03/cross_browser_word_breaker/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>两个不太常用的 CSS Hack</title>
		<link>http://www.planabc.net/2008/06/26/two_css_hack_not_commonly_used/</link>
		<comments>http://www.planabc.net/2008/06/26/two_css_hack_not_commonly_used/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 02:45:13 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Firfox]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=78</guid>
		<description><![CDATA[1、仅 Safari  和 Opera  识别的 Hack
@media all and (min-width: 0px) {
/* Safari and Opera  rules here */
}

或者
@media screen and (-webkit-min-device-pixel-ratio:0) {
/* Safari and Opera rules here */
}
注：这里所指代的 Safari  和 Opera 一般为最新版本。
2、仅 Firefox 3 和 IE7 识别的 Hack
selector, x:-moz-any-link, x:default {
/* Firefox 3  and IE7 rules here */
}
注：由于 Firefox 2 和 [...... ]]></description>
			<content:encoded><![CDATA[<p>1、仅 Safari  和 Opera  识别的 Hack</p>
<pre><code>@media all and (min-width: 0px) {
/* Safari and Opera  rules here */
}
</code></pre>
<p>或者</p>
<pre><code>@media screen and (-webkit-min-device-pixel-ratio:0) {
/* Safari and Opera rules here */
}</code></pre>
<p>注：这里所指代的 Safari  和 Opera 一般为最新版本。</p>
<p>2、仅 Firefox 3 和 IE7 识别的 Hack</p>
<pre><code>selector, x:-moz-any-link, x:default {
/* Firefox 3  and IE7 rules here */
}</code></pre>
<p>注：由于 Firefox 2 和 Firefox 3 共存，且两个版本对 CSS 的解析有部分不一致，或许用得着这个 Hack 。</p>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=78&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/06/26/two_css_hack_not_commonly_used/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>针对 IE8 的 hack</title>
		<link>http://www.planabc.net/2008/06/17/ie8_beta1_hack/</link>
		<comments>http://www.planabc.net/2008/06/17/ie8_beta1_hack/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 15:11:50 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=77</guid>
		<description><![CDATA[前言：对于 Hack 的使用，一直以来不提倡，应该尽可能的知道为什么，从根本上去解决问题，而不要遇到问题就 Hack，我们应该对代码“不作恶”，尽少使用，甚至不用。
对于 IE8 beta1 可以尝试下面的 Hack：
/*/ selector { &#8230; } /**/
此规则仅 IE8 beta1 识别，而其他 A-grade 浏览器都不识别。
不过这个 Hack 也许会在 IE 的 beta2 版本或正式版中被修复，暂可作为 IE8  beta1 调试之用。... ]]></description>
			<content:encoded><![CDATA[<p>前言：对于 Hack 的使用，一直以来不提倡，应该尽可能的知道为什么，从根本上去解决问题，而不要遇到问题就 Hack，我们应该对代码“不作恶”，尽少使用，甚至不用。</p>
<p>对于 IE8 beta1 可以尝试下面的 Hack：</p>
<p>/*/ selector { &#8230; } /**/</p>
<p>此规则仅 IE8 beta1 识别，而其他 <a title="Graded Browser Support" href="http://developer.yahoo.com/yui/articles/gbs/" target="_blank">A-grade</a> 浏览器都不识别。</p>
<p>不过这个 Hack 也许会在 IE 的 beta2 版本或正式版中被修复，暂可作为 IE8  beta1 调试之用。</p>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=77&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/06/17/ie8_beta1_hack/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>图片垂直居中的使用技巧</title>
		<link>http://www.planabc.net/2008/05/26/img_vertical_center_solution/</link>
		<comments>http://www.planabc.net/2008/05/26/img_vertical_center_solution/#comments</comments>
		<pubDate>Mon, 26 May 2008 13:03:17 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[垂直居中]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=71</guid>
		<description><![CDATA[在曾经的 淘宝UED 招聘 中有这样一道题目：
“使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中。”
当然出题并不是随意，而是有其现实的原因，垂直居中是 淘宝 工作中最常遇到的一个问题，很有代表性。
题目的难点在于两点：

垂直居中；
图片是个置换元素，有些特殊的特性。

至于如何解决，下面是一个权衡的相对结构干净，CSS简单的解决方法：
.box {
	/*非IE的主流浏览器识别的垂直居中的方法*/
	display: table-cell;
	vertical-align:middle;

	/*设置水平居中*/
	text-align:center;

	/* 针对IE的Hack */
	*display: block;
	*font-size: 175px;/*约为高度的0.873，200*0.873 约为175*/
	*font-family:Arial;/*防止非utf-8引起的hack失效问题，如gbk编码*/

	width:200px;
	height:200px;
	border: 1px solid #eee;
}
.box img {
	/*设置图片垂直居中*/
	vertical-align:middle;
}

&#60;div cla... ]]></description>
			<content:encoded><![CDATA[<p>在曾经的 <a href="http://ued.taobao.com/blog/2007/11/20/job_test_explanation/" target="_blank" title="2007淘宝UED招聘题解(前端开发部分)">淘宝UED 招聘</a> 中有这样一道题目：</p>
<blockquote><p>“使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中。”</p></blockquote>
<p>当然出题并不是随意，而是有其现实的原因，垂直居中是 <a href="http://www.taobao.com" target="_blank" title="淘宝网">淘宝</a> 工作中最常遇到的一个问题，很有代表性。</p>
<p>题目的难点在于两点：</p>
<ol>
<li>垂直居中；</li>
<li>图片是个置换元素，有些特殊的特性。</li>
</ol>
<p>至于如何解决，下面是一个权衡的相对结构干净，CSS简单的解决方法：</p>
<pre><code>.box {
	/*非IE的主流浏览器识别的垂直居中的方法*/
	display: table-cell;
	vertical-align:middle;

	/*设置水平居中*/
	text-align:center;

	/* 针对IE的Hack */
	*display: block;
	*font-size: 175px;/*约为高度的0.873，200*0.873 约为175*/
	*font-family:Arial;/*防止非utf-8引起的hack失效问题，如gbk编码*/

	width:200px;
	height:200px;
	border: 1px solid #eee;
}
.box img {
	/*设置图片垂直居中*/
	vertical-align:middle;
}

&lt;div class=&quot;box&quot;&gt;
	&lt;img src=&quot;http://pics.taobao.com/bao/album/promotion/taoscars_180x95_071112_sr.jpg&quot; /&gt;
&lt;/div&gt;</code></pre>
<p>当然还有其他的解决方法，在此不深究，有兴趣的可以阅读下：</p>
<ul>
<li><a href="http://www.student.oulu.fi/~laurirai/www/css/middle/" target="_blank" title="Vertical centering using CSS">《Vertical centering using CSS》</a></li>
<li><a href="http://www.jakpsatweb.cz/css/css-vertical-center-solution.html" target="_blank" title="Vertical centering using CSS">《Vertical centering using CSS》</a>（标题和上同，内容不同）</li>
<li><a href="http://www.hedgerwow.com/360/dhtml/css-layout-gridview.html" target="_blank" title="CSS List Grid Layout">《CSS List Grid Layout》</a></li>
</ul>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=71&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/05/26/img_vertical_center_solution/feed/</wfw:commentRss>
		<slash:comments>50</slash:comments>
		</item>
		<item>
		<title>link 和 style 元素在 HTML 文档中的位置</title>
		<link>http://www.planabc.net/2008/05/16/style_and_link_in_html_documents/</link>
		<comments>http://www.planabc.net/2008/05/16/style_and_link_in_html_documents/#comments</comments>
		<pubDate>Fri, 16 May 2008 09:51:15 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[style]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=69</guid>
		<description><![CDATA[对于 link 元素 和 style 元素 我相信大家都比较了解，但对于他们的出现位置可能有误解。
在 淘宝 的所有频道中出现这样一个问题：频道头部文件由于是统一支配的（为什么？历史原因！），所以我们无法在每个频道的 head 元素中以 link 或 style 方式加入各自的样式。最后选取了折中的方式，在主体内容中直接写入 style 元素，也就是说 style 元素置于了 body 元素中。
一切看着貌似很完美。其实不然，在 W3C 中对于 link 元素 和 style 元素 出现的位置有详细的说明：
HTML permits any number of STYLE elements in the HEAD section of a document.
The LINK element defines a link. Unlike A, it may only appear in the [...... ]]></description>
			<content:encoded><![CDATA[<p>对于 <a href="http://www.w3.org/TR/REC-html40/struct/links.html#edef-LINK" target="_blank" title="link 元素">link 元素</a> 和 <a href="http://www.w3.org/TR/REC-html40/present/styles.html#edef-STYLE" target="_blank" title="style 元素">style 元素</a> 我相信大家都比较了解，但对于他们的出现位置可能有误解。</p>
<p>在 <a href="http://www.taobao.com" target="_blank" title="淘宝网">淘宝</a> 的所有频道中出现这样一个问题：频道头部文件由于是统一支配的（为什么？历史原因！），所以我们无法在每个频道的 head 元素中以 link 或 style 方式加入各自的样式。最后选取了折中的方式，在主体内容中直接写入 style 元素，也就是说 style 元素置于了 body 元素中。</p>
<p>一切看着貌似很完美。其实不然，在 W3C 中对于 <a href="http://www.w3.org/TR/REC-html40/struct/links.html#edef-LINK" target="_blank" title="link 元素">link 元素</a> 和 <a href="http://www.w3.org/TR/REC-html40/present/styles.html#edef-STYLE" target="_blank" title="style 元素">style 元素</a> 出现的位置有详细的说明：</p>
<blockquote><p>HTML permits any number of <strong>STYLE </strong>elements in the HEAD section of a document.</p>
<p>The <strong>LINK</strong> element defines a link. Unlike A, it may only appear in the HEAD section of a document, although it may appear any number of times.</p></blockquote>
<p>也就是说 <a href="http://www.w3.org/TR/REC-html40/struct/links.html#edef-LINK" target="_blank" title="link 元素">link 元素</a> 和 <a href="http://www.w3.org/TR/REC-html40/present/styles.html#edef-STYLE" target="_blank" title="style 元素">style 元素</a> 必须出现在 head 元素中。</p>
<p>在下面的工作中，我们将会对页面中的这个错误进行优化，可能优化的进度不是理想中的速度（为什么？个人经验：历史原因的解决一向都不会很直接！）。</p>
<p>其实对于上面的问题，外国的开发人员有过相关讨论：</p>
<ul>
<li><a href="http://archivist.incutio.com/viewlist/css-discuss/30792" target="_blank" title="Style Element within Body Tag">《Style Element within Body Tag》</a></li>
<li><a href="http://archivist.incutio.com/viewlist/css-discuss/65550" target="_blank" title="Style Sheet Link in Body Tag?">《Style Sheet Link in Body Tag?》</a></li>
</ul>
<p>如果想温习一下样式的引入，可参读：<a href="http://www.w3.org/TR/REC-html40/present/styles.html" target="_blank" title="Style Sheets in HTML documents">《Style Sheets in HTML documents》</a></p>
<p>如有你想知道如何优化样式加载方式，可参读：<a href="http://www.planabc.net/2008/03/25/css_onload_optimize/" target="_blank" title=" 页面中 CSS 加载方式的优化">《页面中 CSS 加载方式的优化》</a></p>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=69&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/05/16/style_and_link_in_html_documents/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>详解CSS的优先权</title>
		<link>http://www.planabc.net/2008/05/06/css_specificity/</link>
		<comments>http://www.planabc.net/2008/05/06/css_specificity/#comments</comments>
		<pubDate>Tue, 06 May 2008 13:34:05 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=67</guid>
		<description><![CDATA[发现很多朋友对 CSS 的优先权不甚了解，规则很简单。需要说明的一点，如果你的样式管理需要深层判断 CSS 的优先权，更应反思自己的 CSS 代码，是否合理？是否优化？
CSS2.1 中规定了关于 CSS 规则 Specificity（特异性）的计算方式，用一个四位的数字串（注：CSS2 中是用三位）来表示，最后以 Specificity 的高低判断 CSS 的优先权。
Specificity 具体的计算规则：

元素的 style 样式属性，加 1,0,0,0。
每个 ID 选择符（#id），加 0,1,0,0。
每个 class 选择符（.class）、每个属性选择符（例 [attr=&#8221;&#34;] ）、每个伪类（例 :hover），加 0,0,1,0。
每个元素或伪元素（例 :firstchild）等，加 0,0,0,1。
其他选择符（例 全局选择符 *，子选择符 &#62;），加 0,0,0,0。

最后逐位相加数字串，得到最终的 Specificity 值，按照从左到右的顺序逐位比较。
除了 Specificity 还有一些其他规则... ]]></description>
			<content:encoded><![CDATA[<p>发现很多朋友对 CSS 的优先权不甚了解，规则很简单。需要说明的一点，如果你的样式管理需要深层判断 CSS 的优先权，更应反思自己的 CSS 代码，是否合理？是否优化？</p>
<p><a title="CSS2.1" target="_blank" href="http://www.w3.org/TR/CSS21">CSS2.1</a> 中规定了关于 CSS 规则 <a title="Calculating a selector's specificity" target="_blank" href="http://www.w3.org/TR/CSS21/cascade.html#specificity">Specificity</a>（特异性）的计算方式，用一个四位的数字串（注：CSS2 中是用三位）来表示，最后以 Specificity 的高低判断 CSS 的优先权。</p>
<p>Specificity 具体的计算规则：</p>
<ul>
<li>元素的 style 样式属性，加 1,0,0,0。</li>
<li>每个 ID 选择符（#id），加 0,1,0,0。</li>
<li>每个 class 选择符（.class）、每个属性选择符（例 [attr=&rdquo;&quot;] ）、每个伪类（例 :hover），加 0,0,1,0。</li>
<li>每个元素或伪元素（例 :firstchild）等，加 0,0,0,1。</li>
<li>其他选择符（例 全局选择符 *，子选择符 &gt;），加 0,0,0,0。</li>
</ul>
<p>最后逐位相加数字串，得到最终的 Specificity 值，按照从左到右的顺序逐位比较。</p>
<p>除了 Specificity 还有一些其他规则：</p>
<ul>
<li>!important 声明的规则高于一切，如果 !important 声明冲突，则比较优先权。</li>
<li>如果优先权一样，则按源码中&ldquo;后来者居上&rdquo;的原则。</li>
<li>由继承而得到的样式属性不参与 specificity 的计算，低于一切其他规则（例 全局选择符 * ）。</li>
</ul>
<p>范例分析：</p>
<pre><code>h1 {color: red;}
/* 只有一个普通元素加成，结果是 0,0,0,1 */
body h1 {color: green;}
/* 两个普通元素加成，结果是 0,0,0,2 */
/*0,0,0,1 小于 0,0,0,2 ，后者胜出*/

h2.grape {color: purple;}
/* 一个普通元素、一个class选择符加成，结果是 0,0,1,1*/
h2 {color: silver;}
/*一个普通元素，结果是 0,0,0,1 */
/*0,0,1,1 大于 0,0,0,1 ，前者胜出*/

html &gt; body table tr[id=&rdquo;totals&rdquo;] td ul &gt; li {color: maroon;}
/* 7个普通元素、一个属性选择符、两个其他选择符（子选择符 &gt;），结果是0,0,1,7 */
li#answer {color: navy;}
/* 一个ID选择符，一个普通选择符，结果是0,1,0,1 */
/*0,0,1,7 小于 0,1,0,1，后者胜出*/</code></pre>
<p>节选 old9 的<a href="http://old9.blogsome.com/2006/03/13/css_conflict_resolve/" target="_blank" title="CSS的优先权">《CSS的优先权》</a>（无法穿越 GFW）</p>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=67&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/05/06/css_specificity/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>YUI Grids CSS 解读</title>
		<link>http://www.planabc.net/2008/05/04/yui_grids_css/</link>
		<comments>http://www.planabc.net/2008/05/04/yui_grids_css/#comments</comments>
		<pubDate>Sun, 04 May 2008 13:26:38 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=66</guid>
		<description><![CDATA[YUI 中的 Grids CSS 主要有三个部分值得大家关注和学习：
1、布局的思想：使用 “负 margin（Negative Margins）” 技术
详细可参阅：《Creating Liquid Layouts with Negative Margins》
2、使用 em ：当用户改变字体大小时，宽度同时改变。
技巧：用 13 像素来平分宽度（保留小数到千分位），而 IE 浏览器用 13.333 。
/* 750 centered, and backward compatibility */
#doc {
	width:57.69em;
	*width:56.251em;
	min-width:750px;
}

57.69 = 750 / 13
56.251 = 750 / 13.333

注：《Setting Page Width with YUI Grids》 一文中提到：IE 下的 em 是宽度除以 13 ，再乘以 .9759 得到。同解于为什么现在的 YUI 源码中 IE 下 750px [...... ]]></description>
			<content:encoded><![CDATA[<p><a href="http://developer.yahoo.com/yui/" target="_blank" title="YUI">YUI</a> 中的 <a href="http://developer.yahoo.com/yui/grids/" target="_blank" title="YUI Grids CSS">Grids CSS</a> 主要有三个部分值得大家关注和学习：</p>
<p><strong>1、布局的思想：使用 “负 margin（Negative Margins）” 技术</strong></p>
<p>详细可参阅：<a href="http://www.alistapart.com/articles/negativemargins" target="_blank" title="Creating Liquid Layouts with Negative Margins">《Creating Liquid Layouts with Negative Margins》</a></p>
<p><strong>2、使用 em ：当用户改变字体大小时，宽度同时改变。</strong></p>
<p>技巧：用 13 像素来平分宽度（保留小数到千分位），而 IE 浏览器用 <a href="http://tech.groups.yahoo.com/group/ydn-javascript/message/27139" target="_blank" title="YUI CSS Problems">13.333 </a>。</p>
<pre><code>/* 750 centered, and backward compatibility */
#doc {
	width:57.69em;
	*width:56.251em;
	min-width:750px;
}</code></pre>
<ul>
<li>57.69 = 750 / 13</li>
<li>56.251 = 750 / 13.333</li>
</ul>
<p><strong>注：</strong><a href="http://developer.yahoo.com/yui/examples/grids/grids-doc-custom.html" target="_blank" title="Setting Page Width with YUI Grids">《Setting Page Width with YUI Grids》</a> 一文中提到：IE 下的 em 是宽度除以 13 ，再乘以 .9759 得到。同解于为什么现在的 YUI 源码中 IE 下 750px 的宽度是：56.301em（<strong>750 / 13 * 0.9759</strong>）。</p>
<p>此算法将在 YUI 的下个版本中换为上面的新算法（IE 浏览器用 <a href="http://tech.groups.yahoo.com/group/ydn-javascript/message/27139" target="_blank" title="YUI CSS Problems">13.333 </a>）。</p>
<p><strong>3、清除布局的浮动</strong></p>
<p>针对非 IE 浏览器：</p>
<pre><code>.yui-gf:after {
	content:".";
	display:block;
	height:0;
	clear:both;
	visibility:hidden;
}</code></pre>
<p>而对于 IE 浏览器，使用了 zoom:1 来触发 <a href="http://www.satzansatz.de/cssd/onhavinglayout.htm" target="_blank" title="On having layout">haslayout</a>。不过对于此 <a href="http://nate.koechley.com/blog/ " target="_blank" title="Nate Koechley">Nate Koechley</a> 这样解释的：</p>
<blockquote><p>Zoom is a non-valid attribute and so you&#8217;ll see warnings when you validate your CSS. I&#8217;m aware of that and think it is an acceptable tradeoff. </p></blockquote>
<p>个人比较赞成他的想法：<strong>I think it is an acceptable tradeoff</strong>。</p>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=66&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/05/04/yui_grids_css/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>background-clip 与 background-origin 的一则运用</title>
		<link>http://www.planabc.net/2008/04/14/background-clip_background-origin/</link>
		<comments>http://www.planabc.net/2008/04/14/background-clip_background-origin/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 11:42:24 +0000</pubDate>
		<dc:creator>怿飞</dc:creator>
				<category><![CDATA[HTML/CSS/XML/XSL]]></category>
		<category><![CDATA[background]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.planabc.net/?p=62</guid>
		<description><![CDATA[background-clip 和 background-origin 是 CSS3 中新加的 background module 属性，用来确定背景的定位。
background-clip 用来判断 background 是否包含 border 区域。而 background-origin 用来决定 background-position 计算的参考位置。
语法为：

background-clip: [border &#124; padding] [, [border &#124; padding]]* 
background-origin: [border &#124; padding &#124; content] [, [border &#124; padding &#124; content]]* 


对于 background-clip：
如果是 padding 值，则 background 忽略 padding边缘，border 是透明的。如果是 border 值，则background 包括 border 区域。如果 background-image 图片有多个，对应的 background-clip 值之间用逗号分隔。
对于 background-origin：
如果是 [...... ]]></description>
			<content:encoded><![CDATA[<p>background-clip 和 background-origin 是 CSS3 中新加的 <a href="http://www.w3.org/TR/css3-background/#dependencies" title="background module" target="_blank">background module </a>属性，用来确定背景的定位。</p>
<p>background-clip 用来判断 background 是否包含 border 区域。而 background-origin 用来决定 background-position 计算的参考位置。</p>
<p>语法为：</p>
<ul>
<li>background-clip: [border | padding] [, [border | padding]]* </li>
<li>background-origin: [border | padding | content] [, [border | padding | content]]* </li>
</ul>
<p><img src="http://www.planabc.net/wp-content/uploads/2008/04/box.png" alt="盒模型示意图" /></p>
<p>对于 <strong>background-clip</strong>：</p>
<p>如果是 padding 值，则 background 忽略 padding边缘，border 是透明的。如果是 border 值，则background 包括 border 区域。如果 <a href="http://www.w3.org/TR/css3-background/#layering" target="_blank" title="background-image">background-image</a> 图片有多个，对应的 background-clip 值之间用逗号分隔。</p>
<p>对于 <strong>background-origin</strong>：</p>
<p>如果是 padding 值，则 position 相对于 padding 边缘（&#8221;0 0&#8243; 为 padding 边缘的左上角，而 &#8220;100% 100%&#8221; 为右下角）。如果是 border 值，则意味着相对 border 边缘。而 border 值则相对于内容边缘。与 background-clip 相同，多个值也用逗号分隔。如果 background-clip 是 padding 值，background-origin 是 border 值，并且 background-position 是 &#8220;top left&#8221;（默认初始值），则背景图左上角将会被截取掉部分。</p>
<p>这两个属性仅从 CSS3 才出现，在未使用该属性 background module 中的默认表现又如何呢？</p>
<p>background-clip 默认类似于 background-clip:border。</p>
<p>background-origin 默认类似于 background-origin:padding。 </p>
<p>但 IE 又是特例 （It sucks）。 </p>
<p>在 IE6 、IE7 中，一般元素（button 等除外）的背景相当于：background-clip:border; background-origin:border; </p>
<p>而 hasLayout 的元素（加上 button 等）的背景则相当于：background-clip:padding; background-origin:padding; </p>
<p>这一对 CSS3 属性已在 Mozilla, Safari 3 和 Konqueror 等浏览器中实现，不过都是通过其私有属性的表达方式。</p>
<blockquote><p>基本非 IE 的浏览器的私有属性一般都会以 -xxx- 这样开始，-o-就是以 Presto 为引擎的 Opera 私有的、-icab- 是 iCab 私有的，-khtml- 是以 KHTML 为引擎的浏览器（如 Konqueror Safari）、-moz- 就是以 Mozilla 的 Gecko 为引擎的浏览器（如Firefox，Mozilla）、-webkit- 就是以 Webkit 渲染引擎（是 KHTML 的衍生产品）的浏览器（如 Safari、Swift）。</p></blockquote>
<p>即支持的私有属性分别为：</p>
<ul>
<li><a href="http://developer.mozilla.org/en/docs/CSS:-moz-background-clip" title=":-moz-background-clip" target="_blank">-moz-background-clip</a></li>
<li>-webkit-background-clip</li>
<li>-khtml-background-clip</li>
<li><a href="http://developer.mozilla.org/en/docs/CSS:-moz-background-origin" title="-moz-background-origin" target="_blank">-moz-background-origin</a></li>
<li>-webkit-background-origin</li>
<li>-khtml-background-origin</li>
</ul>
<p>下面举个运用 background-origin 属性的<a href="http://www.planabc.net/demo/background-clip_background-origin.html" target="_blank" title="background-clip 与 background-origin 的一则运用">简单例子</a>，效果如下图：</p>
<p><img src="http://www.planabc.net/wp-content/uploads/2008/04/button080414.gif" alt="范例示意图" /></p>
<p>HTML 部分：</p>
<p><code>
<pre>&lt;button&gt;这里是按钮，是钮不是妞&lt;/button&gt;</pre>
<p></code></p>
<p>CSS 部分（详细见注释）：</p>
<p><code>
<pre>button {
	display:inline-block;/*触发hasLayout*/
	height:26px;
	padding:0 20px;
	cursor:pointer;
	*overflow:visible;/*消除IE按钮左右padding随字数长度变化的BUG*/

	border:3px double #95071b;/*用3px 双边来模拟设计图中的白线*/
	border-right-color:#650513;
	border-bottom-color:#650513;

	background-color:#95071b;

	/*设置背景裁切方式和参考线*/
	-moz-background-clip:padding;
	-webkit-background-clip:padding;
	-khtml-background-clip:padding;

	-moz-background-origin:padding;
	-webkit-background-origin:padding;
	-khtml-background-origin:padding;

	/*向前兼容*/
	background-clip:padding;
	background-origin:padding;

	color:#fff;
	font-size:12px;
	line-height:20px;

	/*修正IE6下高度问题*/
	_padding-top:2px;
	_line-height:14px;
}</pre>
<p></code></p>
<p>不足之处：此效果在 Opera 下无法实现。</p>
<p>当然这只是一种对 HTML 代码有洁癖的解决方法（限于对 background-clip 和 background-origin 属性的学习和理解），当然也可尝试其他方法，也许会使 CSS 更简洁，至于各种方法的优缺点自己衡量。</p>
<p>扩展阅读：</p>
<ul>
<li><a href="http://www.brunildo.org/test/BackgroundBorder2.html" title="Background and Border" target="_blank">《Background and Border》</a></li>
</ul>
<img src="http://www.planabc.net/?ak_action=api_record_view&id=62&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.planabc.net/2008/04/14/background-clip_background-origin/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
