惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
T
Threat Research - Cisco Blogs
量子位
Last Week in AI
Last Week in AI
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
F
Fortinet All Blogs
爱范儿
爱范儿
D
Docker
人人都是产品经理
人人都是产品经理
S
SegmentFault 最新的问题
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
A
About on SuperTechFans
P
Proofpoint News Feed
博客园 - 司徒正美
Recent Announcements
Recent Announcements
I
InfoQ
Hugging Face - Blog
Hugging Face - Blog
Microsoft Security Blog
Microsoft Security Blog
有赞技术团队
有赞技术团队
Webroot Blog
Webroot Blog
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
SecWiki News
SecWiki News
Attack and Defense Labs
Attack and Defense Labs
Hacker News: Ask HN
Hacker News: Ask HN
AI
AI
博客园_首页
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Recorded Future
Recorded Future
T
Tailwind CSS Blog
MyScale Blog
MyScale Blog
T
Tenable Blog
宝玉的分享
宝玉的分享
Google Online Security Blog
Google Online Security Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
S
Secure Thoughts
C
Check Point Blog
S
Security Affairs
L
LINUX DO - 最新话题
大猫的无限游戏
大猫的无限游戏
Scott Helme
Scott Helme
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
月光博客
月光博客
Y
Y Combinator Blog

博客园 - 砖头

正则表达式查询 正则表达式类 Gridview BottomPagerRow添加自定义控件 httpModule过滤无后缀名的文件夹路径请求,iis6和iis7的设置 HttpModules 管道过滤 自定义页面 转:使用IIS 7.0 / 7.5 时配置HttpModules需要注意 HttpModules在IIS下不起作用 正则表达式的查找替换字符并批量修改文件名,非代码. Url中文参数传递乱码,表单提交中文乱码,2种解决方法 SQL2008 数据导入导出后,表架构所有者修改解决办法 CSS样式IE8兼容IE7 - 砖头 - 博客园 CSS样式防止图片撑开固定样式 - 砖头 - 博客园 document.body.appendChild 的问题 页面不刷新,表单提交到弹出窗口或Iframe - 砖头 - 博客园 JavaScript表单提交到弹出窗口(转帖) - 砖头 - 博客园 asp.net后台获取前台html控件的值的方法(转帖) 您对无法重新创建的表进行了更改或者启用了 阻止保存要求创建表的更改 配置SQL用户访问指定表,指定列 sql server 代理权限问题 编译工程文件后运行,出现找不到“XXX.dll”组件
转载:兼容各类浏览器的CSS Hack技巧
砖头 · 2010-09-07 · via 博客园 - 砖头

由于不同的浏览器,比如IE6、IE7、IE8、Firefox等对CSS的解析不一样,因此会导致生成的页面效果不一致,得不到我们所需要的页面效果。这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果。这个针对不同的浏览器写不同的CSS code的过程,就叫CSS hack。

1.区别IE6与Firefox

程序代码 程序代码

background:orange;
*background:blue;

程序代码 程序代码

background:green !important;
background:blue;

程序代码 程序代码

background:orange;
*background:green;

程序代码 程序代码

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

5.分别针对Firefox、IE8、IE7和IE6显示值

程序代码 程序代码

selector{  
property:value; /* 所有浏览器 */  
property:value\9; /* 所有IE浏览器 */  
+property:value; /* IE7 */  
_property:value; /* IE6 */  
}

IE都能识别*,标准浏览器(如FF)不能识别*
IE6能识别*,但不能识别!important
IE7能识别*,也能识别!important
FF不能识别*,但能识别!important

于是大家还可以这样来区分IE6,IE7,Firefox :

程序代码 程序代码

background:orange;
*background:green;
_background:blue;

不管是什么方法,书写的顺序都是firefox的写在前面,IE7的写在中间,IE6的写在最后面。

以下两种方法几乎能解决现今所有HACK

1 -   !important

随着IE7对!important的支持, !important 方法现在只针对IE6的HACK.(注意写法.记得该声明位置需要提前.)

程序代码 程序代码

#wrapper
{
width: 100px!important; /* IE7+FF */
width: 80px; /* IE6 */
}

2 - IE6/IE77对FireFox

*+html *html 是IE特有的标签,Firefox 暂不支持。而*+html 又为 IE7特有标签。

