条件CSS的高级用法

2016-02-19 23:40 2 1 收藏

今天图老师小编要跟大家分享条件CSS的高级用法,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

【 tulaoshi.com - Web开发 】

介绍

条件CSS(Conditional-CSS)的开发源于在多数浏览器上修正 CSS 渲染 bug 的需求,以确保尽量多的用户看到正确的网站设计。核心思想建立在 Internet Explorer 上发现的条件注释方法,并扩展到包含其他的浏览器,而且将条件声明内联到 CSS 定义里面。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

相关教程:针对不同版本的IE浏览器的条件CSS应用

条件CSS(Conditional-CSS)并不仅仅对用户使用的浏览器感兴趣,而是对用户浏览器使用的渲染引擎更感兴趣。这就是条件(Conditional-CSS)使用 ‘Geckko’ 而非广为所知的 Firefox 作为它浏览器条件之一的原因。同样地, ‘Webkit’ 代替了 Safari。这使得其他使用同样渲染引擎地浏览器接受到那些同样地定位 CSS。这个规则地一个例外是使用了 IE(而不是 ‘Trident’),因为这是使用的 IE 的条件注释,而 ‘Trident’ 并不怎么为人所知。同样地,对于 Opera,因为只有 Opera 使用 Presto 渲染引擎,所以使用了 ‘Opera’。

需要注意的是,如果所有浏览器都能正确地执行 W3C 发布的 CSS 标准,那么条件CSS(Conditional-CSS)就没有需求了。但是,CSS bug 对于开发者是无法回避的现实,而且往往都及其让人沮丧。条件CSS(Conditional-CSS)给我们提供了一个简单的方法来解决这些问题。

高级条件声明条件块

一个典型的条件声明只应用于一条 CSS 规则。当然,也有可能对整个 CSS 块使用条件,这样的块只用于特定的浏览器。下面的例子中 CSS 块只用于 IE 浏览器。

// 条件块实例   [if IE] .box {   width: 500px;   padding: 100px 0;   }

一个更高级的使用了条件CSS(Conditional-CSS)的实例样式表可以看。它展示了使用条件声明的各种方法。需要注意的是在条件声明和 CSS 声明之间不需要空格。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)条件导入

条件CSS(Conditional-CSS)不仅仅自动将 CSS 中找到的任意 ‘@import’ 声明进行扩展并引入(为了减少 HTTP 请求),也允许条件导入语句。这可以用于为特定浏览器引入一些规则。下面的例子会为移动版 Safari(iPhone / iPod Touch)导入一个样式表,为其他浏览器导入另一个不同的样式表。

// 条件导入实例 [if SafMob] @import('iphone.css');   [if ! SafMob] @import('non-iphone.css');
浏览器分组

将浏览器按照若干支持级别进行分组是一种常见并且是很好的做法。一个由我们在U4EA中提供的展示了这中方法,在那里我们将浏览器分成4个不同的支持级别:

A 级: 最高级,支持所有组件 C 级: 核心支持,基本显示信息 X 级: CSS 在该类浏览器中被锁定,仅依赖HTML渲染 U 级: 不支持。获得的CSS将和C级浏览器一样

可能遇到的情况是,你只想让A级浏览器获取某些CSS,而又要确保C级以及更低级的浏览器不能看到它们。比如,想让A级浏览器将一个UL列表显示为tab,而其他浏览器按照原始格式显示点式列表。

条件CSS 允许你通过定义一组浏览器到特定的分组来实现此类需求,然后使用标准条件语句中的浏览器区域来匹配这个浏览器分组。条件CSS 有一套内置的标准浏览器分组(当然,你也可以定义你自己的分组):

‘cssA’ - A 级CSS支持IE 6+ Gecko 1.0+ (Firefox, Camino, Flock, etc) Webkit 312+ (Safari 1.3+, Google Chrome) Opera 7+ Konqueror 3.3+ ‘cssX’ - X 级CSS支持IE 4 以下 IE Mac 4.5 以下

一个使用条件CSS的浏览器分组的例子:

1234567
// 条件CSS浏览器分组实例[if cssA] ul.li {display: block;margin-left: 5px;width: 50px;/* etc */}

正如你可以看到的,浏览器分组的条件语句被格式化为与标准条件语句同样的语法。注意’cssX’是一个特殊的浏览器分组,它可以引起条件CSS返回空值除了它自己默认的。

[if {!} browser_group]

在这里:

! - 代表否定声明(i.e. NOT) - 可选择的 browser_group - 指定浏览器分组声明标签‘cssA’ - A 级浏览器 浏览器是如何被检测到的

默认浏览器通过条件CSS和相应的样式被检测到,然后通过读取浏览器的user agent字符串处理。这使得设置和整合条件CSS到你的网站变得灰常容易,你所需要做的仅仅是上传代码并在你的HTML中编辑CSS import声明就可以了。User agent 检测是一种检测那种浏览器及其版本被使用的有效的方法,不过有一种倒退的现象就是有些用户改变他们的浏览器的user agent 以显示他们很了不起(通常是IE)。在这种情况下,最终用户将会获取错误的CSS到他们的浏览器。我对此的观点是,如果你的目标浏览器是IE,那么你应该预料到IE将会看到的情况。

