近期看了几篇关于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. 解决mysql - 1577 问题

    背景:通过navicat连接mysql使用events时报如下错误 登录mysql查询event mysql> use zhk4; Database changed mysql> show ...

  2. Python爬虫-代理池-爬取代理入库并测试代理可用性

    目的:建立自己的代理池.可以添加新的代理网站爬虫,可以测试代理对某一网址的适用性,可以提供获取代理的 API. 整个流程:爬取代理 ----> 将代理存入数据库并设置分数 ----> 从数 ...

  3. Farthest Nodes in a Tree (求树的直径)

    题目链接,密码:hpu Description Given a tree (a connected graph with no cycles), you have to find the farthe ...

  4. LeetCode01--两数之和

    ''' 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给 ...

  5. IDEA maven 无法加载已经安装的模块依赖包

    今天打包一直报如下错误 Reactor Summary for freechain-op 1.0.1.OP: [INFO] [INFO] freechain-op .................. ...

  6. maven+Hibernate+mysql环境搭建

    项目结构图如下 一,首先是添加依赖pom.xml <?xml version="1.0" encoding="UTF-8"?> <projec ...

  7. zoj 1251 Box of Bricks

    Box of Bricks Time Limit: 2 Seconds      Memory Limit: 65536 KB Little Bob likes playing with his bo ...

  8. [luoguP3606] [USACO17JAN]Building a Tall Barn建谷仓(贪心 + 线段树)

    传送门 把线段都读进来然后排序,先按右端点为第一关键字从小到大排序,后按左端点为第二关键字从小到大排序. 注意不能先按左端点后按右端点排序,否则会出现大包小的情况,如下: —————— ———  — ...

  9. ORACLE备份、恢复、常用查询

    --第一,启动服务,(如果数据库处于启动状态,那么略过这一步) 打开命令行执行以下语句  net start OracleServiceORCL  net start  OracleOraDb10g_ ...

  10. strcpy c标准库函数

    C语言标准库函数strcpy,把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间. 已知strcpy函数的原型是: char *strcpy(char *dst, const ...