注意:*+html 对IE7的HACK 必须保证HTML顶部有如下声明:

程序代码 程序代码

!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"

其他兼容技巧

1 - Firefox下给 DIV 设置 padding 后会导致 widthheight 增加,但IE不会(可用!important解决)。

2 - 居中问题

1)垂直居中:将 line-height 设置为 当前 DIV 相同的高度, 再通过 vertical-align: middle

2)水平居中: margin: 0 auto;(当然不是万能);

3)若需给 a 标签内内容加上 样式, 需要设置 display: block;(常见于导航标签);

4)Firefox 和 IE 对 BOX 理解的差异导致相差 2px ,还有设为 float的DIV在IE下 margin加倍等问题;

5)ul 标签在 Firefox 下面默认有 list-style padding .,最好事先声明, 以避免不必要的麻烦;

6)作为外部 wrapper 的 DIV 不要定死高度, 最好还加上 overflow: hidden;以达到高度自适应;

针对Firefox IE6 IE7的CSS样式

现在大部分都是用!important来Hack,对于IE6和Firefox测试可以正常显示,但是IE7对!important可以正确解释,会导致页面没按要求显示!找到一个针对IE7不错的Hack方式就是使用*+html,应该没有问题了。

程序代码 程序代码

#kyogo { color: #333; } /* Moz */
* html #kyogo { color: #666; } /* IE6 */
*+html #kyogo { color: #999; } /* IE7 */

那么在Firefox下字体颜色显示为#333,IE6下字体颜色显示为#666,IE7下字体颜色显示为#999

CSS布局中的居中问题

主要的样式定义如下:

程序代码 程序代码

body {
     text-align: center;
}

#center {
     margin: 0 auto;
}

首先在父级元素定义text-align: center;这个的意思就是在父级元素内的内容居中;对于IE这样设定就已经可以了。但在Mozilla中不能居中。解决办法就是在子元素定义时候设定时再加上margin: 0 auto; 来实现兼容。

需要说明的是,如果你想用这个方法使整个页面要居中,建议不要套在一个DIV里,你可以依次拆出多个DIV,只要在每个拆出的DIV里定义margin: 0 auto; 就可以了。

浮动IE产生的双倍距离

程序代码 程序代码

#box{
float:left; width:100px;
margin:0 0 0 100px; //这种情况之下IE会产生200px的距离
display:inline; //使浮动忽略
}

这里细说一下blockinline两个元素,Block元素的特点是:总是在新行上开始,高度,宽度,行高,边距都可以控制(块元素);Inline元素的特点是:和其他元素在同一行上;

IE与宽度和高度的问题

IE不认得min-这个定义,但实际上它把正常的widthheight当作有min的情况来使。这样问题就大了,如果只用宽度和高度,正常的浏览器里这两个值就不会变,如果只用min-widthmin-height的话,IE下面根本等于没有设置宽度和高度。

比如要设置背景图片,这个宽度是比较重要的。要解决这个问题,可以这样:

程序代码 程序代码

#box{
     width: 80px;
     height: 35px;}

html>body #box{
     width: auto;
     height: auto;
     min-width: 80px;
     min-height: 35px;
}

DIV浮动IE文本产生3象素的BUG

左边对象浮动,右边采用外补丁的左边距来定位,右边对象内的文本会离左边有3px的间距。

程序代码 程序代码

#box{
     float:left;
     width:800px;
}

#left{
     float:left;
     width:50%;
}

#right{
     width:50%;
}

*html #left{
   margin-right:-3px; //这句是关键
}

属性选择器(这个不能算是兼容,是隐藏CSS的一个BUG)

程序代码 程序代码

p[id]{}div[id]{}

这个对于IE6.0和IE6.0以下的版本都隐藏,FF和OPera作用属性选择器和子选择器还是有区别的,子选择器的范围从形式来说缩小了,属性选择器的范围比较大,如p[id]中,所有p标签中有id的都是同样式的。

IE捉迷藏的问题

当DIV应用复杂的时候每个栏中又有一些链接,DIV等这个时候容易发生捉迷藏的问题。有些内容显示不出来,当鼠标选择这个区域是发现内容确实在页面。

解决办法:对#layout使用line-height属性 或者给#layout使用固定高和宽。页面结构尽量简单。