近期看了几篇关于css hack的文章,认为不错整理一下。

css hack非常多人不理解它的原理,事实上大家都知道对于不同的浏览器,CSS的解析程度不一样。因此会导致生成的页面效果不一样;特别是对于IE这样的蛇精病的浏览器来说。这个时候我们就须要针对不同的浏览器(特别是IE)去写不同的CSS,这个过程就叫做css
hack.而不是那个hack,可以说css hack是一种借助于不同浏览器之间规则标准的不同而实现兼容性的一种“曲线救国”的策略,尽管如此。我们还是希望世界大同。有个统一的标准可以统一浏览器规范 T T

css hack主要根据的是

1.浏览器对CSS的支持及解析结果不一样;

2.CSS中的优先级的关系。

经常使用的CSS hack 有三种方式,CSS 内部hack、选择器hack、HTML 头部引用,当中第一种最经常使用。

A.css 内部hack:

CSS 内部hack 语法是这种
selector{<hack>?property:value<hack>?;} 比方IE6能识别下划线"_"和星号"*",IE7能识别星号"*",但不能识别下划线"_",而firefox两个都不能认识。

对于书写顺序的关系,通常是将识别能力强的浏览器的CSS写在后面。

<style>
div{
background:green;/*forfirefox*/
*background:red;/*forIE6 IE7*/
}
</style>

这种话就成功对IE6,7 做了一次hack;

再比方,“!important”的写法仅仅有IE6不能识别,其他版本号IE及现代浏览器都能够识别

其他版本号IE及现代浏览器都能够识别。还有“+”、“\0”、”\9” 等,这里盗图一张:

  IE6 IE7 IE8 IE9 IE10 现代浏览器
*        
+          
-          
!important  
\9  
\0      
\9\0        

B.选择器hack

选择器hanck主要是针对IE浏览器,事实上并不怎么经常使用

语法是这种:<hack> selector{ sRules }

再盗图一张:

  IE6 IE7 IE8 IE9 IE10 现代浏览器
*html          
*+html          
:root          

针对IE9的hack能够这么写

:root .test
{
background-color:green;
}

C.HTML头部引用

HTML头部引用就比較特殊了。类似于程序语句,仅仅能使用在HTML文件中,而不能在CSS文件中使用。而且仅仅有在IE浏览器下才干运行。在其它浏览器以下会被当做凝视视而不见。

比方:

<!– 默认先调用css.css样式表 –>

<link rel="stylesheet" type="text/css" href="css.css" />
<!–[if IE 7]>
<!– 假设IE浏览器版是7,调用ie7.css样式表 –>
<link rel="stylesheet" type="text/css" href="ie7.css" />
<![endif]–>
<!–[if lte IE 6]>
<!– 假设IE浏览器版本号小于等于6,调用ie.css样式表 –>
<link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]–>

注:

lte:就是Less than or equal to的简写,也就是小于或等于的意思。

lt :就是Less than的简写,也就是小于的意思。

gte:就是Greater than or equal to的简写。也就是大于或等于的意思。

gt :就是Greater than的简写,也就是大于的意思。

! :就是不等于的意思,跟javascript里的不等于推断符同样。



关于各种主流浏览器hack的使用方法能够參考这篇文章(目測须要hack的IE比較多):

http://www.w3cplus.com/css/browser-hacks.html

还有专门罗列hack情况的站点: http://browserhacks.com/

