<?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>wlsy &#187; CSS hack</title>
	<atom:link href="http://wlsy.me/tag/css-hack/feed/" rel="self" type="application/rss+xml" />
	<link>http://wlsy.me</link>
	<description>当时的月亮 今天的阳光</description>
	<lastBuildDate>Tue, 24 Aug 2010 02:48:23 +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>用CSS hack来区分浏览器</title>
		<link>http://wlsy.me/1459/</link>
		<comments>http://wlsy.me/1459/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 15:41:03 +0000</pubDate>
		<dc:creator>wlsy</dc:creator>
				<category><![CDATA[Web前端]]></category>
		<category><![CDATA[CSS hack]]></category>
		<category><![CDATA[标准]]></category>

		<guid isPermaLink="false">http://www.g9net.com/2009/03/28/css-hack-to-make-the-best-use-of-the-browser-to-distinguish-between.html</guid>
		<description><![CDATA[先来说说什么是CSS hack。这年头浏览器品种多种多样，每个浏览器的脾气也各不相同，那怎么让他们和睦相处呢？那就通过CSS hack来。其实更简单点说，根据每个浏览器的对CSS的解析不同，对不同浏览器写不同的CSS代码就叫CSS hack。因为CSS hack的写法很多，本文例子只针对Windows平台下的IE6，IE7，IE8，Firefox以及chrome（内核跟safari一样，所以应该不会有太多差别），好吧开始了。

针对单对象不同属性值的不同写法，用”_，*(像#,+等符合，以下都用*举例),!important”来区分
简要概述下：”_(下划线)”这个只针对IE6（其实6以下的版本也可以，不过不考虑了），“*”这个IE6,IE7浏览器都能识别，而!important这个除了IE6其他的都能支持。看表：




IE6
IE7
IE8
Firefox
Chrome


_
√
x
x
x
x


*
√
√
x
x
x


!important
x
√
√
√
√



如表可知（IE8的出现导致了用*来区分IE和其他的浏览器失效），如果我们要区分IE6就可以这样：


div{ background:orange !important;background:green;}
/*或者这样*/
div{ background:orange;_background:green;}


上面那张表已经被我验证了应该不会有错。在书写浏览器要把那些比较现代的浏览器（像Fx，chrome）写在前面。在举个例子：


background:orange;*background:green !important;*background:blue;


解释下：浏览器从左边开始执行，第一条background:orange；所有浏览器都能识别，第二条*background:green !important；这里有用到两个来区分*来表示这能被IE6和IE7支持，!important不能被IE6识别，而最后面*background:blue;IE6,和IE7都能识别，但是因为！important优先级更高，所以整句语句用来区分Fx,IE7,IE6。
针对一个对象的不同写法
还是用例子来说话


* html div{ background:green;}/*这个只有IE6支持*/




*+html div{ background:green;}/*这个只有IE7支持*/




html*div{ background:green;}/*这个只有IE6，IE7支持*/




body&#62;div{ background:green;}/*只有IE6不支持*/


用条件注释区分不同文件。
比如这样：


&#60;!--[if IE]&#62;
你可以在这里放些东西，或者一些特定的style或javascript而且只有是ie浏览器才能执行。
&#60;![endif]--&#62;


另外也可以定义IE的版本比如&#60;!—[if IE 8]&#62;一些内容&#60;![endif]&#8211;&#62;，这样也就只在IE8下生效，其他的类似。另外还有一些比如低于等于（lte）或高于等于(gte)的参数可以参照：http://msdn.microsoft.com/en-us/library/ms537512.aspx
不过这些条件注释只针对IE有效，如果要针对其他浏览器，可以用Conditional-CSS这个需要给服务器安装脚本，延伸阅读：http://www.qianduan.net/?p=6166
总结：其实还有一张很详细的表格，不过大部分都用不到，也会比较容易混淆，感兴趣的可以看看： 。CSS hack 其实还有很多，比如之前的清除浮动也用到了伪类。不过在书写代码的时候还是要尽量少用CSS hack，按标准来写，迫不得已的在用CSS hack。
本文经我都测试通过，如果还有错误或者一些其他实用的hack也可以留言。
]]></description>
			<content:encoded><![CDATA[<p>先来说说什么是CSS hack。这年头浏览器品种多种多样，每个浏览器的脾气也各不相同，那怎么让他们和睦相处呢？那就通过CSS hack来。其实更简单点说，根据每个浏览器的对CSS的解析不同，对不同浏览器写不同的CSS代码就叫CSS hack。因为CSS hack的写法很多，本文例子只针对Windows平台下的IE6，IE7，IE8，Firefox以及chrome（内核跟safari一样，所以应该不会有太多差别），好吧开始了。</p>
<p><span id="more-1459"></span></p>
<p><strong>针对单对象不同属性值的不同写法，用”_，*(像#,+等符合，以下都用*举例),!important”来区分</strong></p>
<p>简要概述下：”_(下划线)”这个只针对IE6（其实6以下的版本也可以，不过不考虑了），“*”这个IE6,IE7浏览器都能识别，而!important这个除了IE6其他的都能支持。看表：</p>
<table style="text-align: center" border="1" cellspacing="0" cellpadding="2" width="600">
<tbody>
<tr>
<td width="100" valign="top"></td>
<td width="100" valign="top">IE6</td>
<td width="100" valign="top">IE7</td>
<td width="100" valign="top">IE8</td>
<td width="100" valign="top">Firefox</td>
<td width="100" valign="top">Chrome</td>
</tr>
<tr>
<td width="100" valign="top">_</td>
<td width="100" valign="top">√</td>
<td width="100" valign="top">x</td>
<td width="100" valign="top">x</td>
<td width="100" valign="top">x</td>
<td width="100" valign="top">x</td>
</tr>
<tr>
<td width="100" valign="top">*</td>
<td width="100" valign="top">√</td>
<td width="100" valign="top">√</td>
<td width="100" valign="top">x</td>
<td width="100" valign="top">x</td>
<td width="100" valign="top">x</td>
</tr>
<tr>
<td width="100" valign="top">!important</td>
<td width="100" valign="top">x</td>
<td width="100" valign="top">√</td>
<td width="100" valign="top">√</td>
<td width="100" valign="top">√</td>
<td width="100" valign="top">√</td>
</tr>
</tbody>
</table>
<p>如表可知（IE8的出现导致了用*来区分IE和其他的浏览器失效），<strong>如果我们要区分IE6就可以这样</strong>：</p>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; line-height: 12pt; background-color: #f4f4f4; width: 97.5%; font-family: consolas,'Courier New',courier,monospace; max-height: 200px; font-size: 8pt; cursor: text;">
<div style="border-style: none; padding: 0px; overflow: visible; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; line-height: 12pt; background-color: white; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;"><span style="color: #0000ff">div</span>{ <span style="color: #0000ff">background</span>:orange <span style="color: #006080">!important;</span><span style="color: #0000ff">background</span>:<span style="color: #006080">green;</span>}</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;"><span style="color: #008000">/*或者这样*/</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; line-height: 12pt; background-color: white; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;"><span style="color: #0000ff">div</span>{ <span style="color: #0000ff">background</span>:<span style="color: #006080">orange;</span>_background:<span style="color: #006080">green;</span>}</pre>
</div>
</div>
<p>上面那张表已经被我验证了应该不会有错。在书写浏览器要把那些比较现代的浏览器（像Fx，chrome）写在前面。在举个例子：</p>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; line-height: 12pt; background-color: #f4f4f4; width: 97.5%; font-family: consolas,'Courier New',courier,monospace; max-height: 200px; font-size: 8pt; cursor: text;">
<div style="border-style: none; padding: 0px; overflow: visible; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; line-height: 12pt; background-color: white; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;"><span style="color: #0000ff">background</span>:<span style="color: #006080">orange;</span>*<span style="color: #0000ff">background</span>:green <span style="color: #006080">!important;</span>*<span style="color: #0000ff">background</span>:<span style="color: #006080">blue;</span></pre>
</div>
</div>
<p>解释下：浏览器从左边开始执行，第一条background:orange；所有浏览器都能识别，第二条*background:green !important；这里有用到两个来区分*来表示这能被IE6和IE7支持，!important不能被IE6识别，而最后面*background:blue;IE6,和IE7都能识别，但是因为！important优先级更高，所以整句语句用来区分Fx,IE7,IE6。</p>
<p><strong>针对一个对象的不同写法</strong></p>
<p>还是用例子来说话</p>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; line-height: 12pt; background-color: #f4f4f4; width: 97.5%; font-family: consolas,'Courier New',courier,monospace; max-height: 200px; font-size: 8pt; cursor: text;">
<div style="border-style: none; padding: 0px; overflow: visible; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; line-height: 12pt; background-color: white; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;">* <span style="color: #0000ff">html</span> <span style="color: #0000ff">div</span>{ <span style="color: #0000ff">background</span>:<span style="color: #006080">green;</span>}<span style="color: #008000">/*这个只有IE6支持*/</span></pre>
</div>
</div>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; line-height: 12pt; background-color: #f4f4f4; width: 97.5%; font-family: consolas,'Courier New',courier,monospace; max-height: 200px; font-size: 8pt; cursor: text;">
<div style="border-style: none; padding: 0px; overflow: visible; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; line-height: 12pt; background-color: white; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;">*+<span style="color: #0000ff">html</span> <span style="color: #0000ff">div</span>{ <span style="color: #0000ff">background</span>:<span style="color: #006080">green;</span>}<span style="color: #008000">/*这个只有IE7支持*/</span></pre>
</div>
</div>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; line-height: 12pt; background-color: #f4f4f4; width: 97.5%; font-family: consolas,'Courier New',courier,monospace; max-height: 200px; font-size: 8pt; cursor: text;">
<div style="border-style: none; padding: 0px; overflow: visible; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; line-height: 12pt; background-color: white; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;"><span style="color: #0000ff">html</span>*<span style="color: #0000ff">div</span>{ <span style="color: #0000ff">background</span>:<span style="color: #006080">green;</span>}<span style="color: #008000">/*这个只有IE6，IE7支持*/</span></pre>
</div>
</div>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; line-height: 12pt; background-color: #f4f4f4; width: 97.5%; font-family: consolas,'Courier New',courier,monospace; max-height: 200px; font-size: 8pt; cursor: text;">
<div style="border-style: none; padding: 0px; overflow: visible; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; line-height: 12pt; background-color: white; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;"><span style="color: #0000ff">body</span><span style="color: #006080">&gt;</span><span style="color: #0000ff">div</span>{ <span style="color: #0000ff">background</span>:<span style="color: #006080">green;</span>}<span style="color: #008000">/*只有IE6不支持*/</span></pre>
</div>
</div>
<p><strong>用条件注释区分不同文件。</strong></p>
<p>比如这样：</p>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; line-height: 12pt; background-color: #f4f4f4; width: 97.5%; font-family: consolas,'Courier New',courier,monospace; max-height: 200px; font-size: 8pt; cursor: text;">
<div style="border-style: none; padding: 0px; overflow: visible; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; line-height: 12pt; background-color: white; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;"><span style="color: #006080">&lt;</span>!--[if IE]<span style="color: #006080">&gt;</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;">你可以在这里放些东西，或者一些特定的style或javascript而且只有是ie浏览器才能执行。</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; line-height: 12pt; background-color: white; width: 100%; font-family: consolas,'Courier New',courier,monospace; color: black; font-size: 8pt;"><span style="color: #006080">&lt;</span>![endif]--<span style="color: #006080">&gt;</span></pre>
</div>
</div>
<p>另外也可以定义IE的版本比如&lt;!—[if IE 8]&gt;一些内容&lt;![endif]&#8211;&gt;，这样也就只在IE8下生效，其他的类似。另外还有一些比如低于等于（lte）或高于等于(gte)的参数可以参照：<a title="http://msdn.microsoft.com/en-us/library/ms537512.aspx" href="http://msdn.microsoft.com/en-us/library/ms537512.aspx">http://msdn.microsoft.com/en-us/library/ms537512.aspx</a></p>
<p>不过这些条件注释只针对IE有效，如果要针对其他浏览器，可以用Conditional-CSS这个需要给服务器安装脚本，延伸阅读：<a title="http://www.qianduan.net/?p=6166" href="http://www.qianduan.net/?p=6166">http://www.qianduan.net/?p=6166</a></p>
<p>总结：其实还有一张很详细的表格，不过大部分都用不到，也会比较容易混淆，感兴趣的可以看看：<a href="http://www.g9net.com/wp-content/uploads/2009/03/css-hacke8a1a8.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="css_hacke8a1a8" src="http://www.g9net.com/wp-content/uploads/2009/03/css-hacke8a1a8-thumb.png" border="0" alt="css_hacke8a1a8" width="29" height="35" /></a> 。CSS hack 其实还有很多，比如之前的<a href="http://www.g9net.com/2009/01/21/css-clear-float.html">清除浮动</a>也用到了伪类。不过在书写代码的时候还是要尽量少用CSS hack，按标准来写，迫不得已的在用CSS hack。</p>
<p>本文经我都测试通过，如果还有错误或者一些其他实用的hack也可以留言。</p>
]]></content:encoded>
			<wfw:commentRss>http://wlsy.me/1459/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
