<?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>小强ORG &#187; Css</title>
	<atom:link href="http://www.xiaoqiang.org/category/css/feed" rel="self" type="application/rss+xml" />
	<link>http://www.xiaoqiang.org</link>
	<description>关注web前端开发&#124;web性能&#124;NodeJs&#124;用户体验&#124;交互设计</description>
	<lastBuildDate>Mon, 30 Jan 2012 09:25:15 +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>css2.1权重（specificity）IE6/7下一些错误规则</title>
		<link>http://www.xiaoqiang.org/css/specificity-ie6-ie7-wrong.html</link>
		<comments>http://www.xiaoqiang.org/css/specificity-ie6-ie7-wrong.html#comments</comments>
		<pubDate>Wed, 10 Aug 2011 02:46:03 +0000</pubDate>
		<dc:creator>小强</dc:creator>
				<category><![CDATA[Css]]></category>
		<category><![CDATA[specificity]]></category>
		<category><![CDATA[权重]]></category>

		<guid isPermaLink="false">http://www.xiaoqiang.org/?p=463</guid>
		<description><![CDATA[关于CSS specificity CSS 的specificity （权重），它是衡量一个衡量CSS值优先级的一个标准，既然作为标准，就具有一套相关的判定规定及计算方式，specificity用一个四位的数字串(CSS2是三位)来表示，更像四个级别，值从左到右，左面的最大，一级大于一级，数位之间没有进制，级别之间不可超越。 在多个选择符应用于同一个元素上那么Specificity值高的最终获得优先级。 选择符Specificity值列表： Selectors 选择符 Syntax Samples 语法 ensample 示例 Specificity 特性 通配选择符(Universal Selector) * *{ width:560px;} 0,0,0,0 类型选择符(Type Selectors) E1 td { font-size:12px;} 0,0,0,1 伪元素选择符(pseudo-element Selectors) :first-line :first-line{ font-size:12px;} 0,0,0,1 伪类选择符(Pseudo-classes Selectors) :link :link { &#8230; <a href="http://www.xiaoqiang.org/css/specificity-ie6-ie7-wrong.html">更多内容 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>关于CSS specificity<br />
CSS 的specificity （权重），它是衡量一个衡量CSS值优先级的一个标准，既然作为标准，就具有一套相关的判定规定及计算方式，specificity用一个四位的数字串(CSS2是三位)来表示，更像四个级别，值从左到右，左面的最大，一级大于一级，数位之间没有进制，级别之间不可超越。</p>
<p>在多个选择符应用于同一个元素上那么Specificity值高的最终获得优先级。<br />
选择符Specificity值列表：</p>
<table cellspacing="0" bgcolor="#ffffff">
<tbody>
<tr>
<td>Selectors<br />
选择符</td>
<td>Syntax Samples<br />
语法</td>
<td>ensample<br />
示例</td>
<td>Specificity<br />
特性</td>
</tr>
<tr>
<td><span style="color: #0000ff;">通配选择符(Universal Selector)</span></td>
<td>*</td>
<td>*{ width:560px;}</td>
<td>0,0,0,0</td>
</tr>
<tr>
<td><span style="color: #0000ff;">类型选择符(Type Selectors)</span></td>
<td>E1</td>
<td>td { font-size:12px;}</td>
<td>0,0,0,1</td>
</tr>
<tr>
<td><span style="color: #0000ff;">伪元素选择符(pseudo-element Selectors)</span></td>
<td>:first-line</td>
<td>:first-line{ font-size:12px;}</td>
<td>0,0,0,1</td>
</tr>
<tr>
<td><span style="color: #0000ff;">伪类选择符(Pseudo-classes Selectors)</span></td>
<td>:link</td>
<td>:link { font-size:12px;}</td>
<td>0,0,1,0</td>
</tr>
<tr>
<td><span style="color: #0000ff;">属性选择符(Attribute Selectors)</span></td>
<td>[attr]</td>
<td>[title] {color:blue;}</td>
<td>0,0,1,0</td>
</tr>
<tr>
<td><span style="color: #0000ff;">ID选择符(ID Selectors)</span></td>
<td>#ID</td>
<td>#test{ font-size:12px;}</td>
<td>0,1,0,0</td>
</tr>
<tr>
<td><span style="color: #0000ff;">类选择符(Class Selectors)</span></td>
<td>E1.className</td>
<td>.test{color:blue;}</td>
<td>0,0,1,0</td>
</tr>
<tr>
<td><span style="color: #0000ff;">子对象选择符(Child Selectors)</span></td>
<td>E1 &gt; E2</td>
<td>body &gt; p {color:blue;}</td>
<td>E1+E2</td>
</tr>
<tr>
<td><span style="color: #0000ff;">相邻选择符(Adjacent Sibling Selectors)</span></td>
<td>E1 + E2</td>
<td>div + p {color:blue;}</td>
<td>E1+E2</td>
</tr>
<tr>
<td><span style="color: #0000ff;">选择符分组(Grouping)</span></td>
<td>E1,E2,E3</td>
<td>.td1,a,body {color:blue;}</td>
<td>E1+E2+E3</td>
</tr>
<tr>
<td><span style="color: #0000ff;">包含选择符(Descendant Selectors)</span></td>
<td>E1 E2</td>
<td>table td {color:blue;}</td>
<td>E1+E2</td>
</tr>
</tbody>
</table>
<p><span id="more-463"></span><br />
规则：<br />
1. 行内样式优先级Specificity值为1,0,0,0，高于外部定义。<br />
如：&lt;div style=”color: red”&gt;test&lt;/div&gt;<br />
外部定义指经由&lt;link&gt;或&lt;style&gt;标签定义的规则；<br />
2.<strong>!important声明的Specificity值最高</strong>；<br />
3.Specificity值一样的情况下，按CSS代码中出现的顺序决定，后者CSS样式居上；<br />
4.由继续而得到的样式没有specificity的计算，它低于一切其他规则(比如全局选择符*定义的规则)。</p>
<p>算法：<br />
当遇到多个选择符同时出现时候<br />
按选择符得到的Specificity值逐位相加，<br />
{数位之间没有进制 比如说： 0,0,0,5 + 0,0,0,5 =0,0,0,10 而不是 0,0, 1, 0}<br />
就得到最终计算得的specificity，<br />
然后在比较取舍时按照从左到右的顺序逐位比较<br />
&#8212;&#8212;&#8212;-以上内容都是权重理论上的知识，按理说支持css2.1的浏览器应该都遵循&#8212;&#8212;&#8212;-<br />
IE6和IE7却不完全是那么回事；这里说的IE7排除掉IE8的兼容模式。</p>
<pre class="brush: css; title: ; notranslate">
a { /* 权重为[0,0,1] */
    color: #00f;
    background-color: #ff0;
}
a:hover { /* 权重为[0,1,1] */
    color: #ff0;
    background-color: #00f;
}
</pre>
<p>蓝色字，黄色背景，鼠标悬停的时候颜色颠倒<br />
接下来，在添加规则</p>
<pre class="brush: css; title: ; notranslate">
p a.cl1 { /* 权重为[0,1,2] */
    color: #f00;
    background-color: #0ff;
}
&lt;p&gt;&lt;a class=&quot;cl1&quot; href=&quot;#&quot;&gt;...&lt;/a&gt;&lt;/p&gt;
</pre>
<p>红色字，浅绿色背景，权重为 [0,1,2], 比第一条权重高<br />
在IE6下”normal” (not hover) 的值被覆盖了, 但是没有覆盖”hover”的值. 换句话说，权重为[0,1,1]的”hover”依然生效, 它没有被比他权重高的p a.cl1 [0,1,2]所覆盖 (但是没有定义:hover伪类)</p>
<pre class="brush: css; title: ; notranslate">
.cl2 a.cl3 { /* 权重为 [0,2,1] */
    color: #f00;
    background-color: #0ff;
}
&lt;p class=&quot;cl2&quot;&gt;&lt;a class=&quot;cl3&quot; href=&quot;#&quot;&gt;...&lt;/a&gt;&lt;/p&gt;
</pre>
<p>红色字，浅绿色背景，权重为 [0,2,1], 比第一条规则”normal”和”hover”都要高<br />
现在在IE6下不管是”normal”还是”hover”的值都被覆盖了,这时候权重 [0,2,1] 完全覆盖了权重 [0,1,1]</p>
<pre class="brush: css; title: ; notranslate">
div p :hover { /* 权重为 [0,1,2] */
    color: #f00;
    background-color: #0ff;
}
&lt;div&gt;&lt;p&gt;&lt;a href=&quot;#&quot;&gt;...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
</pre>
<p>当鼠标悬停在链接上的时候是红色字，浅绿色背景 , 权重为 [0,1,2], 比第一条”hover”的权重 [0,1,1]高<br />
第一条:hover完全被覆盖,IE6也是一样. 这个例子的权重 [0,1,2]和第二个例子的权重是一样的，但是它多了对 伪类:hover的定义就能完全覆盖第一条”hover”规则, 而第二个例子就不会覆盖<br />
演示地址：<a href="http://www.xiaoqiang.org/demo/specificity/specificity-ie6-hover.html" titile="IE6-/Win: 关于伪类:hover的权重问题">IE6/Win: 关于伪类:hover的权重问题</a><br />
IE6/win下伪类:visited也存在类似问题，不再赘述，演示地址：<a href="http://xiaoqiang.org/demo/specificity/specificity-ie6-visited.html" titile="IE6-/Win: 关于伪类:visited的权重问题">IE6-/Win: 关于伪类:visited的权重问题</a><br />
还有其他一些，在IE67下都会产生错误权重的情况，其他浏览器有条件的请帮忙测试一下：</p>
<pre class="brush: css; title: ; notranslate">
p.c12 {/* 权重为[0.1.1] */
    color: #c00;
}
div .c12 {/* 权重为[0.1.1] */
    color: #090;
}
&lt;div&gt;&lt;p class=&quot;c12&quot;&gt;el.class (red), el .class (green)  (错误显示 IE67/Win, IE/Mac and Op7-显示为红色)&lt;/p&gt;&lt;/div&gt;
</pre>
<p>如果顺序换过来el .class (red), el.class (green)，就是正确的了</p>
<pre class="brush: css; title: ; notranslate">
div .c24 {/* 权重为[0.1.1] */
    color: #009900;
}
.c23 p {/* 权重为[0.1.1] */
    color: #CC0000;
}
&lt;div class=&quot;c23&quot;&gt;&lt;p class=&quot;c24&quot;&gt;.class el (red), el .class (green)  (错误显示 IE67/Win, IE/Mac and Op7-显示为红色)&lt;/p&gt;&lt;/div&gt;
</pre>
<p>如果顺序换过来el .class (red), .class el (green)，就是正确的了</p>
<pre class="brush: css; title: ; notranslate">
div #c28 {/* 权重为[1.0.1] */
    color: #009900;
}
#c27 p {/* 权重为[1.0.1] */
    color: #CC0000;
}
&lt;div id=&quot;c27&quot;&gt;&lt;p id=&quot;c28&quot;&gt;#id el (red), el #id (green)  (错误显示 IE67/Win, IE/Mac and Op7-显示为红色)&lt;/p&gt;&lt;/div&gt;
</pre>
<p>如果顺序换过来el #id (red), #id el (green)，就是正确的了<br />
:first-letter使用的比较少，这个例子就不写了</p>
<pre class="brush: css; title: ; notranslate">
p.c31 {/* 权重为[0.1.1] */
    color: #c00;/* red */
}
body p.c31 {/* 权重为[0.1.2] */
    color: #090;/* green */
    color: miao;  /* 故意的错误 */
}
&lt;p class=&quot;c31&quot;&gt;在IE67下会错误显示红色&lt;/p&gt;
</pre>
<p>演示地址：<a href="http://xiaoqiang.org/demo/specificity/specificity-other.html" titile="其他权重错误">其他权重错误</a><br />
参考文献：</p>
<ol>
<li><a href="http://coding.smashingmagazine.com/2007/07/27/css-specificity-things-you-should-know/" titile="CSS Specificity: Things You Should Know<br />
">CSS Specificity: Things You Should Know<br />
</a></li>
<li><a href="http://www.brunildo.org/test/IEASpec.html">specificity tests</a></p>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaoqiang.org/css/specificity-ie6-ie7-wrong.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>固定宽度的文字自动换行并垂直剧中</title>
		<link>http://www.xiaoqiang.org/css/text-wrap-and-vertical-align-center.html</link>
		<comments>http://www.xiaoqiang.org/css/text-wrap-and-vertical-align-center.html#comments</comments>
		<pubDate>Tue, 09 Aug 2011 10:41:51 +0000</pubDate>
		<dc:creator>小强</dc:creator>
				<category><![CDATA[Css]]></category>
		<category><![CDATA[垂直剧中]]></category>
		<category><![CDATA[文字]]></category>

		<guid isPermaLink="false">http://www.xiaoqiang.org/?p=450</guid>
		<description><![CDATA[直接上代码 &#160; 试试看：固定宽度的文字自动换行并垂直剧中 2011.10.10更新，参照http://sofish.de/1909修正IE7bug]]></description>
			<content:encoded><![CDATA[<p>直接上代码</p>
<pre class="brush: css; title: ; notranslate">
.box {
    position: relative;
    width: 500px;
    height: 300px;
    border: 1px solid #FFF;
    background-color: #999;
    display: table;
}

.wrap {
    display: table-cell;
    vertical-align: middle;
    *position:absolute;
    * top: 50%;
    * left: 0;
}

.content { *position:relative;
    * top: -50%;
    * left: 0;
}
</pre>
<p>&nbsp;</p>
<pre class="brush: xml; title: ; notranslate">
        &lt;div class=&quot;box&quot;&gt;
            &lt;div class=&quot;wrap&quot;&gt;
                &lt;p class=&quot;content&quot;&gt;
                    我是文字随便几行我是文字随便几行我是文字随便几行我是文字随便几行我是文字随便几行我是文字随便几行
                    &lt;a href=&quot;http://www.xiaoqiang.org/css/text-wrap-and-vertical-align-center.html&quot; title=&quot;固定宽度的文字自动换行并垂直剧中&quot;&gt;固定宽度的文字自动换行并垂直剧中&lt;/a&gt;
                &lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;div class=&quot;box&quot;&gt;

            &lt;div class=&quot;wrap&quot;&gt;
                &lt;p class=&quot;content&quot;&gt;
                    是文字随便几行我是文字随便几行我是文字随便几行我是文字随便几行我是文字随便几行我是文字随便几行是文字随便几行我是文字随便几行我是文字随便几行我是文字随便几行我是文字随便几行我是文字随便几行是文字随便几行我是文字随便几行我是文字随便几行我是文字随便几行我是文字随便几行我是文字随便几行
                &lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
</pre>
<p>试试看：<a title="固定宽度的文字自动换行并垂直剧中" href="http://www.xiaoqiang.org/demo/align-center/text-v-center.html" target="_blank">固定宽度的文字自动换行并垂直剧中</a></p>
<blockquote><p>2011.10.10更新，参照<a title="垂直居中的几种实现方法 " href="http://sofish.de/1909" target="_blank">http://sofish.de/1909</a>修正IE7bug</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaoqiang.org/css/text-wrap-and-vertical-align-center.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>渐进增强的重构实践</title>
		<link>http://www.xiaoqiang.org/css/progressive-enhancement-rebuild.html</link>
		<comments>http://www.xiaoqiang.org/css/progressive-enhancement-rebuild.html#comments</comments>
		<pubDate>Thu, 28 Jul 2011 09:10:04 +0000</pubDate>
		<dc:creator>小强</dc:creator>
				<category><![CDATA[Css]]></category>
		<category><![CDATA[渐进增强]]></category>
		<category><![CDATA[重构]]></category>

		<guid isPermaLink="false">http://www.xiaoqiang.org/?p=411</guid>
		<description><![CDATA[渐进增强(Progressive Enhancement) 上图来自第六届D2前端技术论坛王啟恩/Adam Wang的演讲稿，渐进增强的理念区别于优雅降级更加关注于内容，然后再锦上添花。 文件结构 根据模块化的思想，将目录划分为html，css，image三大部分。 css部署如图： base.css放置的是reset，clearfix等基础类和工具类； globa.css放置的是布局样式，包括header，footer等样式；  mod文件夹下面放置的模块，组件的样式； 如果是大型团队合作，建议将模块粒度分的更细，比如man-630模块建立一个文件夹，里面有一个mn630-base.css的基础类，然后其他子模块继承基础类做扩展； 这里我们把main-630.css做成一个大模块，其他以此类推，例如dialog.css是弹出层模块，button.css是按钮模块。 html部署如图： mod文件夹下面放的是模块的代码片段集合。如果有可能尽可能粒度划分的更细，因为这些都是代码片段，希望以后有工具做到代码片段和css的自动载入; col-230-710.html是布局模块，已经完成了基础布局; template文件夹下面放的是产出物，其实就是一些模块的拼合。只要模块写的够好这块工作就很好做了。 image部署如图： 图片文件夹的部署和css部署是对应的，base和global的前景图和背景图放在base文件夹里面。 用作例子的示例图片放在data里面比如，头像之类的 第三方和icon放在icon的文件夹中 Mod文件夹中放的是模块所需要的前景图和背景图，小图标用sprite合并到base中 html5和css3 介绍一个html5工具，html5-boilerplate这个工具整合了js框架modernizr和Respond.js。modernizr是对浏览器支持html5和css做检测和对IE支持部分html5元素。Respond主要是让css支持min/max-width CSS3 Media Queries。简单的说html5-boilerplate就是一个可以让你的网站使用html5和css3在个平台和各终端（包括手机浏览器）都有不错表现的组合。有时间的同学可以看看，我也汉化过一部分，暂时还未全部完成。 国内有基于这个组合的应用，但是好像也未完全按照他的做法去实践，例如zhihu.com，yupoo.com 这次我并未选择这个框架，原因有两个（1）加入2个js框架成本太高。（2）采用 Modernizr的条件注释: &#60;!--[if lt IE 7]&#62;&#60;html class="no-js ie ie6" lang="zh"&#62;&#60;![endif]--&#62; &#60;!--[if IE 7]&#62;&#60;html &#8230; <a href="http://www.xiaoqiang.org/css/progressive-enhancement-rebuild.html">更多内容 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>渐进增强(Progressive Enhancement)</h3>
<p style="text-align: center;"><a class="lightbox" href="http://www.xiaoqiang.org/wp-content/uploads/2011/07/escalator.jpg"><img class="aligncenter size-medium wp-image-414" title="escalator" src="http://www.xiaoqiang.org/wp-content/uploads/2011/07/escalator-300x201.jpg" alt="电扶梯永远不会坏" width="300" height="201" /></a></p>
<p>上图来自<a title="第六届D2前端技术论坛" href="http://www.d2forum.org/" target="_blank">第六届D2前端技术论坛</a>王啟恩/Adam Wang的演讲稿，<strong>渐进增强</strong>的理念区别于<strong>优雅降级</strong>更加关注于内容，然后再锦上添花。</p>
<p><span id="more-411"></span></p>
<h3>文件结构</h3>
<p>根据模块化的思想，将目录划分为html，css，image三大部分。</p>
<p><strong>css部署如图：</strong></p>
<p style="text-align: center;"><a class="lightbox" href="http://www.xiaoqiang.org/wp-content/uploads/2011/07/css.jpg"><img class="aligncenter size-full wp-image-418" title="css" src="http://www.xiaoqiang.org/wp-content/uploads/2011/07/css.jpg" alt="css部署图" width="259" height="223" /></a></p>
<ol>
<li>base.css放置的是reset，clearfix等基础类和工具类；</li>
<li>globa.css放置的是布局样式，包括header，footer等样式；</li>
<li> mod文件夹下面放置的模块，组件的样式；</li>
<li>如果是大型团队合作，建议将模块粒度分的更细，比如man-630模块建立一个文件夹，里面有一个mn630-base.css的基础类，然后其他子模块继承基础类做扩展；</li>
<li>这里我们把main-630.css做成一个大模块，其他以此类推，例如dialog.css是弹出层模块，button.css是按钮模块。</li>
</ol>
<p><strong>html部署如图：</strong></p>
<p style="text-align: center;"><a class="lightbox" href="http://www.xiaoqiang.org/wp-content/uploads/2011/07/html.jpg"><img class="aligncenter size-full wp-image-419" title="html" src="http://www.xiaoqiang.org/wp-content/uploads/2011/07/html.jpg" alt="html部署图" width="299" height="311" /></a></p>
<ol>
<li>mod文件夹下面放的是模块的代码片段集合。如果有可能尽可能粒度划分的更细，因为这些都是代码片段，希望以后有工具做到代码片段和css的自动载入;</li>
<li>col-230-710.html是布局模块，已经完成了基础布局;</li>
<li>template文件夹下面放的是产出物，其实就是一些模块的拼合。只要模块写的够好这块工作就很好做了。</li>
</ol>
<p><strong>image部署如图：</strong></p>
<p style="text-align: center;"><a class="lightbox" href="http://www.xiaoqiang.org/wp-content/uploads/2011/07/image.jpg"><img class="aligncenter size-full wp-image-420" title="image" src="http://www.xiaoqiang.org/wp-content/uploads/2011/07/image.jpg" alt="image部署图" width="294" height="205" /></a></p>
<ol>
<li>图片文件夹的部署和css部署是对应的，base和global的前景图和背景图放在base文件夹里面。</li>
<li>用作例子的示例图片放在data里面比如，头像之类的</li>
<li>第三方和icon放在icon的文件夹中</li>
<li>Mod文件夹中放的是模块所需要的前景图和背景图，小图标用sprite合并到base中</li>
</ol>
<h3>html5和css3</h3>
<p>介绍一个html5工具，<a title="html5-boilerplate" href="http://html5boilerplate.com/" target="_blank">html5-boilerplate</a>这个工具整合了js框架modernizr和Respond.js。modernizr是对浏览器支持html5和css做检测和对IE支持部分html5元素。Respond主要是让css支持min/max-width CSS3 Media Queries。简单的说html5-boilerplate就是一个可以让你的网站使用html5和css3在个平台和各终端（包括手机浏览器）都有不错表现的组合。有时间的同学可以看看，我也汉化过一部分，暂时还未全部完成。<br />
国内有基于这个组合的应用，但是好像也未完全按照他的做法去实践，例如zhihu.com，yupoo.com<br />
这次我并未选择这个框架，原因有两个（1）加入2个js框架成本太高。（2）采用<br />
Modernizr的条件注释:</p>
<pre class="brush:php">&lt;!--[if lt IE 7]&gt;&lt;html class="no-js ie ie6" lang="zh"&gt;&lt;![endif]--&gt;
&lt;!--[if IE 7]&gt;&lt;html class="no-js ie ie7" lang="zh"&gt;&lt;![endif]--&gt;
&lt;!--[if IE 8]&gt;&lt;html class="no-js ie ie8" lang="zh"&gt;&lt;![endif]--&gt;
&lt;!--[if IE 9]&gt;&lt;html class="no-js ie ie9" lang="zh"&gt;&lt;![endif]--&gt;
&lt;!--[if gt IE 9]&gt;&lt;html class="no-js" lang="zh"&gt;&lt;!--&lt;![endif]--&gt;</pre>
<p>相当于写在条件注释下的标签要多寻找一层名字空间，根据css类名是从又向左解析的原则，这会带来更大的开销。 我参考的解决方案：</p>
<pre class="brush:php">&lt;!--[if lte IE 8]&gt;
&lt;script src="js/html5.js"&gt;&lt;/script&gt;
&lt;![endif]--&gt;</pre>
<p>具体代码：</p>
<pre class="brush:js">(function(){var html5_tag='section,article,aside,header,footer,nav,dialog,figure',arr=html5_tag.split(',');for(var i=arr.length;i--;){document.createElement(arr[i]);}})();</pre>
<p>然后在样式上添加：</p>
<pre class="brush:css">section, article, aside, header, footer, nav, dialog, figure {display: block; padding: 0; margin: 0;}</pre>
<p>这样就能使IE678支持html5的标签了<br />
css3的使用采用的仅仅限于</p>
<pre class="brush:css">.radius10{
	-moz-border-radius:10px;
	-webkit-border-radius:10px;
	border-radius:10px;
}
.box-shadow112-999{
	-moz-box-shadow:1px 1px 2px #999;
	-webkit-box-shadow:1px 1px 2px #999;
	box-shadow:1px 1px 2px #999;
}
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.55);</pre>
<p>为了尽可能保持视觉效果统一，没有使用html表单元素，例如input的type=”email”等，同时把chrome的焦点效果去掉了，同时把textarea的大小改变也去掉了，代码如下：</p>
<pre class="brush:css">
textarea {resize:none;}
input:focus,textarea:focus,select:focus {outline: none;}
</pre>
<p>命名规范和书写顺序<br />
<strong>css规范：</strong><br />
<em>文件命名根据所在模块，如：button.source.css；子模块则为button-submit.source.css，如果有可能，粒度划分尽可能细小；</em><br />
<em>模块类名则用mod-开头加上模块名，例如.mod-button相当于<strong>封装</strong>了一个button对象；</em><br />
<em>具体的元素就用mod对象的简写加上功能名，例如.bt-submit相当于<strong>继承</strong>了button的所有属性，html可能会像这样：&lt;a class=”mod-button” href=”#”&gt;提交&lt;/a&gt;（注：这里的继承并非css的继承，而是模拟面向对象的继承）;</em><br />
<em>可能会有不同的提交按钮，可以在这个按钮的基类里面加上其他特色的样式或者是覆盖一些样式形成<strong>多态</strong>效果，例如加上.bt-submit-login，.bt-submit-reg; html可能会像这样：</em></p>
<p><em></em>&lt;a class=”mod-button” href=”#”&gt;登录提交&lt;/a&gt;</p>
<p>&lt;a class=”mod-button” href=”#”&gt;注册提交&lt;/a&gt;</p>
<p><em>完整的css文件可能会如下button.source.css</em></p>
<pre class="brush:css">@charset"utf-8";
/**
 *name: button.css;
 *function: mod-button;
 *creator: xiaoqiang;
 *modify: none;
 *update-time: 2011-07-25;
**/
.mod-button{//button模块
		...
}
	.bt-submit{//submit基类
 		...
 	}
 		.sb-submit-login{//login派生类
 			...
 		}
 		.sb-submit-reg{//reg派生类
 			...
 		}</pre>
<p><em>模块按照层级关系缩进，书写顺序推荐：</em></p>
<ol>
<li>影响文档流的属性（比如：display, position, float, clear, visibility, table-layout等）；</li>
<li>自身盒模型的属性（比如：width, height, margin, padding, border等）；</li>
<li>排版相关属性（比如：font, line-height, text-align, text-indent, vertical-align等）；</li>
<li>装饰性属性（比如：color, background, opacity, cursor等）；</li>
<li>生成内容的属性（比如：content, list-style, quotes等）。</li>
</ol>
<p><em>base.source.css里面的东西：</em><br />
首先是base里面有reset，重置元素的初始值；<br />
然后是工具类，例如.clearfix,.tc{text-align:center;},.fl{float:left;}等等之类的；<br />
接下来是通用值，例如.c999{color:#999},.mt10{margin-top:10px;}, .z10{z-index:10;}等等。<br />
<em>global.source.css里面的东西：</em><br />
首先是grid相关的样式，如.w710{width:710px;} .wrap{width:960px;margin:0 auto;}等；<br />
然后是header，footer这些通用模块的样式。<br />
<em>尽量采用合理的布局方式，减少hack出现的几率；尽可能采用OOP的思想编写模块，达到最大通用性和可维护性；浮动都必须清除；动态加载的数据建议采用脱离文档流布局，避免数据插入的时候渲染整个页面；其他参照yahoo最佳实践。</em><br />
<strong>Html规范：</strong><br />
<em>布局模块放在page根目录，例如col-960.html,col-710-230.html；</em><br />
<em>模块文件放在mod下，按照模块命名分文件夹，如mod/button.html；</em><br />
<em>如果粒度更细可以划分为mod/button/bt-login.html；</em><br />
<em>一个html页面初始化可能是这个样子：</em></p>
<pre class="brush:php">&lt;!DOCTYPE html&gt;
&lt;html lang="zh-CN"&gt;
    &lt;head&gt;
        &lt;meta charset="utf-8" /&gt;
        &lt;meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /&gt;
        &lt;meta name="description" content=""&gt;
        &lt;title&gt;demo&lt;/title&gt;
		&lt;link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /&gt;
		&lt;link rel="stylesheet" href="css/base.css" type="text/css" media="screen" /&gt;
		&lt;!--[if lte IE 8]&gt;
		&lt;script src="js/html5.js"&gt;&lt;/script&gt;
		&lt;![endif]--&gt;
    &lt;/head&gt;
    &lt;body&gt;
    &lt;/body&gt;
&lt;/html&gt;</pre>
<p><em>模块（mod）注释采用结束符注释风格，如</em></p>
<pre class="brush:php">&lt;div class="wrap"&gt;
&lt;/div&gt;&lt;!--/.wrap--&gt;</pre>
<p><em>组装成的页面（template）注释采用双语，方便后台程序员对接页面，如</em></p>
<pre class="brush:php">&lt;!--wrap模块开始--&gt;
&lt;div class="wrap"&gt;
&lt;/div&gt;&lt;!--/.wrap--&gt;
&lt;!--wrap模块结束--&gt;</pre>
<p><em>标签都用小写，都必须闭合，按照正确的嵌套原则，语义化的结构。尽量使用文字和代码来实现页面效果。</em><br />
<em>所有a标签都必须加上title，所有img标签都必须加上alt提示。前端开发是良心事业，为了照顾盲人朋友，请尽量遵守Guide to the Section 508 Standards for Electronic and Information Technology等可用性原则。有兴趣可以使用<a title="争渡读屏软件" href="http://www.zdsr.net/" target="_blank">争渡读屏软件</a>体验一下盲人上网的感觉。</em></p>
<h3>发布相关</h3>
<ol>
<li>把能合并的小图标合并成sprite</li>
<li>把name.source.css的css源文件压缩成name.css</li>
<li>页面使用minify等合并工具合并css</li>
</ol>
<h3>延伸阅读</h3>
<ol>
<li><a title="(译)理解“渐进增强(Progressive Enhancement)”" href="http://ued.taobao.com/blog/2008/10/09/understanding-progressiveen-hancement-chs-translation/" target="_blank">(译)理解“渐进增强(Progressive Enhancement)”</a></li>
<li><a title="页面重构中的模块化设计系列文章" href="http://www.cssforest.org/blog/index.php?id=161" target="_blank">页面重构中的模块化设计系列文章</a></li>
<li><a title="html5-boilerplate模板" href="http://html5boilerplate.com/" target="_blank">html5-boilerplate模板</a></li>
<li><a title="【译文】Modernizr——为HTML5和CSS3而生！" href="http://bbs.blueidea.com/thread-3014642-1-1.html" target="_blank">【译文】Modernizr——为HTML5和CSS3而生！</a></li>
<li><a title="Respond.js: Fast CSS3 Media Queries for Internet Explorer 6-8 and more" href="http://filamentgroup.com/lab/respondjs_fast_css3_media_queries_for_internet_explorer_6_8_and_more/" target="_blank">Respond.js: Fast CSS3 Media Queries for Internet Explorer 6-8 and more</a></li>
<li><a title="2011彩票首页开发实践" href="http://ued.taobao.com/blog/2011/05/13/2011-taobao-lottery-index-dev/" target="_blank">2011彩票首页开发实践</a></li>
<li><a title="第六届D2论坛主题演讲视频资料" href="http://www.d2forum.org/2011/07/25/%e7%ac%ac%e5%85%ad%e5%b1%8ad2%e8%ae%ba%e5%9d%9b%e4%b8%bb%e9%a2%98%e6%bc%94%e8%ae%b2%e8%a7%86%e9%a2%91%e8%b5%84%e6%96%99%ef%bc%88%e6%a5%bc%e4%b8%8b%e4%bc%9a%e5%9c%ba%ef%bc%89/" target="_blank">第六届D2论坛主题演讲视频资料</a></li>
</ol>
<h3>感谢</h3>
<ol>
<li>感谢产品经理对新技术的理解和对IE下直角，非半透明等各种效果的容忍；</li>
<li>感谢领导对新的开发模式的信任；</li>
<li>感谢同事对新模式的认可和建议，并和我一起完成了这个产品的实践。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaoqiang.org/css/progressive-enhancement-rebuild.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>font简写规则</title>
		<link>http://www.xiaoqiang.org/css/font_css.html</link>
		<comments>http://www.xiaoqiang.org/css/font_css.html#comments</comments>
		<pubDate>Wed, 23 Mar 2011 07:07:19 +0000</pubDate>
		<dc:creator>小强</dc:creator>
				<category><![CDATA[Css]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[font]]></category>

		<guid isPermaLink="false">http://www.xiaoqiang.org/?p=375</guid>
		<description><![CDATA[看到一个阿里的考题，仔细查了下font的缩写规则。有点特殊，所以总结了一下。 CSS 2.1 Specification关于font的值定义如下： [ [ &#60;'font-style'&#62; &#124;&#124; &#60;'font-variant'&#62; &#124;&#124; &#60;'font-weight'&#62; ]? &#60;&#8217;font-size&#8217;&#62; [ / &#60;'line-height'&#62; ]? &#60;&#8217;font-family&#8217;&#62; ] &#124; caption &#124; icon &#124; menu &#124; message-box &#124; small-caption &#124; status-bar &#124; inherit 其中”&#124;”表示2个或者多个属性里面必须选一个。”&#124;&#124;”表示2个或者多个属性里面必须选1个或者多个。”?”表示前面的属性可以选或者不选”[]“为分组标记。 根据这个规则： A=[ &#60;'font-style'&#62; &#124;&#124; &#60;'font-variant'&#62; &#124;&#124; &#8230; <a href="http://www.xiaoqiang.org/css/font_css.html">更多内容 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>看到一个阿里的考题，仔细查了下font的缩写规则。有点特殊，所以总结了一下。<br />
<a title="CSS 2.1 Specification" href="http://www.w3.org/TR/CSS2/fonts.html" target="_blank">CSS 2.1 Specification</a>关于font的值定义如下：</p>
<blockquote><p>[ [ &lt;'font-style'&gt; || &lt;'font-variant'&gt; || &lt;'font-weight'&gt; ]? &lt;&#8217;font-size&#8217;&gt; [ / &lt;'line-height'&gt; ]? &lt;&#8217;font-family&#8217;&gt; ] | caption | icon | menu | message-box | small-caption | status-bar | inherit</p></blockquote>
<p>其中”|”表示2个或者多个属性里面必须选一个。”||”表示2个或者多个属性里面必须选1个或者多个。”?”表示前面的属性可以选或者不选”[]“为分组标记。<br />
根据这个规则：<br />
<strong>A</strong>=<strong>[ &lt;'font-style'&gt; || &lt;'font-variant'&gt; || &lt;'font-weight'&gt; ]?</strong>这三个属性可以不选或者多个+<strong>&lt;&#8217;font-size&#8217;&gt;</strong>必选项+<strong>[ / &lt;'line-height'&gt; ]?</strong> 可以选或者不选+<strong>&lt;&#8217;font-family&#8217;&gt;</strong>必选；<br />
<strong>A</strong> | caption | icon | menu | message-box | small-caption | status-bar | inherit<br />
其中写上一个。<br />
由于写后面的属性都是浏览器自带的样式，一般不能满足我们的需求，所以大部分还是选择<strong>A</strong>。<br />
<strong>A</strong>的缩写规则，最简短就是留下两个必须项：font-size+font-family<br />
还有一个特殊情况就是，如果只简写了，其他属性会被置为默认值：font:normal normal normal font-size/normal font-family;</p>
<p>所以写在font定义之前的font-style，font-variant，font-weight，line-height都会被font默认属性覆盖。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaoqiang.org/css/font_css.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>项目中的一些小技巧tips记录</title>
		<link>http://www.xiaoqiang.org/css/css-tips.html</link>
		<comments>http://www.xiaoqiang.org/css/css-tips.html#comments</comments>
		<pubDate>Mon, 07 Mar 2011 03:33:11 +0000</pubDate>
		<dc:creator>小强</dc:creator>
				<category><![CDATA[Css]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://www.xiaoqiang.org/?p=314</guid>
		<description><![CDATA[项目中遇到的一些小技巧，记录下来: 对非a标签添加伪类状态，例如span:hover{}。在采用偷天换日的手法a:hover span{}，解决IE6兼容只许添加一个a:hover{#:FFF;}触发IE6下a标签hover状态的haslayout即可。 选项卡去掉虚线框，IE解决方案：&#60;a href=”..” hidefocus=”true”&#62;；FF下解决方案：a:focus {outline:none;-moz-outline:none;} 内联元素居中水平采用父元素text-align:center;垂直采用height=line-height；块级元素水平居中自身margin：0 auto;text-align:left（对子内联元素不入侵）父元素text-align:center;块级元素可以采用text-indent调解左边距，比padding-left的好处在与不会影响固定宽度值 小图片存为gif文件比png-8要小，但是像css sprites这种颜色种类不多的大图片存为png-8要比gif要小，而且今天在蓝色理想看到别人用position做css sprites，还有人提出img sprites的想法，都很不错 内联元素用display:inline-block;比较给力，IE6下虽然不支持这个属性，但是会触发内联元素的haslayout，所以表象一样。块级元素就不行了 内联元素float:left;之后按理说应该表现为块级，但是文字在IE6和IE7下会填充上一行的空隙。解决方案white-space: pre; IE6下当高度小于font-size的时候，会被撑高。解决方案：font-size:1px; css在浏览器渲染过程中是从右向左读取的，尽量不用名字空间约束样式名，尽量不对元素直接写样式。]]></description>
			<content:encoded><![CDATA[<p>项目中遇到的一些小技巧，记录下来:</p>
<ol>
<li>对非a标签添加伪类状态，例如span:hover{}。在采用偷天换日的手法a:hover span{}，解决IE6兼容只许添加一个a:hover{#:FFF;}触发IE6下a标签hover状态的haslayout即可。</li>
<li>选项卡去掉虚线框，IE解决方案：&lt;a href=”..” hidefocus=”true”&gt;；FF下解决方案：a:focus {outline:none;-moz-outline:none;}</li>
<li>内联元素居中水平采用父元素text-align:center;垂直采用height=line-height；块级元素水平居中自身margin：0 auto;text-align:left（对子内联元素不入侵）父元素text-align:center;块级元素可以采用text-indent调解左边距，比padding-left的好处在与不会影响固定宽度值</li>
<li>小图片存为gif文件比png-8要小，但是像css sprites这种颜色种类不多的大图片存为png-8要比gif要小，而且今天在<a title="雪碧图实现另一法：用定位来模拟background-position" href="http://bbs.blueidea.com/thread-3014173-1-1.html" target="_blank">蓝色理想</a>看到别人用position做css sprites，还有人提出img sprites的想法，都很不错</li>
<li>内联元素用display:inline-block;比较给力，IE6下虽然不支持这个属性，但是会触发内联元素的haslayout，所以表象一样。块级元素就不行了</li>
<li>内联元素float:left;之后按理说应该表现为块级，但是文字在IE6和IE7下会填充上一行的空隙。解决方案white-space: pre;</li>
<li>IE6下当高度小于font-size的时候，会被撑高。解决方案：font-size:1px;</li>
<li>css在浏览器渲染过程中是从右向左读取的，尽量不用名字空间约束样式名，尽量不对元素直接写样式。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaoqiang.org/css/css-tips.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

