当前位置: 首页 > 图文教程 > 网页制作 > CSS样式表 > div+css布局必须要知道的css条件注释理论及实践

CSS样式表
CSS网页设计 IE8和IE7共存
CSS2 打印属性让打印HTML文档不出问题
制作网页中设计段落缩进的方法
CSS border 属性使用说明
CSS border-style 属性使用方法
CSS border-color 属性使用方法
CSS border-width 属性使用教程
CSS padding属性定义边内补白
CSS margin 属性定义边外补白
网页布局教程 掌握CSS网页布局属性
css 背景样式属性说明
span margin 设置生效
html 滚动条在IE6和IE7中兼容性问题
IE6 两个div有间隙的问题(IE 3px bug)
CSS 数字和字母将容器撑大问题解决
换个角度看页面重构中的语义化
DIY属于个人开发使用的CSS Reset
CSS 空格引起网页布局间距问题
CSS 网页制作时遇到问题的快速参考技巧
css li 去掉点的样式写法

CSS样式表 中的 div+css布局必须要知道的css条件注释理论及实践


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 166 ::
收藏到网摘: n/a

浏览器的条件注释理论,用下面一段例子来解释这个问题
(X)HTML
下面一段代码是测试在微软的IE浏览器下的条件注释语句的效果
复制代码 代码如下:

<!--[if IE]>
<h1>您正在使用IE浏览器</h1>
<![endif]-->
<!--[if IE 5]>
<h1>版本 5</h1>
<![endif]-->
<!--[if IE 5.0]>
<h1>版本 5.0</h1>
<![endif]-->
<!--[if IE 5.5]>
<h1>版本 5.5</h1>
<![endif]-->
<!--[if IE 6]>
<h1>版本 6</h1>
<![endif]-->
<!--[if IE 7]>
<h1>版本 7</h1>
<![endif]-->

下面的代码是在非IE浏览器下运行的条件注释
复制代码 代码如下:

<!--[if !IE]><!-->
<h1>您使用不是 Internet Explorer</h1>
<!--<![endif]-->
最终在非IE和特殊的IE浏览器下起作用
(或者使用 lte lt 或者 gt gte来判断,如:
<!--[if lte IE 6]>
在IE 6下显示的信息
<![endif]-->
).
<!--[if IE 6]><!-->
<h1>您正在使用Internet Explorer version 6<br />
或者 一个非IE 浏览器</h1>
<!--<![endif]-->

From:http://www.cssplay.co.uk/menu/conditional.html
预览模型
上面提到了条件注释,就是判断浏览器类型,然后定义什么浏览器下显示什么内容。
这个dropmenu(下拉菜单)模型来自cssplay,使经过作者多次的研究和反复的测试才做出来的。我想那这个模型来实践一下条件注释的原理。
先看一个最简单的模型

下面是xhtm
复制代码 代码如下:

<div class="menu">
<ul>
<li><a class="drop" href="../menu/index.html">DEMOS
<!--[if IE 7]><!-->
</a>
<!--<![endif]-->
<!--IE7时显示</a>标签-->
<table><tr><td>
<ul>
<li><a href="../menu/zero_dollars.html" title="The zero dollar ads page">zero dollars advertising page</a></li>
<li><a href="../menu/embed.html" title="Wrapping text around images">wrapping text around images</a></li>
<li><a href="../menu/form.html" title="Styling forms">styled form</a></li>
<li><a href="../menu/nodots.html" title="Removing active/focus borders">active focus</a></li>
<li><a class="drop" href="../menu/hover_click.html" title="Hover/click with no active/focus borders">hover/click with no borders</li>
<li class="upone"><a href="../menu/shadow_boxing.html" title="Multi-position drop shadow">shadow boxing</a></li>
<li><a href="../menu/old_master.html" title="Image Map for detailed information">image map for detailed information</a></li>
<li><a href="../menu/bodies.html" title="fun with background images">fun with background images</a></li>
<li><a href="../menu/fade_scroll.html" title="fade-out scrolling">fade scrolling</a></li>
<li><a href="../menu/em_images.html" title="em size images compared">em image sizes compared</a></li>
</ul>
</td></tr></table>
<!--[if lte IE 6]>
</a>
<![endif]-->
</li>
<!--IE6时显示</a>标签-->
</ul>
</div>