通过HTTP GET 变量设置浏览器

之前我们有说过确保IE并且只有IE可以获得IE特定的CSS是可行的。要做到这些我们需要使用IE的条件注释并结合条件CSS能够使用GET变量获取浏览器信息的能力。条件CSS 接受浏览器的两个不同变量:

b - 浏览器名称 v - 浏览器版本(可选)

下面的这个例子显示使用条件注释声明的HTML需要确定IE6和IE7将获取它们的特定颜色,而其它的所有浏览器将获取其它样式:

123456789
!--[if !IE]!--  style type="text/css"@import '/media/css/c-css.php?b=nonIE';/style!--![endif]--!--[if IE 6]  style type="text/css"@import '/media/css/ic-css.php?b=IE&v=6';/style![endif]--!--[if gte IE 7]  style type="text/css"@import '/media/css/c-css.php?b=IE&v=7';/style![endif]--
使用静态CSS文件

使用条件CSS为每一个浏览器生成一个定制的CSS文件的方法看起来很不错, 它只是十分适用于管理一个相对比较轻量级的网站,因为程序必须运行于样式的每一个请求。对于中到大型网站,这的确不太合适,特别是当创建的文件数量受到限制的时候。所以条件语句有接受命令行参数的能力,它可以指定某个浏览器和版本(可选)应该生效然后输出最终样式到标准输出文件。下面的脚本可以用于为IE6/7以及非IE浏览器生成CSS文件(注意,该脚本描述了PHP版本的条件CSS,但是命令行选项和C版本一样):

1234
#!/bin/shphp -q c-css.php IE 7  ie7.cssphp -q c-css.php IE 6  ie6.cssphp -q c-css.php  nonie.css

公平的说,这是你需要的最合适的样式组合。因此,下面的使用HTML注释可以配合上面的脚本来调用需求的CSS文件。

123456789
!--[if !IE]!--  style type="text/css"@import '/media/css/nonie.css';/style!--![endif]--!--[if IE 6]  style type="text/css"@import '/media/css/ie6.css';/style![endif]--!--[if gte IE 7]  style type="text/css"@import '/media/css/ie7.css';/style![endif]--

享受条件CSS的好处吧!

糖伴西红柿说:
最终的条件CSS(Conditional-CSS)的高级用法也新鲜出炉了,加上老江的条件CSS(Conditional-CSS)介绍,这个系列就全了。
剩下的就是学习、讨论了。嗯,这篇文章非我一人之功,神飞同学做出了巨大的贡献。

原文地址:

来源:http://www.tulaoshi.com/n/20160219/1630339.html

延伸阅读
标签: Web开发
所谓的CSS高级技巧...其实是一些对基本技巧的创意组合, 任何手段和技巧都是解决问题的方法. 只要学会这种思考问题的方法, 你也能拥有属于自己的CSS秘籍. CSS2 还没有办法创造出曲线边框, 明显的, 仅仅方框是没办法满足我们设计师的. 所以CSS圆角技术到现在还是那么的火. 1. 固定宽度的纯色圆角矩形 在众多圆角技术中, 固定宽度的圆角矩...
标签: Web开发
上一篇 CSS教程 文章:CSS高级技巧:文字环绕图片 布局 CSS至关重要的作用, CSS的设计初衷. CSS布局和几年前table横行时的布局又不太一样, 在结构化语义化的HTML文档后面, CSS在格式化文档的渲染效果, 把结构化文档用表现化语言来描述. 简而言之, 就是CSS不需要表现性标签! CSS布局技术依赖于三个基本概念: 定位, 浮动, margin操纵. 布局...
标签: Web开发
上一篇 CSS教程 文章:CSS高级技巧:网页布局 CSS阴影效果 (Drop Shadows) 一点阴影可以给平板的设计增加纵深的感觉, 很多时候我们都是直接用PhotoShop直接制作带阴影的图片以供使用, 这里介绍的是一种不需要修改图片, 而只需要用CSS完成的技巧. 原理: 给img /标签增加一个容器, 给容器设置一个大的阴影背景图像, 然后把img /利用负值外补...
CSS是对网页设计师可用的最强大的工具之一。使用它我们可以在几分钟内改变一个网站的界面,而不用改变页面的标签。但是尽管事实上,我们每个人也都意识到了它是有用的,CSS 选择器远未发挥它们的潜力,有的时候我们还趋向于使用过多的和无用的class、id、div、span等把我们的HTML搞的很凌乱。 避免让这些瘟疫在你的标签中传播并保持其简洁...
标签: Web开发
上一篇 CSS教程 文章:CSS高级技巧:CSS Sprites 图像替换技术有相当的用处, 特别是注重视觉的设计, 而且在一定程度上也不会影响非可视化浏览器的用户群(屏幕阅读器). 本节用到的图片只有一个: 经典FIR 在文字外包上一组span标签, 并在CSS中将这个span进行display:none 操作, 使其隐藏, 然后在原文字的容器的CSS中加上background-image...

经验教程

52

收藏

9
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部