使用CSS hack进行设置。CSS hack的目的就是使你的CSS代码兼容不同的浏览器。当然,我们也可以反过来利用CSS hack为不同版本的浏览器定制编写不同的CSS效果。
1.原理
由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系。我们就可以根据这个来针对不同的浏览器来写不同的CSS。
CSS Hack大致有3种表现形式,CSS类内部Hack、选择器Hack以及HTML头部引用(if IE)Hack,CSS
Hack主要针对类内部Hack:比如 IE6能识别下划线"_"和星号" * ",IE7能识别星号" *
",但不能识别下划线"_",而firefox两个都不能认识。等等
选择器Hack:比如 IE6能识别*html .class{},IE7能识别*+html .class{}或者*:first-child+html .class{}。等等
HTML头部引用(if IE)Hack:针对所有IE:<!--[if
IE]><!--您的代码--><![endif]-->,针对IE6及以下版本:<!--[if lt IE
7]><!--您的代码--><![endif]-->,这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都
会生效。
书写顺序,一般是将识别能力强的浏览器的CSS写在后面。下面如何写里面说得更详细些。
2、常用的CSS hack方式
(1)方式一 条件注释法
只在IE下生效
<!--[if IE]>
这段文字只在IE浏览器显示
<![endif]-->
只在IE6下生效
<!--[if IE 6]>
这段文字只在IE6浏览器显示
<![endif]-->
只在IE6以上版本生效
<!--[if gte IE 6]>
这段文字只在IE6以上(包括)版本IE浏览器显示
<![endif]-->
只在IE8上不生效
<!--[if ! IE 8]>
这段文字在非IE8浏览器显示
<![endif]-->
非IE浏览器生效
<!--[if !IE]>
这段文字只在非IE浏览器显示
<![endif]-->
(2)方式二 类内属性前缀法
属性前缀法是在CSS样式属性名前加上一些只有特定浏览器才能识别的hack前缀,以达到预期的页面展现效果。
IE浏览器各版本 CSS hack 对照表
说明:在标准模式中
“-″减号是IE6专有的hack
“\9″ IE6/IE7/IE8/IE9/IE10都生效
“\0″ IE8/IE9/IE10都生效,是IE8/9/10的hack
“\9\0″ 只对IE9/IE10生效,是IE9/10的hack
(3)CSS hack方式三:选择器前缀法
选择器前缀法是针对一些页面表现不一致或者需要特殊对待的浏览器,在CSS选择器前加上一些只有某些特定浏览器才能识别的前缀进行hack。
目前最常见的是
*html *前缀只对IE6生效*+html *+前缀只对IE7生效@media
screen\9{...}只对IE6/7生效@media \0screen {body { background: red
}}只对IE8有效@media \0screen\,screen\9{body { background: blue
}}只对IE6/7/8有效@media screen\0 {body { background: green}}
只对IE8/9/10有效@media screen and (min-width:0\0) {body { background: gray
}} 只对IE9/10有效@media screen and (-ms-high-contrast: active),
(-ms-high-contrast: none) {body { background: orange}} 只对IE10有效等等
3、实际应用
比如要分辨IE6和firefox两种浏览器,可以这样写:
div{
background:green/*forfirefox*/
*background:red/*forIE6*/(bothIE6&&IE7)
}
我在IE6中看到是红色的,在firefox中看到是绿色的。
解释一下:
上面的css在firefox中,它是认识不了后面的那个带星号的东西是什么的,于是将它过滤掉,不予理睬,解析得到的结果是:div{background:green},于是理所当然这个div的背景是绿色的。
在IE6中呢,它两个background都能识别出来,它解析得到的结果是:div{background:green*background:red},于是根据优先级别,处在后面的red的优先级高,于是当然这个div的背景颜色就是红色的了。
4、所以单独定义IE6、7、8的width属性代码如下
div{width:200px/*所有浏览器都能识别 包括IE7*/
-width:180px/*只有IE6识别,识别后会覆盖通用width的设置,达到IE6单独设置的效果*/
-width:180px\0/*IE8以上的浏览器识别,识别后会覆盖通用width的设置,达到IE8单独设置的效果*/
}
CSS的定义是由三个部分构成 1. 基本语法 CSS的定义是由三个部分构成:选择符(selector),属性(properties)和属性的取值(value)。基本格式如下:[Copy to clipboard]CODE:selector {property: value} (选择符 {属性:值})选择符是可以是多种形式,一般是你要定义样式的HTML标记,例如BODY、P、TABLE……,你可以通过此方法定义它的属性和值,属性和值要用冒号隔开:[Copy to clipboard]CODE:body {color: black}选择符body是指页面主体部分,color是控制文字颜色的属性,black是颜色的值,此例的效果是使页面中的文字为黑色。如果属性的值是多个单词组成,必须在值上加引号,比如字体的名称经常是几个单词的组合:[Copy to clipboard]CODE:p {font-family: "sans serif"}(定义段落字体为sans serif)如果需要对一个选择符指定多个属性时,我们使用分号将所有的属性和值分开:[Copy to clipboard]CODE:p {text-align: centercolor: red}(段落居中排列;并且段落中的文字为红色)为了使你定义的样式表方便阅读,你可以采用分行的书写格式:[Copy to clipboard]CODE:p{text-align: centercolor: blackfont-family: arial}(段落排列居中,段落中文字为黑色,字体是arial)2. 选择符组你可以把相同属性和值的选择符组合起来书写,用逗号将选择符分开,这样可以减少样式重复定义:[Copy to clipboard]CODE:h1, h2, h3, h4, h5, h6 { color: green }(这个组里包括所有的标题元素,每个标题元素的文字都为绿色)[Copy to clipboard]CODE:p, table{ font-size: 9pt }(段落和表格里的文字尺寸为9号字)效果完全等效于:[Copy to clipboard]CODE:p { font-size: 9pt }table { font-size: 9pt }3. 类选择符用类选择符你能够把相同的元素分类定义不同的样式,定义类选择符时,在自定类的名称前面加一个点号。假如你想要两个不同的段落,一个段落向右对齐,一个段落居中,你可以先定义两个类:[Copy to clipboard]CODE:p.right {text-align: right}p.center {text-align: center}然后用不在不同的段落里,只要在HTML标记里加入你定义的class参数:[Copy to clipboard]CODE:<p class="right">这个段落向右对齐的</p><p class="center">这个段落是居中排列的</p>注意:类的名称可以是任意英文单词或以英文开头与数字的组合,一般以其功能和效果简要命名。类选择符还有一种用法,在选择符中省略HTML标记名,这样可以把几个不同的元素定义成相同的样式:[Copy to clipboard]CODE:.center {text-align: center}(定义.center的类选择符为文字居中排列)这样的类可以被应用到任何元素上。下面我们使h1元素(标题1)和p元素(段落)都归为“center”类,这使两个元素的样式都跟随“.center”这个类选择符:[Copy to clipboard]CODE:<h1 class="center">这个标题是居中排列的</h1><p class="center">这个段落也是居中排列的</p>注意:这种省略HTML标记的类选择符是我们经后最常用的CSS方法,使用这种方法,我们可以很方便的在任意元素上套用预先定义好的类样式。4. ID选择符在HTML页面中ID参数指定了某个单一元素,ID选择符是用来对这个单一元素定义单独的样式。ID选择符的应用和类选择符类似,只要把CLASS换成ID即可。将上例中类用ID替代:[Copy to clipboard]CODE:<p id="intro">这个段落向右对齐</p>定义ID选择符要在ID名称前加上一个“#”号。和类选择符相同,定义ID选择符的属性也有两种方法。下面这个例子,ID属性将匹配所有id="intro"的元素:[Copy to clipboard]CODE:#intro{font-size:110%font-weight:boldcolor:#0000ffbackground-color:transparent}(字体尺寸为默认尺寸的110%;粗体;蓝色;背景颜色透明)下面这个例子,ID属性只匹配id="intro"的段落元素:[Copy to clipboard]CODE:p#intro{font-size:110%font-weight:boldcolor:#0000ffbackground-color:transparent}注意:ID选择符局限性很大,只能单独定义某个元素的样式,一般只在特殊情况下使用。5. 包含选择符可以单独对某种元素包含关系定义的样式表,元素1里包含元素2,这种方式只对在元素1里的元素2定义,对单独的元素1或元素2无定义,例如:[Copy to clipboard]CODE:table a{font-size: 12px}在表格内的链接改变了样式,文字大小为12象素,而表格外的链接的文字仍为默认大小。6. 样式表的层叠性层叠性就是继承性,样式表的继承规则是外部的元素样式会保留下来继承给这个元素所包含的其他元素。事实上,所有在元素中嵌套的元素都会继承外层元素指定的属性值,有时会把很多层嵌套的样式叠加在一起,除非另外更改。例如在DIV标记中嵌套P标记:[Copy to clipboard]CODE:div { color: redfont-size:9pt}……<div><p>这个段落的文字为红色9号字</p></div>(P元素里的内容会继承DIV定义的属性)注意:有些情况下内部选择符不继承周围选择符的值,但理论上这些都是特殊的。例如,上边界属性值是不会继承的,直觉上,一个段落不会同文档BODY一样的上边界值。另外,当样式表继承遇到冲突时,总是以最后定义的样式为准。如果上例中定义了P的颜色:[Copy to clipboard]CODE:div { color: redfont-size:9pt}p {color: blue}……<div><p>这个段落的文字为蓝色9号字</p></div>我们可以看到段落里的文字大小为9号字是继承div属性的,而color属性则依照最后定义的。不同的选择符定义相同的元素时,要考虑到不同的选择符之间的优先级。ID选择符,类选择符和HTML标记选择符,因为ID选择符是最后加上元素上的,所以优先级最高,其次是类选择符。如果想超越这三者之间的关系,可以用!important提升样式表的优先权,例如:[Copy to clipboard]CODE:p { color: #FF0000!important }.blue { color: #0000FF}#id1 { color: #FFFF00}我们同时对页面中的一个段落加上这三种样式,它最后会依照被!important申明的HTML标记选择符样式为红色文字。如果去掉!important,则依照优先权最高的ID选择符为黄色文字。7. 注释你可以在CSS中插入注释来说明你代码的意思,注释有利于你或别人以后编辑和更改代码时理解代码的含义。在浏览器中,注释是不显示的。CSS注释以"/*" 开头,以"*/" 结尾,如下:[Copy to clipboard]CODE:/* 定义段落样式表 */p{text-align: center/* 文本居中排列 */color: black/* 文字为黑色 */font-family: arial /* 字体为arial */}因为img标签属于flow的元素,ie会把flow元素之间的空白字符和制表换行符等当成一个空格处理,所以就出现了你所谓的小空隙。你尝试下
<img src="1234.jpg"/><img src="1234.jpg"/>
在两个图片中换行看看,和直接连起来写就有差异,这是ie对dom处理的逻辑所造成的。