码迷,mamicode.com
首页 > Web开发 > 详细

CSS兼容处理

时间:2018-02-12 11:28:00      阅读:1046      评论:0      收藏:0      [点我收藏+]

标签:web   设计   实现   根据   blog   条件语句   for   1.0   位置   

技术分享图片

CSS代码兼容主要由Hack和Filter两种方法来解决相关问题。

Hack:一种兼容CSS在不同浏览器中正确显示的方法。

Filter:一种特殊的浏览器或浏览器组显示或隐藏规则或声明的方法。

注意:

Hack是一种非官方技术,主要依赖各种字符组合,以及规则和声明的重复定义实现在不同浏览器之间达到相同的效果。

但是Hack也有副作用,如降低代码的可读性,增加了代码的负担。

设计CSS Hack 和 Filter通常有两种方法:

  • 利用浏览器自身的Bug,来隐藏或显示样式或声明。
  • 利用浏览器对CSS支持的不完善,如对某些规则或语法还没有形成支持,来隐藏或显示样式。

一般建议使用第二种方法来实现浏览器的兼容。

最新最权威的CSS Filter技术汇总:http://www.communis.co.uk/dithered/css_filters/css_only/index.html

 

显示模式:各大浏览器厂商为了实现对标准网页和传统网页的兼容性,分别为浏览器制定了几套网页显示方案。

微软从IE6.0以上版本浏览器嵌入了两种显示方案分别是:Standards Mode(标准模式)和 Quirks Mode(怪异模式)。

标准模式:浏览器根据W3C组织制定的标准网页规范来显示页面。

怪异模式:页面将以IE5显示页面的方式来呈现网页,以保证与过去非标准网页的兼容性。

它们最大的区别是对盒模型解析的差异。

 

Firefox从1.0以上版本开始支持3种显示模式:Quirks Mode、Almost Standards Mode (几乎标准模式)和Standards Mode。

其中Almost Standards Mode对应于IE和Opera的Standards Mode,该模式除了在处理表格方式方面有一些细微的差异之外,与标准模式基本相同。

火狐的显示模型细节差异可以参考:http://www.mozilla.org/docs/web-developer/quirks/doctypes.html

 

Opera从6.0版本开始支持与IE相同的显示模式:Quirks Mode 和 Standards Mode,关于显示模式的细节说明可以参考:http://www.opera.com/doc/specs/doctype/。

 

相关文档类型,根据文档类型进行显示:

HTML4.0过滤型:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

网页将遵循W3C制定的标准进行解析。

HTML4.0严格型:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

HTML4.0框架型:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd">

以及XHML1.0过渡型、XHTML1.0严格型、XHTML框架型3个文档类型,但如果不给网页定义文档类型,IE浏览器会以怪异模式显示网页。

没有提供文档类型的版本:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML//EN" "http://www.w3.org/TR/html/loose.dtd">

HTML2.0版本:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML2.0//EN">

HTML3.0版本:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML3.0//EN">

HTML3.2版本:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML3.2Final//EN">

注意: 本示例仅在IE6.0以上版本浏览器有效,其他浏览器不支持此示例的显示差异。

条件过滤样式:

语法:<!--[if IE]> <![endif]-->

详解说明:

条件修饰关键字:

lte:小于或等于某个版本的IE浏览器。

lt:小于某个版本的IE浏览器。

gte:大于或等于某个版本的浏览器。

gt:大于某个版本的IE浏览器。

!:不等于某个版本的IE浏览器。

相关示例:

<!--[if IE5.0]>

<h1>只有IE5.0可以识别</h1>

<![endif]--> 

<!--[if IE5]>

<h1>仅IE5.0和IE5.5可以识别</h1>

<![endif]-->

<!--[if IE6]>

<h1>仅IE6可以识别</h1>

<![endif]-->

<!--[if it IE6]>

<h1>IE6以及IE6以下版本可以识别</h1>

<![endif]-->

<!--[if IE5.5000]>

<h1>只有IE5.5可以识别</h1>

<![endif]-->

<!--[if gte IE6]>

<h1>IE6及以上版本可以识别</h1>

<![endif]-->

