<?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>Just think it &#187; CSS</title>
	<atom:link href="http://www.wenan8.com/blog/archives/tag/css/feed" rel="self" type="application/rss+xml" />
	<link>http://www.wenan8.com/blog</link>
	<description>每天跑跑步有益身体健康哦！ ^_^</description>
	<lastBuildDate>Fri, 05 Aug 2011 03:01:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>CSS隐藏文字</title>
		<link>http://www.wenan8.com/blog/archives/321</link>
		<comments>http://www.wenan8.com/blog/archives/321#comments</comments>
		<pubDate>Thu, 09 Sep 2010 01:43:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[WEB标准]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[隐藏文字]]></category>

		<guid isPermaLink="false">http://www.wenan8.com/blog/?p=321</guid>
		<description><![CDATA[(1) text-indent:-9999px; 定义 text-indent 属性规定文本块中首行文本的缩进。 注释：允许使用负值。如果使用负值，那么首行会被缩进到左边。 注意：在 CSS 2.1 之前，text-indent 总是继承计算值，而不是声明值。 使用text-indent:-9999px; 可以偏移掉文本，但是这个属性只支持block块级元素，而我们想要偏移掉a上的文字时就不行了，当然，你也可以 a{display:block} 但是 a 后的元素就被换成下一行了,更当然，也可以继续转换,但是就有些&#8217;冗余&#8217;了。 (2) line-height:0; font-size:0; overflow:hidden; 能够很好的隐藏掉文字。 (3) display:none; 当然，这要给文字加个额外的标签了。]]></description>
			<content:encoded><![CDATA[<p>(1)<br />
text-indent:-9999px;<br />
定义<br />
text-indent 属性规定文本块中首行文本的缩进。<br />
注释：允许使用负值。如果使用负值，那么首行会被缩进到左边。<br />
注意：在 CSS 2.1 之前，text-indent 总是继承计算值，而不是声明值。<br />
使用text-indent:-9999px; 可以偏移掉文本，但是这个属性只支持block块级元素，而我们想要偏移掉a上的文字时就不行了，当然，你也可以<br />
a{display:block} 但是 a 后的元素就被换成下一行了,更当然，也可以继续转换,但是就有些&#8217;冗余&#8217;了。<br />
(2)<br />
line-height:0;<br />
font-size:0;<br />
overflow:hidden;<br />
能够很好的隐藏掉文字。<br />
(3)<br />
display:none;<br />
当然，这要给文字加个额外的标签了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wenan8.com/blog/archives/321/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>高效整洁CSS代码原则 [转]</title>
		<link>http://www.wenan8.com/blog/archives/308</link>
		<comments>http://www.wenan8.com/blog/archives/308#comments</comments>
		<pubDate>Mon, 05 Jul 2010 01:46:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[WEB标准]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[高效]]></category>

		<guid isPermaLink="false">http://www.wenan8.com/blog/?p=308</guid>
		<description><![CDATA[CSS学起来并不难，但在大型项目中，就变得难以管理，特别是不同的人在CSS书写风格上稍有不同，团队上就更加难以沟通，为此总结了一些如何实现高效整洁的CSS代码原则： 1. 使用Reset但并非全局Reset 　　不同浏览器元素的默认属性有所不同，使用Reset可重置浏览器元素的一些默认属性，以达到浏览器的兼容。但需要注意的是，请不要使用全局Reset： view sourceprint?*{ margin:0; padding:0; } 　　这不仅仅因为它是缓慢和低效率的方法，而且还会导致一些不必要的元素也重置了外边距和内边距。在此建议参考YUI Reset和Eric Meyer的做法。我跟Eric Meyer的观点相同，Reset并不是一成不变的，具体还需要根据项目的不同需求做适当的修改，以达到浏览器的兼容和操作上的便利性。我使用的Reset如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 &#60;p&#62;view sourceprint?/** 清除内外边距 **/&#60;/p&#62; &#60;p&#62;body, h1, h2, h3, h4, h5, h6, hr, p,&#60;/p&#62; &#60;p&#62;blockquote, /* [...]]]></description>
			<content:encoded><![CDATA[<p>CSS学起来并不难，但在大型项目中，就变得难以管理，特别是不同的人在CSS书写风格上稍有不同，团队上就更加难以沟通，为此总结了一些如何实现高效整洁的CSS代码原则：<br />
<span style="color: #000000;"><strong>1. 使用Reset但并非全局Reset</strong><br />
</span>　　不同浏览器元素的默认属性有所不同，使用Reset可重置浏览器元素的一些默认属性，以达到浏览器的兼容。但需要注意的是，请不要使用全局Reset：<br />
view sourceprint?*{ margin:0; padding:0; }</p>
<p>　　这不仅仅因为它是缓慢和低效率的方法，而且还会导致一些不必要的元素也重置了外边距和内边距。在此建议参考YUI Reset和Eric Meyer的做法。我跟Eric Meyer的观点相同，Reset并不是一成不变的，具体还需要根据项目的不同需求做适当的修改，以达到浏览器的兼容和操作上的便利性。我使用的Reset如下:</p>
<p><span id="more-308"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;p&gt;view sourceprint?/** 清除内外边距 **/&lt;/p&gt;
&lt;p&gt;body, h1, h2, h3, h4, h5, h6, hr, p,&lt;/p&gt;
&lt;p&gt;blockquote, /* structural elements 结构元素 */&lt;/p&gt;
&lt;p&gt;dl, dt, dd, ul, ol, li, /* list elements 列表元素 */&lt;/p&gt;
&lt;p&gt;pre, /* text formatting elements 文本格式元素 */&lt;/p&gt;
&lt;p&gt;form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */&lt;/p&gt;
&lt;p&gt;th, td, /* table elements 表格元素 */&lt;/p&gt;
&lt;p&gt;img/* img elements 图片元素 */{&lt;/p&gt;
&lt;p&gt;border:medium none;&lt;/p&gt;
&lt;p&gt;margin: 0;&lt;/p&gt;
&lt;p&gt;padding: 0;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;/** 设置默认字体 **/&lt;/p&gt;
&lt;p&gt;body,button, input, select, textarea {&lt;/p&gt;
&lt;p&gt;font: 12px/1.5 '宋体',tahoma, Srial, helvetica, sans-serif;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;h1, h2, h3, h4, h5, h6 { font-size: 100%; }&lt;/p&gt;
&lt;p&gt;em{font-style:normal;}&lt;/p&gt;
&lt;p&gt;/** 重置列表元素 **/&lt;/p&gt;
&lt;p&gt;ul, ol { list-style: none; }&lt;/p&gt;
&lt;p&gt;/** 重置超链接元素 **/&lt;/p&gt;
&lt;p&gt;a { text-decoration: none; color:#333;}&lt;/p&gt;
&lt;p&gt;a:hover { text-decoration: underline; color:#F40; }&lt;/p&gt;
&lt;p&gt;/** 重置图片元素 **/&lt;/p&gt;
&lt;p&gt;img{ border:0px;}&lt;/p&gt;
&lt;p&gt;/** 重置表格元素 **/&lt;/p&gt;
&lt;p&gt;table { border-collapse: collapse; border-spacing: 0; }&lt;/p&gt;</pre></td></tr></table></div>

<p><strong>2. 良好的命名习惯</strong></p>
<p>　　无疑乱七八糟或者无语义命名的代码，谁看了都会抓狂。就像这样的代码：</p>
<p>view sourceprint?.aaabb{margin:2px;color:red;}</p>
<p>　　我想即使是初学者，也不至于会在实际项目中如此命名一个class，但有没有想过这样的代码同样是很有问题的：</p>
<p>view sourceprint?</p>
<h1>My name is <span class="red blod">Wiky</span></h1>
<p>　　问题在于如果你需要把所有原本红色的字体改成蓝色，那修改后就样式就会变成：</p>
<p>view sourceprint?.red{color:bule;}</p>
<p>　　这样的命名就会很让人费解，同样的命名为.leftBar的侧边栏如果需要修改成右侧边栏也会很麻烦。所以，请不要使用元素的特性（颜色，位置，大小等）来命名一个class或id，您可以选择意义的命名如：#navigation{&#8230;}，.sidebar{&#8230;}，.postwrap{&#8230;}</p>
<p>　　这样，无论你如何修改定义这些class或id的样式，都不影响它跟HTML元素间的联系。</p>
<p>　　另外还有一种情况，一些固定的样式，定义后就不会修改的了，那你命名时就不用担忧刚刚说的那种情况，如</p>
<p>view sourceprint?.alignleft{float:left;margin-right:20px;}</p>
<p>.alignright{float:right;text-align:right;margin-left:20px;}</p>
<p>.clear{clear:both;text-indent:-9999px;}</p>
<p>　　那么对于这样一个段落</p>
<p>view sourceprint?</p>
<p class="alignleft">我是一个段落！</p>
<p>　　如果需要把这个段落由原先的左对齐修改为右对齐，那么只需要修改它的className就为alignright就可以了。</p>
<p><strong>3. 代码缩写</strong></p>
<p>　　CSS代码缩写可以提高你写代码的速度，精简你的代码量。在CSS里面有不少可以缩写的属性，包括margin，padding，border，font，background和颜色值等，如果您学会了代码缩写，原本这样的代码：</p>
<p>view sourceprint?li{</p>
<p>font-family:Arial, Helvetica, sans-serif;</p>
<p>font-size: 1.2em;</p>
<p>line-height: 1.4em;</p>
<p>padding-top:5px;</p>
<p>padding-bottom:10px;</p>
<p>padding-left:5px;</p>
<p>}</p>
<p>就可以缩写为：</p>
<p>view sourceprint?li{</p>
<p>font: 1.2em/1.4em Arial, Helvetica, sans-serif;</p>
<p>padding:5px 0 10px 5px;</p>
<p>}</p>
<p>　　如果您想更了解这些属性要怎么缩写，可以参考《常用CSS缩写语法总结》或者下载CSS-Shorthand-Cheat-Sheet.pdf 。</p>
<p><strong>4. 利用CSS继承</strong></p>
<p>　　如果页面中父元素的多个子元素使用相同的样式，那最好把他们相同的样式定义在其父元素上，让它们继承这些CSS样式。这样你可以很好的维护你的代码，并且还可以减少代码量。那么本来这样的代码：</p>
<p>view sourceprint?#container li{ font-family:Georgia, serif; }</p>
<p>#container p{ font-family:Georgia, serif; }</p>
<p>#container h1{font-family:Georgia, serif; }</p>
<p>就可以简写成：</p>
<p>view sourceprint?#container{ font-family:Georgia, serif; }</p>
<p><strong>5. 使用多重选择器</strong></p>
<p>　　你可以合并多个CSS选择器为一个，如果他们有共同的样式的话。这样做不但代码简洁且可为你节省时间和空间。如：</p>
<p>view sourceprint?h1{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }</p>
<p>h2{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }</p>
<p>h3{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }</p>
<p>可以合并为</p>
<p>view sourceprint?h1, h2, h3{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }</p>
<p><strong>6. 适当的代码注释</strong></p>
<p>代码注释可以让别人更容易读懂你的代码，且合理的组织代码注释，可使得结构更加清晰。你可以选择做的样式表的开始添加目录:</p>
<p>view sourceprint?/*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>1. Reset</p>
<p>2. Header</p>
<p>3. Content</p>
<p>4. SideBar</p>
<p>5. Footer</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; */</p>
<p>　　如此你代码的结构就一目了然，你可以容易的查找和修改代码。</p>
<p>　　而对于代码的主内容，也应适当的加以划分，甚至在有必要的地方在对代码加以注释说明，这样也有利于团队开发:</p>
<p>view sourceprint?/*** Header ***/</p>
<p>#header{ height:145px; position:relative; }</p>
<p>#header h1{ width:324px; margin:45px 0 0 20px; float:left; height:72px;}</p>
<p>/*** Content ***/</p>
<p>#content{ background:#fff; width:650px; float:left; min-height:600px; overflow:hidden;}</p>
<p>#content h1{color:#F00}/* 设置字体颜色 */</p>
<p>#content .posts{ overflow:hidden; }</p>
<p>#content .recent{ margin-bottom:20px; border-bottom:1px solid #f3f3f3; position:relative; overflow:hidden; }</p>
<p>/*** Footer ***/</p>
<p>#footer{ clear:both; padding:50px 5px 0; overflow:hidden;}</p>
<p>#footer h4{ color:#b99d7f; font-family:Arial, Helvetica, sans-serif; font-size:1.1em; }</p>
<p><strong>7. 给你的CSS代码排序</strong></p>
<p>如果代码中的属性都能按照字母排序，那查找修改的时候就能更加快速:</p>
<p>view sourceprint?/*** 样式属性按字母排序 ***/</p>
<p>div{</p>
<p>background-color:#3399cc;</p>
<p>color:#666;</p>
<p>font:1.2em/1.4em Arial, Helvetica, sans-serif;</p>
<p>height:300px;</p>
<p>margin:10px 5px;</p>
<p>padding:5px 0 10px 5px;</p>
<p>width:30%;</p>
<p>z-index:10;</p>
<p>}</p>
<p><strong>8. 保持CSS的可读性</strong></p>
<p>　　书写可读的CSS将会使得更容易查找和修改样式。对于以下两种情况，哪种可读性更高，我想不言而明。</p>
<p>view sourceprint?/*** 每个样式属性写一行 ***/</p>
<p>div{</p>
<p>background-color:#3399cc;</p>
<p>color:#666;</p>
<p>font: 1.2em/1.4em Arial, Helvetica, sans-serif;</p>
<p>height:300px;</p>
<p>margin:10px 5px;</p>
<p>padding:5px 0 10px 5px;</p>
<p>width:30%;</p>
<p>z-index:10;</p>
<p>}</p>
<p>/*** 所有的样式属性写在同一行 ***/</p>
<p>div{ background-color:#3399cc; color:#666; font: 1.2em/1.4em Arial, Helvetica, sans-serif; height:300px; margin:10px 5px; padding:5px 0 10px 5px; width:30%; z-index:10; }</p>
<p>当对于一些样式属性较少的选择器，我会写到一行：</p>
<p>view sourceprint?/*** 选择器属性少的写在同一行 ***/</p>
<p>div{ background-color:#3399cc; color:#666;}</p>
<p>对于这个规则并非硬性规定，但无论您采用哪种写法，我的建议是始终保持代码一致。属性多的分行写，属性少于3个可以写一行。</p>
<p><strong>9. 选择更优的样式属性值</strong></p>
<p>　　CSS中有些属性采用不同的属性值，虽然达到的效果差不多，当性能上却存在着差异，如</p>
<p>　　区别在于border:0把border设为0px，虽然在页面上看不见，但按border默认值理解，浏览器依然对border-width/border-color进行了渲染，即已经占用了内存值。<br />
　　而border:none把border设为“none”即没有，浏览器解析“none”时将不作出渲染动作，即不会消耗内存值。所以建议使用border:none;</p>
<p>　　同样的，display:none隐藏对象浏览器不作渲染，不占用内存。而visibility:hidden则会。</p>
<p><strong>10. 使用&lt;link&gt;代替@import</strong></p>
<p>首先，@import不属于XHTML标签，也不是Web标准的一部分，它对于较早期的浏览器兼容也不高，并且对于网站的性能有某些负面的影响。具体可以参考《高性能网站设计：不要使用@import》。所以，请避免使用@import</p>
<p><strong>11. 使用外部样式表</strong></p>
<p>　　这个原则始终是一个很好的设计实践。不单可以更易于维护修改，更重要的是使用外部文件可以提高页面速度，因为CSS文件都能在浏览器中产生缓存。内置在HTML文档中的CSS则会在每次请求中随HTML文档重新下载。所以，在实际应用中，没有必要把CSS代码内置在HTML文档中：</p>
<p>view sourceprint?<!--</p>
<p>#container{ .. }</p>
<p>#sidebar{ .. }</p>
<p>&#8211;></p>
<p>或</p>
<li style="font-family:Arial, helvetica, sans-serif; color:#666; ">而是使用<br />
导入外部样式表：</p>
<p>view sourceprint?</p>
<p><strong>12. 避免使用CSS表达式（Expression）</strong></p>
<p>　　CSS表达式是动态设置CSS属性的强大（但危险）方法。Internet Explorer从第5个版本开始支持CSS表达式。下面的例子中，使用CSS表达式可以实现隔一个小时切换一次背景颜色：</p>
<p>view sourceprint?background-color: expression( (new Date()).getHours()%2 ? &#8220;#B8D4FF&#8221; : &#8220;#F08A00&#8243; );</p>
<p>　　如上所示，expression中使用了JavaScript表达式。CSS属性根据JavaScript表达式的计算结果来设置。</p>
<p>　　表达式的问题就在于它的计算频率要比我们想象的多。不仅仅是在页面显示和缩放时，就是在页面滚动、乃至移动鼠标时都会要重新计算一次。给CSS表达式增加一个计数器可以跟踪表达式的计算频率。在页面中随便移动鼠标都可以轻松达到10000次以上的计算量。</p>
<p>　　如果必须使用CSS表达式，一定要记住它们要计算成千上万次并且可能会对你页面的性能产生影响。所以，在非不得已，请避免使用CSS表达式。</p>
<p><strong>13. 代码压缩</strong></p>
<p>　　当你决定把网站项目部署到网络上，那你就要考虑对CSS进行压缩，出去注释和空格，以使得网页加载得更快。压缩您的代码，可以采用一些工具，如YUI Compressor</p>
<p>利用它可精简CSS代码，减少文件大小，以获得更高的加载速度。</p>
<p><strong>14. 总结</strong></p>
<p>　　在本文中，我力图更详尽的总结书写更高效的CSS代码的原则，但鉴于本人见识和精力有限，我还是希望这些原则能帮助您更好的书写和管理您的CSS代码，不知您又是如何书写CSS的，是否也有一些想要分享的技巧？给我留言吧谢谢~</p>
<p>原文地址：http://www.cnblogs.com/wiky/articles/better-css-code.html</li>
]]></content:encoded>
			<wfw:commentRss>http://www.wenan8.com/blog/archives/308/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>编写跨浏览器兼容的 CSS 代码的金科玉律</title>
		<link>http://www.wenan8.com/blog/archives/288</link>
		<comments>http://www.wenan8.com/blog/archives/288#comments</comments>
		<pubDate>Mon, 14 Jun 2010 07:52:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[WEB标准]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[兼容性]]></category>
		<category><![CDATA[跨浏览器]]></category>

		<guid isPermaLink="false">http://www.wenan8.com/blog/?p=288</guid>
		<description><![CDATA[作为 Web 设计师，你的网站在各种浏览器中有完全一样的表现是很多人的目标，然而这是一个永远无法真正实现的目标，很多人认为，完美的跨 浏览器兼容并不必要，这样说虽然没错，但在很多情形，一种近似的兼容还是很容易实现的，本文讲的是各种跨浏览器兼容的 CSS 编码准则和技巧。 理解 CSS 盒子模型 如果你想实现不需要很多奇巧淫技的跨浏览器兼容的 CSS 代码，透彻地理解 CSS 盒子模型是首要事情，CSS 盒子模型并不难，且基本支持所有浏览器，除了某些特定条件下的 IE 浏览器。 CSS 盒子模型负责处理以下事情: # 一个 blcok （区块）级对象占据多大的空间 # 该对象的边界，留白 # 盒子的尺寸 # 盒子与页面其它元素的相对位置 CSS 盒子模型有以下准则: # Block （区块）对象都是矩形 （事实上所有对象都如此） # 其尺寸由 width, height, padding, borders, 以及 margins 决定 # 如果不设置高度，该盒子的高度将自动适应其包含的内容，加上留白等（除非使用了 float） # 如果不设置宽度，一个非 float 型盒子水平上将充满其父容器（扣除父容器的留白） 处理 block 级对象时，必须注意以下事项: # [...]]]></description>
			<content:encoded><![CDATA[<p>作为 Web 设计师，你的网站在各种浏览器中有完全一样的表现是很多人的目标，然而这是一个永远无法真正实现的目标，很多人认为，完美的跨 浏览器兼容并不必要，这样说虽然没错，但在很多情形，一种近似的兼容还是很容易实现的，本文讲的是各种跨浏览器兼容的 CSS 编码准则和技巧。<br />
<a href="http://www.wenan8.com/blog/wp-content/uploads/2010/06/1.jpg"><img src="http://www.wenan8.com/blog/wp-content/uploads/2010/06/1-300x300.jpg" alt="css" title="css" width="300" height="300" class="aligncenter size-medium wp-image-287" /></a><br />
理解 CSS 盒子模型<br />
如果你想实现不需要很多奇巧淫技的跨浏览器兼容的 CSS 代码，透彻地理解 CSS 盒子模型是首要事情，CSS 盒子模型并不难，且基本支持所有浏览器，除了某些特定条件下的 IE 浏览器。</p>
<p>CSS 盒子模型负责处理以下事情:<br />
# 一个 blcok （区块）级对象占据多大的空间<br />
# 该对象的边界，留白<br />
# 盒子的尺寸<br />
# 盒子与页面其它元素的相对位置</p>
<p>CSS 盒子模型有以下准则:<br />
# Block （区块）对象都是矩形 （事实上所有对象都如此）<br />
# 其尺寸由 width, height, padding, borders, 以及 margins 决定<br />
# 如果不设置高度，该盒子的高度将自动适应其包含的内容，加上留白等（除非使用了 float）<br />
# 如果不设置宽度，一个非 float 型盒子水平上将充满其父容器（扣除父容器的留白）</p>
<p>处理 block 级对象时，必须注意以下事项:<br />
# 如果一个盒子的宽度设置为 100%，它就不能再设置 margins, padding, 和 borders，否则会撑破其父容器<br />
# 垂直毗邻的 margin 会引起复杂的坍塌问题，导致布局问题（比如两个垂直毗邻的 Block 对象，上面的对象的 bottom-margin 为 40，下面的对象的 top-margin 为 20，则两个对象的间距将是 40，而不是 60 ）<br />
# 拥有相对位置和绝对位置的对象，拥有不同的行为<br />
<a href="http://www.wenan8.com/blog/wp-content/uploads/2010/06/2.gif"><img src="http://www.wenan8.com/blog/wp-content/uploads/2010/06/2-300x162.gif" alt="css box" title="css box" width="300" height="162" class="aligncenter size-medium wp-image-289" /></a><br />
在 Firefox 的 Firebug 中显示的盒子模型<br />
<span id="more-288"></span><br />
理解 block 级和 inline 级 对象的区别<br />
这个看似简单的问题事如果能透彻地理解，会受益匪浅。</p>
<p>下图讲解了 block 级对象和 inline 级对象的区别:</p>
<p><img src="http://www.unixcom.cn/attachments/forumid_19/10060914570303e3a1ccb29628.jpg" alt="inline-block" /><br />
下面是 block 级对象和 inline 级对象的基本区别:<br />
# Block 级对象会自然地水平充满其父容器，因此没有必要为之设置 100% 宽度属性<br />
# Block 级对象的起始摆放位置是其父容器的左上边界，并顺排在其前面的兄弟 Block 对象的下方（除非设置 float 或绝对位置）<br />
# Inline 级对象会忽略其宽度和高度设置<br />
# Inline 级对象会随着文字排版，并受排版属性的影响（如 white-space, font-size, letter-spacing）<br />
# Inline 级对象可以使用 vertical-align 属性控制其垂直对齐，block 级对象不可以<br />
# Inline 级对象的下方会保留一些自然的空间，以适应字母 g 一类的会向下探出的笔画<br />
# 一个设置为 float 的 inline 对象将变成 block 对象<br />
理解 Floating 和 Clearing 属性<br />
实现多栏排版的最好方法是使用 float 属性，float 也是一个将使你受益匪浅的属性。一个 float 对象可以居左或居右，一个设置为 float 的对象，将根据设置的方向，左移或右移到其父容器的边界，或其前面的 float 对象的边界，而紧随其后的非 float 对象或内容，则包围在其相反的方向。<br />
<img src="http://www.unixcom.cn/attachments/forumid_19/1006091458488a3335cdf93796.jpg" alt="block" /><br />
以下是使用 float 和 clear 属性的一些重要准则:<br />
# 一个 float 对象，将从其置身的 block 级非 float 内容流中跳出，换句话说，如果你要将一个 box 向左边 float，它后面的 block 级非 float 对象会显示到下方，inline 级内容会在旁边包围<br />
# 要让一段内容从一侧包围一个 float 对象，这段内容必须要么是 inline 级的，要么也设置为相同方向的 float<br />
# 一个 float 对象，如果没有设置宽度，则会自动缩成其包含的内容的宽度，因此最好为 float 对象明确设置宽度<br />
# 如果一个 block 对象包含 float 子对象，会出现本文中阐述的问题。<br />
# 一个设置了 clear 属性的对象，将不会包围其前面的 float 对象<br />
# 一个既设置了 clear 又设置了 float 属性的对象，只有 clear:left 属性生效，clear:right 不起作用<br />
首先使用 IE 进行测试<br />
虽然我们都痛恨 IE6 和 IE7，但当你开始一个新项目的时候，最好还是首先针对这两种浏览器进行测试，否则，如果你在设计在后期才想起针对 IE6 和 IE7 进行测试，将出现以下问题：<br />
# 你将不得不使用一些奇巧淫技，甚至使用独立的 IE6/7 CSS，导致 CSS 文件臃肿。<br />
# 某些地方的布局将不得不重新设计<br />
# 会增加测试的时间<br />
# 你的布局在 IE/6/7 中和其它浏览器中不一样</p>
<p>如果你设计的是个人项目，Web 程序等，则不建议你针对旧版本 IE 做太多工作，而对一些公司类站点，它的用户群中有大量 IE 用户，这些技巧会让你避免大量的头痛。如果将 IE 的问题归类为 IE 的 BUG 而不去处理，会带来很多负面的影响，和 IE 和平共处是 Web 开发与设计者不可逃避的现实。</p>
<p>在译者注： IE6/7 仍有大量用户基础的国内（感谢中行，建行，农行，工行，以及各级政府网站），忽视这两种浏览器是极不明智的，首先针对 IE6/7 进行设计是一种很好的方法，一般来说，在IE6/7 通过测试的站点，在 Firefox，Chrome，Safari，Opera 等标准浏览器面前基本不会出现问题，前提是，你的 CSS 设计是基于 W3C 标准的。<br />
# IE 浏览器最常见的问题 IE6 中不可滥用 float，否则会带来内容消失以及文字重复等稀奇古怪的问题<br />
# IE6 中，float 对象，在 float 方向的那边，会出现双倍 margin，将 display 设置为 inline 会解决这个问题<br />
# IE6/7 中，一个没有直接或间接设置 hasLayout 的对象，会发生各种稀奇古怪的问题 （译者注：对这类问题，zoom 这个 css 属性可以帮很大的忙，将 zoom 设置为除了 normal 之外的其它值，可以迫使一个对象 hasLayout 同时不影响这个对象的任何视觉外观）<br />
# IE6 不支持 min-width, max-width, min-height, max-height 一类的属性<br />
# IE6 不支持固定位置背景图<br />
# IE6/7 不支持很多 display 属性值（如 inline-table, table-cell, table-row）<br />
# IE6 中，只有 a 这个对象才可以使用 :hover 这个伪类<br />
# IE 的某些版本对某些 CSS 选择器支持很少（如属性选择器，子对象选择器）<br />
# IE6~8 对 CSS3 的支持很有限 (不过有一些变通方法)<br />
永远不要指望在所有浏览器中都一模一样<br />
在不同浏览器实现相同的体验个功能是可能的，实现近似像素级的一致外观也是可能的，但永远不要指望一模一样。<br />
Form 控件在不同浏览器显示总是不同</p>
<p>以下是 Facebook 首页中的 select 控件，在5种不同浏览器的显示差异（基于 Adobe’s Browserlab 截图）<br />
<img src="http://www.unixcom.cn/attachments/forumid_19/1006091458d5eacabe1d58b253.jpg" alt="form" /><br />
某些 Form 控件，如果要求必须跨浏览器一致，可以找到变通办法，如，可以使用图片 替代 submit 按钮，但有一些控件，比如 radio，select， textarea，文件选择框，是永远都不可能一模一样的。<br />
字体的表现都有差异<br />
先不谈有的字体在有的系统中根本不存在，即时存在，它们在不同系统的渲染效果也不完全一样，比如，Windows ClearType 支持 IE7，但不支持 IE6，导致同一个字体在 IE7 和 IE6 有不同的样子。<br />
<img src="http://www.unixcom.cn/attachments/forumid_19/1006091458ffe2696d1525a4e9.jpg" alt="img" /><br />
A List Apart’s 文章字体在 IE6 and IE7 中的区别</p>
<p>使用 CSS 清零<br />
使用 CSS 清零（CSS Reset）是实现跨浏览器兼容的灵丹妙药，CSS 清零可以消除不同浏览器对 margin，padding 这些属性的默认表现，你可以更容易控制诸如对齐，间隙等等问题。推荐使用 Eric Meyer’s CSS 清零代码。<br />
<img src="http://www.unixcom.cn/attachments/forumid_19/10060914585d5dbb04efb5bb44.jpg" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wenan8.com/blog/archives/288/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