CSS
复制代码 代码如下:

<link rel="stylesheet" media="all" type="text/css" href="final_drop.css" />
<!--[if lte IE 6]>
<link rel="stylesheet" media="all" type="text/css" href="final_drop_ie.css" />
<![endif]-->

采用双样式,给ie和非ie分别定义样式,如果IE时候,在final_drop.css基础上补充一个final_drop_ie.css
先看看非ie下的css是怎样定义的
复制代码 代码如下:

.menu ul li ul {
display: none;
}
/* specific to non IE browsers */
.menu ul li:hover a {
color:#fff;
background:#bd8d5e;
}
/*定义鼠标滑过样式*/
.menu ul li:hover ul {
display:block;
position:absolute;
top:3em;
margin-top:1px;
left:0;
width:150px;
}

在非IE下,看到鼠标滑过时候li包含的ul显示了,因为这些浏览器支持li:hover用法
IE下的css
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

继承上面的final_drop.css样式,无鼠标时间时候li包含的ul不显示
因为
<!--[if lte IE 6]>
</a>
<![endif]-->
所以在IE6下鼠标滑过时候在通过a:hover来显示那个ul内容
而IE7下通过li:hover显示的效果一样
下面是作者的原模型(三级菜单纵向和相结合的)
就是在简单模型的基础上复杂化
预览模型
下载相关文件:
http://www.jluvip.com/works/css/dropmenu/dropmenu.txt
http://www.jluvip.com/works/css/dropmenu/final_drop.css
http://www.jluvip.com/works/css/dropmenu/final_drop_ie.css
补充条件注释
条件注释是在IE5.0/Win以后才被IE支持的,一般用于hack。
(X)HTML
下面一段代码是测试在微软的IE浏览器下的条件注释语句的效果
复制代码 代码如下:

<!--[if IE]>
根据条件判断,这是Internet Explorer<br />
< ![endif]-->
<!--[if IE 5]>
根据条件判断,这是Internet Explorer 5<br />
< ![endif]-->
<!--[if IE 5.0]>
根据条件判断,这是Internet Explorer 5.0<br />
< ![endif]-->
<!--[if IE 5.5]>
根据条件判断,这是Internet Explorer 5.5<br />
< ![endif]-->
<!--[if IE 6]>
根据条件判断,这是Internet Explorer 6<br />
< ![endif]-->
<!--[if IE 7]>
根据条件判断,这是Internet Explorer 7<br />
< ![endif]-->
<!--[if gte IE 5]>
根据条件判断,这是Internet Explorer 5 或者更高<br />
< ![endif]-->
<!--[if lt IE 6]>
根据条件判断,这是版小于6的Internet Explorer<br />
< ![endif]-->
<!--[if lte IE 5.5]>
根据条件判断,这是Internet Explorer 5.5或更低<br />
< ![endif]-->

下面的代码是在非IE浏览器下运行的条件注释
<!--[if !IE]><!-->
您使用不是 Internet Explorer<br />
<!--<![endif]-->
<!--[if IE 6]><!-->
您正在使用Internet Explorer version 6<br />
或者 一个非IE 浏览器<br />
<!--<![endif]-->

下面是条件注释的语法:

  • gt /Greater than/大于/<!--[if gt IE 5.5]>
  • gte /Greater than or equal to/大于等于/<!--[if gte IE 5.5]>
  • lt /Less than/小于/<!--[if lt IE 5.5]>
  • lte /Less than or equal to/小于等于/<!--[if lte IE 5.5]>
  • ! /Note/不等于/<!--[if !IE 5.5]>

IE条件注释的优秀的区分浏览器的能力,让很多设计师用于hack,解决浏览器对CSS解析的不同
复制代码 代码如下:

<!--[if IE6.0]]
<style type="text/css">
div#box{width:500px;margin:10px; padding:10px; border:10px;}
</style>
<![endif]-->
<!--[if lt IE6.0]]
<style type="text/css">
div#box{width:530px;margin:10px; padding:10px; border:10px;}
</style>

预览模型