用户使用的浏览器五花八门,我们要保证每一种浏览器都能兼容我们的代码,不能要求用户去改变浏览器,那么就得在我们的代码上下功夫。此时我们要用到hack。

HACK就是针对不同的浏览器写不同的HTML、CSS样式,从而使各种浏览器达到一致的渲染效果。

下面我们就分别了解一下HTML的hack和CSS的hack。

(一)、HTML的hack

HTML的hack由注释<!--  -->演变而来,在高级浏览器中注释不会被加载,把IE浏览器的兼容代码写在注释中,IE浏览器会识别。

HTML的hack代码模板:

注:

①用于写兼容的注释,标签内首位都要加!感叹号。

②单词都写在一对中括号中

③IE和版本号之间要加空格

④不加比较单词,表示只兼容这一个版本;

比较单词:lt=less than(小于)、lte=less than or equal (小于等于)、gt=great than(大于)、gte=great than or equal(大于等于)

<!--[if IE 6]>
<p>只有IE6认识我</p>
<![endif]-->

只要记住这一个模板就知道HTML的兼容怎么写了,下面我们列举几个:

<!--[if gte IE 9]>
<h1>大于等于IE9的浏览器能看到</h1>
<![endif]-->
<!--[if lte IE 8]>
<h1 class="red">您的浏览器版本过低,IE8及以下版本不支持新样式,请更新浏览器</h1>
<![endif]-->
单独写给IE6的解决兼容问题的HTML代码:
<!--[if IE 6]>
<script src="js/iepng.js" type="text/javascript"></script>
<script type="text/javascript">
EvPNG.fix('div,ul,img,li,input,span,b,h1,h2,h3,h4');
</script>
<![endif]-->

(二)、CSS的hack

CSS的hack包括:属性的hack和选择器的hack

设置css的hack要注意的是css样式的层叠性,给同一个元素设置的兼容写法必须写在后面,否则会被层叠掉。

(1)属性的hack

①只兼容IE6的hack

hack符:-或_,当做前缀写在属性前面,中间不加空格

在属性名前面加短横-或者下划线_(原理:高级浏览器及其他浏览器会认为这个前缀符号是一个unknown property name),未知的属性名,不会报错,不予加载。

例:

background:red;    //高级浏览器识别
_background:pink; //仅IE6识别

②兼容IE6、7的hack

