查看完整版本: CSS hacks与争议

jonewin 2007-11-27 16:34

CSS hacks与争议

[b]翻译说明[/b]:
这是Solid State Group网站上的一篇很友好的文章,解决了我在设计中遇到的很多问题,故在此我翻译其文,并对原作者表示非常感谢!
查看原文:[url=http://diger.cn/blog/?p=324][color=#0000ff]http://diger.cn/blog/?p=324[/color][/url]
英文地址:[url=http://www.solidstategroup.com/page/1592][color=#0000ff]http://www.solidstategroup.com/page/1592[/color][/url]

[b]1、说明本文阐述了8条我们发现的在用CSS设计中有用的解决方案。[/b]

[b]2、浏览器特定的选择器[/b]

当你想在一个浏览器里改变样式而不像在其他浏览器中改变时,这些选择器很有用。
IE6以下
   *html{}
IE 7 以下
*:first-child+html {} * html {}
只对IE 7
*:first-child+html {}
只对IE 7 和现代浏览器
html>body {}
只对现代浏览器(非IE 7)
html>/**/body {}
最新的Opera 9以下版本
html:first-child {}
Safari
html[xmlns*=”"] body:last-child {}
要使用这些选择器,请在样式前写下这些代码。例如:
#content-box {
width: 300px;
height: 150px;
}
* html #content-box {
width: 250px;
}
/* 重写上面的代码并且把宽度改为250PX
在IE6以下版本中适用。 */


[b]3、在IE6中使用透明PNG图片[/b]

IE6的一个很难处理的BUG就是它不支持透明PNG图片。
你可能需要用一个重写的CSS的滤镜来解决这个问题:
*html #image-style {
background-image: none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="fil
ename.png", sizingMethod="scale");
}


[b]4、去掉连接虚线框[/b]

当你点击链接时,Firefox会在链接周围产生一个虚线外框。
[img=250,104]http://www.blueidea.com/articleimg/2007/11/5068/01.gif[/img]
这个很好解决,只需在a标签中添加outline:none就可以了。
a{
   outline:none;
}


[b]5、对inline元素应用宽度。[/b]

如果你对一个inline元素使用宽度,它将只在IE6下起作用。
所以的HTML标签要么是Block的要么就是inline的。inline属性的标签有<span><a><strong>和<em>Block标签包括<div><p><h1><form>和<li>
你不能控制inilne标签的宽带,不过有一个方法是把标签属性从inline改为Block。
span{
   width:150px;
   display:block;
}
应用display:block能够把span标签变成block标签,从而控制它的宽度。

[b]6、使一个固定宽度的网站居中。[/b]

为了让你的网站在浏览器中居中,可以为最外层Div添加position:relative属性,然后将margin设为auto。
#wrapper {
margin: auto;
position: relative;
}


[b]7、图片替换技术[/b]

对于头部来说,永远是最好用文字而不是图片。在你必须要用图片的某个特殊地方最好使用隐藏文字的层的背景图片。这对于屏幕阅读和SEO非常有用,尽管依然使用很普通的文字,这可以联想到所有的优点。
HTML:
<h1><span>Main heading one</span></h1>
CSS:
h1 {
background: url(heading-image.gif) no-repeat;
}
h1 span {
position:absolute;
text-indent: -5000px;
}
正如你所见,我们对H1标签使用普通的HTML代码,用CSS来将图片替代文字。Text-indent把文字放到左边5000像素处,从而用户看不到它们。

[b]8、最小宽度[/b]

IE的另外一个Bug就是它不支持min-width属性。min-width确实非常有用,特别是对于100%宽度的可变模板来说,因为他告诉浏览器停止收缩。
对于除IE6以外的所有浏览器来说你只需min-width:xpx;例如:
.container {
min-width:300px;
}
要让这些在IE6下起作用的话你要添加额外的努力!你需要创建两个DIV,一个包含着另一个。
<div class=”container”>
<div class=”holder”>Content</div>
</div>
然后你需要设置外面层的min-width:
.container {
min-width:300px;
}
现在又要IE hack起作用了,你需要写下以下代码:
* html .container {
border-right: 300px solid #FFF;
}
* html .holder {
display: inline-block;
position: relative;
margin-right: -300px;
}
当浏览器窗口调整外层宽度来适应直到它缩小到border的宽度时,这个时候它就不能够在缩小了。而holder层也会停止收缩。外层的边框宽度变成了内层的最小宽度。