css hack原理的更多相关文章

  1. 【10】css hack原理及常用hack

    [10]css hack原理及常用hack 原理:利用不同浏览器对CSS的支持和解析结果不一样编写针对特定浏览器样式.常见的hack有1)属性hack.2)选择器hack.3)IE条件注释 IE条件注 ...

  2. css hack原理及常用hack

    原理:利用不同浏览器对CSS的支持和解析结果不一样编写针对特定浏览器样式.常见的hack有1)属性hack.2)选择器hack.3)IE条件注释 IE条件注释:适用于[IE5, IE9]常见格式如下 ...

  3. Web前端技术研究:Css hack技术---令人沮丧的技术

    我最近想好好整理下csshack技术,但是结果很沮丧,下面我将我最初写的笔记和大家分享下. 我在单位整理的研究笔记: 不同的浏览器对某些CSS代码解析会存在一定的差异,因此就会导致不同浏览器下给用户展 ...

  4. css hack的理解

    什么是CSS hack 由于不同厂商的流览器或某浏览器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),对CSS的支持.解析不一样,导致在不同浏览器的环境中呈 ...

  5. css3复杂选择器+内容生成+Css Hack

    1.复杂选择器2.内容生成3.多列4.CSS Hack(浏览器兼容性)=======================================1.复杂选择器 1.兄弟选择器 1.特点: 1.通过 ...

  6. CSS hack方式一览【转】

    做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现.我个人是不太推荐使用hack的,要知道 ...

  7. CSS选择器、CSS hack及CSS执行效率

    主要内容: 1.CSS选择器.优先级与匹配原理 2. CSS 引入的方式有哪些 ? link 和 @import 的区别是 ? 3.CSS hack 4.如何书高效CSS  一.CSS选择器.优先级与 ...

  8. css样式 --- CSS hack

    前端样式,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现.我个人是不太推荐使用hack的,要知道一 ...

  9. 史上最全的CSS hack方式一览

    做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现.我个人是不太推荐使用hack的,要知道 ...

随机推荐

  1. linux中的vi命令

    linux的重要的几个命令如下: ①,光标的操作 1,gg,G,nG,:n gg移到文档的开头一行,G移动到最后一行,nG移动到第n行,到指定的行. 2,H,M,L 光标分别移动到这个界面的最上边,中 ...

  2. Vmware改成bridge方式联网

    1.在使用桥接之前,先在真机的'更改适配器设置中'禁用vmnet1和vmnet8 2.在VMware中定义一个桥接器 3.设置这个Linux虚拟机使用前一个步骤定义的桥接器--进入桥接器选择界面 4. ...

  3. linux赋权限

    给该文件夹赋权限命令 chmod u+x service-hcm-job.sh

  4. linux shell管道和xargs的区别

    如上图,加了xargs的话相当于将上一个操作的结果作为命令执行前的操作,不加的话直接先把后面的命令运行一遍再操作

  5. centos 7 下vnc弹出窗口太小解决方法

    使用以下参数启动 : vncserver :2 -geometry 800x600

  6. GO 语言周报【七月第 1 期】

    TIOBE 七月排名 Go 进入前十 TIOBE 七月头条:Go 语言达到历史最高并进入前十.对于 Go 语言来说,这是一个里程碑时刻,我们可以更大胆地想象,它下一步的发展会达到怎样的高度.Go 是否 ...

  7. [luoguP1627] 中位数(模拟?)

    传送门 水题,怎么评到这个难度的? #include <cstdio> #include <iostream> #define N 200001 int n, b, p, an ...

  8. 手动扩大栈内存,让AC无忧

    http://blog.csdn.net/shahdza/article/details/6586430 还在因为 怕 g++ 提交时间很慢,但是用C++ 交又怕栈溢出??? 我们都知道,如果代码里有 ...

  9. /etc/fstab readyonly 解决办法

    阿里云主机切换地区强制升级后,“新的磁盘盘符识别为vdb1,但是在/etc/fstab中记录的挂载信息还是旧的xvdb1,导致磁盘挂载失败” 机子启动出错了. 按提示 输入 root的密码,进入以Re ...

  10. Foundation框架的一些实用方法:替换字符串,去空格,反转

    //定义一个可变字符串, Format后面可以跟字符串类型,也可以传入C语言的字符串数组 NSMutableString *str = [NSMutableString stringWithForma ...