hack符: ` ~ ! @ # $ % ^ & * ( ) + = [ ] | < > , . 中的任一字符,作为前缀写在属性前面

例:

background:red;    //高级浏览器识别
!background:pink; //仅IE6、7识别

③只兼容IE8的hack

hack符:\0/,必须写在属性值与分号之间,中间不加空格

background:red;    //高级浏览器识别
background:pink\0/; //仅IE8识别

④兼容IE8、9、10的hack

hack符:\0,必须写在属性值与分号之间,中间不加空格

background:red;    //高级浏览器识别
background:pink\0; //IE8、9、10识别

⑤兼容IE6、7、8、9、10

hack符:\9,必须写在属性值与分号之间,中间不加空格

(2)选择器的hack

给选择器添加hack,这个选择器中的样式都是IE兼容样式,其他高级浏览器不识别,同理给同一个选择器设置的兼容样式要写在高级浏览器可识别的常规样式后面,否则会被层叠

①IE6及以下版本的hack

hack符:* html,*和html之间有空格,再加一个空格,后面写选择器

例:

<!--常规写法-->
.box{
width: 200px;
height: 200px;
border-radius: 50%;
background: yellowgreen;
}
<!--兼容写法-->
* html .box{
width: 100px;
height: 100px;
background: skyblue;
}

②IE7及以下版本的hack

hack符:,英文逗号,写在选择器后面,不加空格

例:

.box,{
background: #999;
border: 10px solid red;

③兼容IE6以外的其他版本的hack

hack符:html>body,写在选择器前面,与选择器之间有一个空格隔开

例:

html>body .box{
background: yellow;
}

④兼容IE6、7以外的版本的hack

hack符:html>/**/或html~/**/,写在选择器前面,与选择器之间有一个空格隔开

例:

html>/**/body .box{
background: purple;
}

IE浏览器兼容问题(上)——html和css的兼容写法的更多相关文章

  1. css样式兼容不同浏览器问题解决办法

    在网站设计的时候,应该注意css样式兼容不同浏览器问题,特别是对完全使用DIV CSS设计的网,就应该更注意IE6 IE7 FF对CSS样式的兼容,不然,你的网乱可能出去不想出现的效果! 所 有浏览器 ...

  2. css样式兼容各个浏览器时的部分总结

    [本文基本是在网络转发过来的,网站就忘记了,这文本都是保存在自己电脑本地的,还有些自己添加了些内容,这内容还会有不断的完善和更行的] 什么是浏览器兼容:当我们使用不同的浏览器(Firefox IE7 ...

  3. css属性兼容主流浏览器

    目前,对于网页中一些浏览器兼容性问题,可以使用css hack(css 招数)和浏览器Bug修复的方式解决. 名词解释: css Hack:针对特定浏览器编写冗余代码,这是一种欺骗浏览器的行为,预示着 ...

  4. JavaScrip 原生多文件上传及预览 兼容多浏览器

    JavaScrip 原生多文件上传及预览 兼容多浏览器 html代码块 <div class="container"> <label>请选择一个图像文件:& ...

  5. ie6,ie7,ie8 css bug兼容解决方法

    IE浏览器以不支持大量的css 属性出名,同时也因其支持的css属性中存在大量bug. 这里收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决,也希 ...

  6. ie6,ie7,ie8 css bug兼容解决记录

    ie6,ie7,ie8 css bug兼容解决记录 转载自:ie6,ie7,ie8 css bug兼容解决记录 - 前端开发 断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面 ...

  7. IE6/IE7/IE8/Firefox/Chrome/Safari的CSS hack兼容一览表

    浏览器兼容问题一直是前段开发工程师比较头痛的问题,熟悉了里面的规则也就变得简单了,这里有一份资料可以分享给大家,大家平时开发过程中遵循这个规律的话,会变得轻松多了: 各浏览器CSS hack兼容表: ...

  8. DIV CSS 网页兼容全搞定 (IE6 IE7 IE8 IE9 火狐 谷歌)

    CSS兼容常用技巧 请尽量用xhtml格式写代码,而且DOCTYPE影响 CSS 处理,作为W3C标准,一定要加DOCTYPE声明. 1.div的垂直居中问题 vertical-align:middl ...

  9. css各兼容应该注意的问题

    1.div布局在ie浏览器和chrome浏览器,firefox浏览器不同,不如在div里面嵌套3个div,分别左中右,左边div的pading和margin在ie8以上都是几乎相同,ie8以下做内边距 ...

随机推荐

  1. javascript常见面试题

    闭包相关面试题:1. var a=0,b=0; function A(a){ A=function(b){console.log(a+b++);}; console.log(a); } A(1); A ...

  2. 全景智慧城市常诚——没接触过VR全景的你就是目前VR最大的新闻

    据调查,自2015年开始,VR(虚拟现实)技术在传媒行业中的应用呈现井喷式增长,各大国际主流媒体纷纷在新闻报道中使用VR技术.国内运用VR报道新闻最早在2015年12月,财新网利用VR技术对深圳山体垮 ...

  3. 发布支持多线程的PowerShell模块 —— MultiThreadTaskRunner

    应用场景 多线程在需要批量处理一些任务的时候相当有用,也更加有利于充分利用现有计算机的能力.所有主流的开发语言都支持多线程. 默认情况下,PowerShell作为一个脚本语言,是不支持多线程操作的,虽 ...

  4. Linux笔记③(ftp、nfs、ssh服务器搭建)

    1.ftp服务器搭建(利用vsftpd这个工具) 作用:文件的上传和下载 服务器端: 修改配置文件,配置文件目录:/etc/vsftpd.conf ,修改里面的允许匿名访问.指定匿名访问目录等操作,根 ...

  5. map,zip,reduce函数

    lt=range(5,10) lw=range(8,13) def mul(a,b): return a*b def mul_list(param1,param2): return_list=[] f ...

  6. MySQL基础语法------增删改查

    1.增 1.1建立数据库 create database test2; 格式:create database <数据库名> 1.2建表 create table student( sno ...

  7. 用queue函数写广搜

    以走迷宫需要的最少步数的代码为例 #include<stdio.h>#include<string.h>#include<queue> using namespac ...

  8. 解决arcgis javascript textsymbol不支持多行文本标注的问题

    首先,下载这段js文件,命名为esri.symbol.MultiLineTextSymbol.js require(["esri/layers/LabelLayer"], func ...

  9. angular js 和 dajango 标签{{}} 冲突

    问题描述: 如果在django的模板中使用{{ }},不会被angularjs 识别. 解决办法: >1.5 的django中,将需要angularjs解释的{{expression}}放在 v ...

  10. 可能是最详细的 Hexo + GitHub Pages 搭建博客的教程

    前言:博主目前大三,Web 前端爱好者.写博客的好处,不是为了写而写,而是一个记录思想的过程.不要考虑它能带给你什么,而是你自己从中收获了什么. 最近刚好有空,于是就参照网上的各种教程,搭建了一个博客 ...