[b]9、隐藏水平滚动[/b]

要去除水平滚动条,可以在body中插入overflow-x:hidden属性。
body {
overflow-x: hidden;
}
这在你决意要用一个比浏览器款的图片或Flash时很有用。

hkysj 2008-1-6 09:43

受用了哦。哈哈。非常不错,ie的min-width确实恼火
我也写些我的心得吧。偶也只是闲扯一下。:D
FF opera     |        IE7.0         |        IE6.0   
#divname{}   *#divname{}     _*#divname{}
能不用hack就最好不用。。多写代码好累啊。

-------------------------------------------------------------------------------
然后去掉链接的虚线的话 。outline对IE6.0不起作用貌似
a{  blr:expression(this.onFocus=this.blur()); outline:none;}

--------------------------------------------------------------------------------
图片替换文本还有种写法(也许是很多种的一种:lol )
HTML:
<h1><span>Main heading one</span></h1>
CSS:
h1 {  display:block;
width: **px; height:**PX;
background: url(heading-image.gif) no-repeat;
}
h1 span { display:block; width:0px; height:0px; overflow:hidden;}

yulenice 2008-3-28 12:16

nice

zeming 2008-3-31 09:35

回复 2# 的帖子

尽量不要用css expression,对网站性能有影响,不推荐使用。
其实很多css hacks是可以避免使用。
我们一般使用css hacks是为了解决对浏览器的兼容性问题,而之所以出现兼容的问题,是因为各主流浏览器都有一套自己的css解析标准,主要体现在盒模型的算法上和布局的算法模式上。
开发中推荐用Firefox测试开发,一是FF对css2.0支持比较好,再就是有一个很实用的扩展Firebug,可以提高开发效率。

heeroyuyj 2008-4-2 22:34

如果对网页精益求精, 对细节注重, 那么 CSS Hack 会很自然的用的多, 如果觉得大致没有问题则可以, 那确实可以少写很多的 CSS Hack

bjfane 2008-4-23 11:54

图片替换文本还有种写法 盲人阅读机会用到, SEO也喜欢

bingxueling 2008-4-23 15:01

原来css高手也很多啊,学前辈学习!!!!:hug: :hug: :hug:

水牛仔 2008-4-23 16:43

*html
div {style:xxx;/*for firefox*/*style:yyy;*/*for ie6*/}
偶以前这么写,而且会很多

不过慢慢的发现有些东西不是一定要写HACK就能实现,
所以现在会尽量少写,

个人觉得,在兼容的基础上,能少则少....

linfanne 2008-4-23 17:31

同意楼上的,我现在基本就偶尔用一下!important这个,搞一下 象素差,别的基本不用,

[[i] 本帖最后由 linfanne 于 2008-4-23 17:33 编辑 [/i]]

soelf 2008-4-24 11:55

现在我连像素差都不想管了……IE6看起来是啥样就啥样吧……:(

高山 2008-6-24 17:56

好文章啊  我怎么才发现:lol :lol :lol

mhxm 2008-6-28 16:17

同意9楼!
只是局部使用!important,以兼容firefox!
毕竟现在IE用户最多,推荐FF老被别人笑话!
FF现在搞得也不厚道,广告太多,措辞比较流氓!影响推广!

我只是做完了用绿色版FF测试一下代码,局部添加!important,一般都能搞定!
上网很少用FF,一般用马桶“maxthon”,便、编页面用frontpage快速生成,更多使用editplus,关联常用的和自定义的模板和代码片段,很不错的东东,而且我连45个帮助之类的文件都关联在editplus里,一点工具栏编号就可启动,真是不错!

个人习惯,只做交流!
页: [1]
查看完整版本: CSS hacks与争议