<!--[if IE7]>

<h1>仅IE7可以识别</h1>

<![endif]-->

<!--[if it IE7]>

<h1>IE7以及IE7以下版本可以识别</h1>

<![endif]-->

<!--[if gte IE7]>

<h1>IE7以及IE7以上版本可以识别</h1>

<![endif]-->

如果为某个版本的IE浏览器定义样式,则可以把样式放置在IE条件语句中。

例如:

<!--[if IE6]>

<style type="text/css">

body {

background:#00FFFF;

}

</style>

<![endif]-->

同时还可以为不同版本浏览器定义不同的外部样式表,再用IE条件语句为不同版本的IE浏览器导入不同的文件,从而实现浏览器的兼容性处理。

如:

<!--[if IE6]>

<link href="image/ie6.css" rel="stylesheet" type="text/css">

<![endif]-->

 <!--[if IE7>

<link href="image/ie6.css" rel="stylesheet" type="text/css">

<![endif]-->

提示:利用IE条件语句可以设计专门为非IE浏览器使用的条件语句(请注意其特殊写法)。

<!--[if !IE]>

<h1>除IE外都可识别</h1>

<![endif]-->

选择器过滤样式:

  • 使用!important提升优先级:IE6以及以下版本的浏览器无法识别,IE7无法使用这种方法 。
  • 使用下划线属性名:在IE7中被视为自定义属性,在CSS中无法识别并应用在IE7以上浏览器。IE6及以下版本可以识别。
  • 使用*html选择符:在IE7浏览器中被忽略,专用于IE6及以下版本浏览器。

在标准网页中,html元素被认为根元素,其他元素都被包括其中。但是在IE6及以下版本的浏览器中默认一个匿名根元素,html元素被认为是它的子元素。

过滤声明:

技术分享图片

  • 隐藏单个声明:

IE6环境,如:

div {

width:200px;

width/**/:400px;

}

注意,注释的位置是在属性的后面,冒号的前面,且与属性名中间隔一个空格。

IE5.5环境,如:

div {

width:200px;

width: /**/400px;

}

注意,注释的位置是在冒号的后面,且与冒号中间隔一个空格。

IE5环境,如:

div {

width:200px;

width/* */:400px;

}

注意,注释的位置是在属性名的后面,冒号的前面,且注释中间隔一个空格。这个过滤器同时会适应Mac系统中的IE5和IE4。

如:

div {

width:200px;

width/**/:400px;

}

它不仅适用上面系统中的IE版本,也适用IE5.2/OS操作系统的浏览器版本。

  • 隐藏多个声明:

利用voice-family属性设计兼容IE5.5及更低版本浏览器的声明。

如:

div,content {

height:400px;

width:400px;

border:solid 1px blue;

voice-family:"\"}"\";

voice-family:inherit;

height:200px;

width:200px;

border:solid 1px red;

}

注意:

voice-family属性可以指定网页内容用哪种声音进行朗读,适用于盲人阅读器等设备上。

IE5.5及更低版本浏览器中由于不能够识别,同时错误解析转义字符,并认为到voice-family:"\"}"\";这句结束。

其他浏览器中显示为200像素的红色框。

  • 使用推荐过滤器:

IE6及更低版本专用:

*html #Element {

color:red;

...

}

IE7版本专用:

*+html #Element {

color:red;

...

}

IE7+及符合现代标准浏览器专用:

div>#Element {

color:red;

...

非IE现代标准浏览器专用:

html>/**/body #Element {

color:red;

...

}

\9:选择IE6+

\0:选择IE8+和Opera15以下的浏览器

如:

.test {
	color: #090\9; /* For IE8+ */
	*color: #f00;  /* For IE7 and earlier */
	_color: #ff0;  /* For IE6 and earlier */
}

使用检测工具:

W3C CSS验证服务:http://jigsaw.w3.org/css-validator/

Web Developer工具下载地址:http://chrispederick.com/work/webdeveloper。

  

CSS兼容处理

标签:web   设计   实现   根据   blog   条件语句   for   1.0   位置   

原文地址:https://www.cnblogs.com/john-jxsr/p/8434781.html

(2)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!