IE7、IE8、IE9、IE10后各版本的更新内容和各版本的差别

在程序员的眼里,万恶的IE6的结束对他们而言是一种解脱,IE7首次开始完整支持W3C标准,从此之后IE的标准化之路就开始越走越顺,以下总结了IE7以后各版本的更新内容,和各版本的差别,作为Web开发人员解决浏览器兼容性问题的参考。

IE7更新

微软官方更新说明http://www.microsoft.com/china/msdn/library/webservices/WebApp/IE7_RevGd.mspx?mfr=true

IE8更新

  • 解决了所有浮动bug(可能是所有CSS Bug都解决了),完全支持CSS2.1规则和选择器(这个是亮点,至少在CSS上完全符合W3C标准了) 具体见http://msdn.microsoft.com/library/cc304082.aspx
  • 去掉了CSS 表达式 使用 -ms-厂商前缀表示IE专有属性,这一点向webkit和firefox学习了,值得表杨
  • 修正了一系列DOM错误,更符合标准,但并没有新增支持 如getElementById的时候ID区分大小写,不会错把Name当ID,详细列表见 http://msdn.microsoft.com/library/dd433047.aspx
  • 支持link标签的charset属性 AJAX支持增强
  • 支持HTML5中的本地存储(挺先进的
  • 本地JSON对象支持(这个也挺先进)
  • 增加UA兼容模式
  • 增加了almost Stardards渲染模式
  • 然而IE8仍然没有实现DOM L2,DOM L3和DOM L2 和 L3 事件处理(包括冒泡模型)的完整支持

微软官方更新说明
http://msdn.microsoft.com/library/cc288472%28VS.85%29.aspx#html

IE9更新

微软更新说明
http://msdn.microsoft.com/zh-cn/ie/ff468705

IE10更新

  • ECMAScript 5 Strict 模式支持 HTML5和CSS3增强 CSS3 3-D transforms(需要-ms-前缀,因为W3C还未定稿)
  • Websocket,webwork,file api等等
  • SVG改进和增强 SVG滤境
  • DOM增强 大多是带ms前缀的增强(也是就IE专有的)
  • 如触屏操作,手势事件,等等
  • 不再支持IE10的UA兼容设置(因为从IE9开始已经完全符合W3C标准),但仍支持IE9和之前的UA兼容设置

微软更新说明
http://msdn.microsoft.com/en-us/ie/gg192966

概括的说IE7只是对IE6的小小增强,IE8完全支持CSS2.1和选择器,DOM操作更符合W3C标准,但DOM支持仍不完整IE9 完全支持DOM L1,DOM L2,Jscript更符合标准,ECMAScript5支持,HTML5,CSS3支持,SVG支持。

Google奉上首个CSS动画涂鸦

Google今天的涂鸦十分特别,这个动画图片并非传统的GIF图像,而是使用CSS Sprites技术,利用一个初始图片和一张画满各个动作的拼接图片,从而实现了动画效果。

Google奉上首个CSS动画涂鸦初始图片

Google Doogle: Martha Graham

Google Doogle CSS Sprites

Google今日涂鸦是为了纪念现代舞先驱玛莎·葛兰姆(Martha Graham,1894年5月11日-1991年4月1日)117周年诞辰,他是美国舞蹈家和编舞家,也是现代舞蹈史的创始人之一。其作品多以美国人文或 是希腊古典神话为主题,代表作有《原始的神秘》(Primitive Mysteries,1936年)、《给世界的信》(Letter to the World,1940年)、《阿帕拉契山脈之春》 (Appalachian Spring,1944年)、《夜旅》(Night Journey,1947年)。

Google奉上首个CSS动画涂鸦

不用HTML5/CSS3如何在网页上画机器猫

作者: oldj

前段时间有人用 CSS3 技术在网页上画了一个机器猫, 可以用来测试各大浏览器对 CSS3 的支持程度,不用说,HTML5 /CSS3 的时代已经逐渐来临了。HTML5/CSS3 带来了很多新的东西,比如激动人心的绘图标签 canvas 。不过,在拥抱 HTML5/CSS3 之前,也让我来复古一番,看一看在 HTML5/CSS3 之前的时代里,如果想在网页上画机器猫该怎么做。

先贴一下最终的效果图:

不用HTML5/CSS3如何在网页上画机器猫

上面这个机器猫完全是用 div 搭出来的(一共用了 2010 个 div,今年是 2010 年嘛),用到的技术为 JavaScript + HTML4 + CSS2 ,在目前几乎所有主流浏览中都能有一致的显示,可以点击这儿查看演示

我们知道,各大主要浏览器都支持一些可用于绘图的矢量标记语言,比如 IE Only 的 VML 以及被 Firefox 等支持的 SVG,可惜的是这些矢量标记语言一直没有一个跨浏览器的统一的标准,因而一直没有得到广泛的应用,所以长期以来,Flash 技术一直是这个领域唯一的老大。不过,除此之外,也有一些程序员做了一些虽然可能没有很大实用价值但很有趣的探索,比如,如果直接用 JavaScript + DOM + CSS 在网页上画图会怎么样?

一、DOM 画图技术

2005年有一段时间,我对如何使只用 JavaScript 以及各大浏览器都支持的原生的标准技术(如 HTML / CSS)在网页上画图的问题产生了兴趣,当时我找到了一个叫 WZ_JSGraphics (今天发现这个页面已经打不开了,或许作者已经停止了维护?)的 JS 脚本,它实现了我上面提到的想法,通过 JavaScript 在网页上生成很多绝对定位的 div 来实现了网页绘画。

虽然计算机图形学已经非常成熟,但使用 div 在网页上画图(下面称之为“DOM 画图”)与传统的计算机图形学还是有所不同,传统的计算机图形学中可以利用的最小单位是一个 1px 的点,但 DOM 画图上可以利用的最小单位是一个 div ,或者说是一个矩形,这样一来,对于 DOM 画图技术来说,画一个小点的成本和画一个很大的矩形的成本几乎是一样的(横线或竖线也可以看成矩形)。这就为 DOM 画图提出了一个优化要求:如何使用尽可能少的矩形来拼成所需图形?如下图所示。优化曲线

上图显示了 DOM 画图中一段弧线的三种优化程度。最左边的那种用了最多的 div ,同时该约简的地方没有约简,具体表现为图像看起来会有锯齿或者拖泥带水;中间那种解决了约简的问题,但用的 div 还是太多了,该合并的地方没有合并;右边那种在前两者的基础上,把同一行、同一列相邻的 div 合并了起来,用了最少的 div 完成了图像的绘制。我们认为,对于 DOM 绘画来说,右边这种方案最佳。

同样地,对于填充图形(实心图形)来说,也要遵循这样的规则,尽可能少用 div 。比如下图所示的椭圆。优化椭圆

可以看到,上面的椭圆由许多色条组成,每一个色条即是一个 div ,这种化圆为方的灵感是从微积分中借鉴来的。

二、DrJs

2007年,有一段时间我需要在一个页面上动态地显示很多统计图表,比如柱状图、折线图、饼图等。最好的解决方案是 Flash,不过这个需求也让我再次思考如何使用 DOM 在网页上画图的问题,于是有了 DrJs 的第一个版本。

DrJs 是 Draw 和 JavaScript 两个单词的组合,名字比较普通。事实上,DrJs 几乎没有实用价值,任何一个真正严肃的或有一定规模的解决方案都不会使用它,不过我仍然花了一些时间在上面,一方面是因为好玩,另一方面也是想看看自己能 不能真的写出这样一个东西出来。这个工作时断时续,直到2008年年中,才完成现在使用的这个版本。

DrJs 参考了 WZ_JSGraphics 的部分思想,但代码完全是自己全新实现的,某些方面比 WZ_JSGraphics 更易用一些。WZ_JSGraphics 在速度方面做了很多工作,貌似还专门针对 IE 做过一些特别的优化,因此速度上比 DrJs 要快,不过它的各种绘图方法是独立的,用户只能使用它提供的那几种绘图方法,没法自行添加新的绘图函数。DrJs 采用了另外一种设计方法,它的核心非常简单,就是根据一个或多个方程(组)以及给定的 x 的取值范围,计算出对应的 y 的值,做连续性及合并相邻矩形处理之后,再把它转化为 div 添加到页面上。

在 DrJs 内部,所有的绘图(无论是直线、折线、椭圆、饼图)的背后都是一个个的方程或方程组,即:y = f(x), x ∈ [a, b] 。用户可以通过添加自定义方程(组)的方法来扩展 DrJs 的功能,因此原则上,DrJs 可以在有限精度下实现任意复杂图形的绘制。当然,我内置的方程组并不多,只有常用的点、直线、折线、多边形、矩形、椭圆、扇形、字符串、图片、方框,其中 扇形的实现最为复杂。另外还预设了直方图、饼图、折线图三种统计图表。

三、Div 版机器猫

有 DrJs 作基础,用 div 在网页上堆图像就简单多了,比如说用它来画一个机器猫。应该说,机器猫是一个非常适合用程序来画的形象,因为它主要由圆(包括椭圆、圆弧)、简单的多边形以及直线组成。具体的绘制过程就不详述了,在演示页面右键查看源代码就能看到,简单来说就是使用 DrJs 在指定的地方做画圆画线等操作,最后组成一个机器猫的形象。

第一次画完之时一共用了 2007 个 div,这时我想,既然今年是 2010 年,就再多凑出 3 个 div 来吧,于是改了一些参数,现在大家看到的机器猫刚好使用了 2010 个 div。

可以看到,这个机器猫的形象很简单,有点象素画的风格,而且没有阴影,除了鼻子外也没有高光,看起来没有立体感。虽然我可以继续添加细节,为它 加上阴影、高光,让它看起来更加生动,但即使是现在这么一个简单的形象,也使用了 2010 个 div 才堆出来,要继续细化下去需要更多的 div(当然,如果仅仅只是想画出这样一幅机器猫的图像,而不考虑制作一个较为通用的 DOM 画图工具,一定是可以用更少的 div 实现的),所以,就到这儿为止吧。

使用 DOM 方法当然也是能实现网页绘画的,但这是一种典型的滥用,DOM 并非为画图而设计的,使用它来画图虽然技术上可行,但成本太高。不过,强大的 HTML5/CSS3 已经到来了,对于前端开发来说,在网页上绘画也有了更多更优雅更高效的方法。对 DOM 绘画的复古回忆就进行到这儿了,接下来让我们一起探索 HTML5/CSS3 的时代吧!

最后,再贴一下演示地址:http://oldj.net/static/drjs/doraemon.html

Sublimevideo-支持移动平台的HTML5播放器

Jilion是一支来自瑞士的专注于HTML5和手机平台开发的团队, 他们最新开发了一个基于HTML5的播放器 – Sublimevideo。

SublimeVideo HTML5 Video Player

SublimeVideo HTML5 Video Player

  • 项目名称: Sublimevideo
  • 官方网址: http://sublimevideo.net/
  • 播放器特点: 独立开发的JS库 ,没有依赖任何现成的JS库,支持快进,快退,时间轴拖动,全屏;支持移动设备(Iphone, Ipad, Android) 。
  • 开发团队: http://www.jilion.com

“性感”的CSS链接翻转

鼠标悬停时,链接文字向左或向右舞动、倾斜。为了增强效果,为悬停状态设置不同的颜色(演示)。

.cpojer-links a	{
	display: inline-block;
	padding: 4px;
	outline: 0;
	color: #3a599d;
	-webkit-transition-duration: 0.25s;
	-moz-transition-duration: 0.25s;
	-o-transition-duration: 0.25s;
	transition-duration: 0.25s;
	-webkit-transition-property: -webkit-transform;
	-moz-transition-property: -moz-transform;
	-o-transition-property: -o-transform;
	transition-property: transform;
	-webkit-transform: scale(1) rotate(0);
	-moz-transform: scale(1) rotate(0);
	-o-transform: scale(1) rotate(0);
	transform: scale(1) rotate(0);
}
.cpojer-links a:hover {
	background: #3a599d;
	text-decoration: none;
	color: #fff;
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	-o-border-radius: 4px;
	border-radius: 4px;
	-webkit-transform: scale(1.05) rotate(-1deg);
	-moz-transform: scale(1.05) rotate(-1deg);
	-o-transform: scale(1.05) rotate(-1deg);
	transform: scale(1.05) rotate(-1deg);
}
.cpojer-links a:nth-child(2n):hover {
  -webkit-transform: scale(1.05) rotate(1deg);
  -moz-transform: scale(1.05) rotate(1deg);
  -o-transform: scale(1.05) rotate(1deg);
  transform: scale(1.05) rotate(1deg);
}

主要使用的CSS3属性为圆角和翻转。CSS3圆角可以参看CSS3基础,关于CSS3动画技术,请看你需要知道的CSS3 动画技术,翻译前端观察,原文What You Need To Know About Behavioral CSS

译序:本文译自Smashingmagazine,但是原文讲述的内容有些浅,也不是很完整,前端观察在翻译的前提下,增加了更多的更系统的内容。如有不足之处,欢迎指正补充。

随着网络的发展,浏览器具有更强的渲染更高级代码的能力,我们正逐步实现跨越所有平台和浏览器的目标。我们不但可以要花费更少的时间来确保我们的盒模型在IE6中看起来正常,而且形成了鼓励创新、避免hack、重前端脚本的氛围。

网络是一个非常好的环境,也是一个有丰富的知识来分享的协作社区。我们想要有圆角,我们就实现了它;我们想要多背景图片,我们实现了它;我们想要 边框图片,我们也让它实现了。所以需求从来不是问题,否则,我们可能还都仍然在使用table来布局页面而且使用过多的代码呢。我们都知道,网络无所不能。

为网络而生

CSS 3的属性比如border-radiusbox-shadowtext-shadow在 webkit(Safari、Chrome等)和Gecko(Firefox)等先进的浏览器中的使用开始出现增长的势头。它们(这些CSS属性)已经为 用户创建更轻量的页面和更丰富的体验,而且它们可以优雅的降级。然而,这些只是CSS 3能为我们做的众多事情中的一小部分。

在本文中,我们将走的更远,看一看 变形(transformation)、转换(transition)和动画(animation)等更高级的CSS3技术。我们将涉及代码本身、浏览器支持以及一些可以正确地展示这些新属性是如何即提升你的设计又增强整体用户体验的例子。

CSS 变形(Transformation)

CSS transformation是W3C的一个草案。但当我第一次坐下来阅读它的全部特性以了解一些东西的时候,它并没有让我感到开窍。你可以想象的到,这个文档是用技术术语的撰写的,而且它更关注变形的图形(比如绘图)元素和矩阵。大一学习微积分之后就没有碰过矩阵了,我必须为本章节做很多好的旧浏览器测试以及猜测和检验。

在看完我能找到的每一个教程和大量的浏览器测试之后,我总结出一些大家都能从中获益的有用的关于CSS变形的信息。

transform

transform属性实现了一些可用SVG实现的同样的功能。它可用于内联(inline)元素和块级(block)元素。它允许我们旋转、缩放和移动元素——只需要一行CSS代码。

一些前卫设计的最大诟病就是文字不可选(必须要使用切图的方法实现)。当你熟练使用transform属性来控制文字的时候,这就不再是问题了,因为这是个纯CSS方法,所以元素内的文字会保持可选。这是CSS相对于使用图片(或背景图片)的一个巨大优势。

一些有趣而有用的变形功能:

  • rotate
    Rotate(旋转)允许你通过传递一个度数值来转动一个对象。
  • scale
    Scale是一个缩放功能,可以让任一元素变的更大。它使用正数和负数以及小数作为参数。
  • translate
    Translate就是基于X和Y 坐标重新定位元素
  • skew
    顾名思义,skew就是要将对象倾斜,参数是度数
  • matrix
    transform支持矩阵变换,就是基于X和Y 坐标重新定位元素

让我们更深入的了解每一个功能吧。

Rotate

transform属性有很多用法,其中一个就是translate(旋转)。translate就是基于角度转动一个对象并可用于内联元素和块级元素,它可以实现很酷的效果

CCS3 transform之rotate

CCS3 transform之rotate

#nav{
	-webkit-transform: rotate(-90deg);
	-moz-transform: rotate(-90deg);
	-o-transform: rotate(-90deg);
	filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
	}

请注意在IE8中(非标准模式)它需要你写成“-ms-filter”而不是“filter”。

浏览器支持

浏览器对translate的支持令人惊奇的广泛。在上面的CSS片段中,我们直接加上-webkit-和-moz-前缀然后将#nav元素旋转-90度。

相当简单吧?唯一的问题是对于一个相当重要的设计元素,如果IE不支持,很多设计师就会不情愿使用它。

幸运的是,IE有这方面的滤镜:图形旋转滤镜。它可以有4个旋转值:0, 1, 2,和3。你将不会获得和Webkit和Gecko一样的精密控制,但是至少在一定程度上保持统一(甚至IE6)。虽然这个滤镜只支持4个值,显得有些鸡肋,但是对于IE来说,聊胜于无吧。

另外,非常值得一提的是,Opera在前几天发布了Opera 10.50 pre版本,声称支持CSS3 的transition和transform。只是还是需要使用私有属性,也就是要使用前缀 -o-

scale

scale并不像你想象的那样工作:简单的缩小和放大一个元素。缩放功能同时采用宽和高两个值,这些值可以是正数、负数和小数。

正数值放大一个元素,正如你期望的那样,基于指定的宽度和高度。

负数值并不会缩小元素,而是翻转它(比如,文字被反转)然后相应的缩放它。然而,你可以使用小于1的小数(例如.5)来收缩或者缩小一个元素。

CSS3 transform之scale

CSS3 transform之scale

#nav {
/* The nav element width and height will double in size */
-webkit-transform: scale(2);
-moz-transform: scale(2);
}

#nav {
/* The nav element width will double in size, but the height will remain unchanged*/
-webkit-transform: scale(2, 1);
-moz-transform: scale(2, 1);
}

#nav {
/* The nav element width will double in size and flip horizontally,
but the height will remain unchanged */
-webkit-transform: scale(-2, 1);
-moz-transform: scale(-2, 1);
}

浏览器支持

scale属性目前只有Firefox, Safari/Chrome以及 opera 10.50支持,到目前为止没有一个IE版本支持。缩放一个对象是相当有意义的设计选择。它可以通过渐进增强来使用:hover,这可以在你的导航上添加一个小小的趣味。

#nav li a:hover{
	/* 这可以让你的导航链接在鼠标经过的时候轻微的放大 */
	-webkit-transform: scale(1.1);
	-moz-transform: scale(1.1);
	-o-transform: scale(1.1);
	}

translate

这个名称“translate(转化)”有点容易误解。它事实上是一种使用X和Y坐标值定位元素的方法。

CSS3 transform之translate

CSS3 transform之translate

#nav{
	/* 这会将nav元素向左移动10像素并向下移动20像素 */
	-moz-transform: translate(10px, 20px);
	-webkit-transform: translate(10px, 20px);
	-o-transform: translate(10px, 20px);
}

浏览器支持
translate属性目前只被Firefox, Safari/Chrome和Oprea 10.5支持,而且还要使用浏览器的私有前缀-moz- 和-webkit-。

Skew

Skew也是一个很有用的transform功能,它可以将一个对象围绕着x和y轴按照一定的角度倾斜。这和rotate的旋转不一样,rotate只是旋转,而不会让元素的形状改变。skew会让一个元素的形状改变。skew有两个参数,分别代表x和y轴的倾斜度数。

#nav{
	/* 这会将nav元素向左移动10像素并向下移动20像素 */
	-moz-transform: skew(30deg, -10deg);
	-webkit-transform: skew(30deg, -10deg);
	-o-transform: skew(30deg, -10deg);
}

浏览器支持
Skew属性目前只被Firefox, Safari/Chrome和Oprea 10.5支持,而且还要使用浏览器的私有前缀-moz- 和-webkit-。

Matrix

没错,Matrix就是矩阵,矩阵是高等数学中非常基础的一个东东,而在CSS 3中确实一个相当高级的功能,CSS 3引入matrix函数,可以非常灵活的实现上述的各种效果。它有6个参数(a,b,c,d,e,f),它事实上是一个3*3矩阵,经过该矩阵将旧的参数 转换成新值:
| a b e |
| c d f |
| 0 0 1 |

如果你有兴趣深入研究,可以看一下这里http://www.w3.org/TR/SVG/coords.html#TransformMatrixDefined,这是SVG的一个文档,但是对于matrix变换的原理是通用的。

让我们来看一个例子吧:

#nav{
	/* nav元素将会像右上角倾斜 */
	-moz-transform: matrix(1, -0.2, 0, 1, 0, 0);
	-webkit-transform: matrix(1, -0.2, 0, 1, 0, 0);
	-o-transform: matrix(1, -0.2, 0, 1, 0, 0);
}

浏览器支持

可喜的是,IE支持matrix滤镜,虽然它不支持大部分CSS3变形功能,但是使用它的这个滤镜,基本也可以实现相同的效果,不过,你要先搞明白矩阵运算再说。webkit和Firefox(3.5+)、Opera 10.5都支持该功能。

链式变形

变形常常是单独的,但是如果你想同时用到多种变形,代码也是可以快速整合的,特别是使用私有扩展。幸运的是,我们有一些内置的缩写:

#nav{
	-moz-transform: translate(10, 25);
	-webkit-transform: translate(10, 25);
	-o-transform: translate(10, 25);
	-moz-transform: rotate(90deg);
	-webkit-transform: rotate(90deg);
	-o-transform: rotate(90deg);
	-moz-transform: scale(2, 1);
	-webkit-transform: scale(2, 1);
	-o-transform: scale(2, 1);
}

这些变形可以被链到一起,从而让你的代码更高效:

#nav{
	-moz-transform: translate(10, 25) rotate(90deg) scale(2, 1);
	-webkit-transform: translate(10, 25) rotate(90deg) scale(2, 1);
	-o-transform: translate(10, 25) rotate(90deg) scale(2, 1);
}

这些属性的真正的威力是合并到一起。你可以移动、旋转、缩放并控制任何内联元素和块级元素而不使用JavaScript。一旦这些属性的支持变的更加广泛,我们就可以创建更丰富和更轻量的界面和应用。

transform-origin

transform-origin不是transform的一个子功能,但是和transform关系非常密切。它可以用来指定transform的起点,比如,rotate变形的默认起点是其中间,你可以将起点设置在左上角,或者左下角,这样rotate变形的结果就可能大不相同了。

transform-origin接受两个参数,它们可以是百分比,em,px等具体的值,也可以是left,center,right,或者 top,middle,bottom等描述性参数。几个例子:

.class1{-moz-transform-origin: 0 0;
-webkit-transform-origin: 0 0;
-o-transform-origin: 0 0;
...
}
.class2{-moz-transform-origin:100% 100%;
-webkit-transform-origin:100% 100%;
-o-transform-origin:100% 100%;
...}
.class3{-moz-transform-origin:top left;
-webkit-transform-origin:top left;
-o-transform-origin:top left;
...}

浏览器兼容性
该属性目前也只有webkit、firefox和Opera 10.5支持,而且需要添加各自的私有前缀。

transition(转换)

一个涉及到CSS属性的基本的转换就是定义和移动一个元素从它的静止状态(比如,深蓝色背景)到它的hover或者激活状态(比如,浅蓝色背景)。

转换可以和变形同时使用(以及引发诸如:hover 或:focus事件)以创建一些动画。淡出背景色彩,滑动一个元素以及让一个对象旋转都可以通过CSS转换实现。

#nav a{ background-color:red; }
	#nav a:hover, #nav a:focus{
		background-color:blue;
		/* 告诉转换去应用到background-color 属性(看起来像一个CSS 参数,不是吗? #foreshadowing)*/
		-webkit-transition-property:background-color;
		-o-transition-property:background-color;
		/* 让它持续两秒钟*/
		-webkit-transition-duration:2s;
		-o-transition-duration:2s;
}

转换的一些参数

  • transition-property

    指定转换的CSS属性名称,比如,上面的例子中,将转换应用于background-color属性。

  • transition-duration

    定义转换花费的时间(从旧属性换到新属性花费的时间)

  • transition-timing-function

    可以理解为过度效果。指定转换过程中的中间值。可以用cubic-bezier指定。当然有几个常用的内置值:ease | linear | ease-in | ease-out | ease-in-out

  • transition-delay

    这个比较容易理解,就是转换延迟的时间。时间可以为正整数、负整数和零,非零的时候必须设置单位是s(秒)或者ms(毫秒),为负数的时候,转换的动作会从该时间点开始显示,之前的动作被截断。

注:参数部分为前端观察翻译时添加,原文中没有。

浏览器支持

像transform属性一样酷,但是目前只有WebKit浏 览器支持。Opera 10.5 pre版本也可以通过添加-o-前缀来支持。-moz-transition已经在最近的nightly-build版本的Firefox 3.7中可用。你也可以添加-moz-transition到你的CSS中以实现将来的增强。甚至可以添加一个不用私有前缀的属性,以防万一。

Animation

动画是CSS 3最有用的地方。你可以将我们在上面讨论的所有的元素与动画属性比如animation-duration、animation-name 和animation-timing-function整合以创建像Flash动画一样的效果——纯CSS。

#rotate {
	margin: 0 auto;
	width: 600px;
	height: 400px;
	/* 确保我们是在一个 3-D 空间 */
	-webkit-transform-style: preserve-3d;
	/*让整个行使用x-轴旋转、7秒中的动画、无限次播放以及线性 */
	-webkit-animation-name: x-spin;
	-webkit-animation-duration: 7s;
	-webkit-animation-iteration-count: infinite;
	-webkit-animation-timing-function: linear;
}
	/* 定义要调用的动画 */
@-webkit-keyframes x-spin {
	0% { -webkit-transform: rotateX(0deg); }
	50% { -webkit-transform: rotateX(180deg); }
	100% { -webkit-transform: rotateX(360deg); }
}

这个梦幻的CSS动画代码和在线演示可以在webkit网站看到。该演示可以在任何网站看到,但是动画效果却只能在Mac os(雪豹)的WebKit的nightly build版本可见。它看起来就像上面的视频中的一样,如果你是在用mac os (雪豹版本),我认为安装一个webkit以亲眼看看这个效果是很值得的(它真的很酷)。Windows系统用户暂时无法欣赏这个效果。

animation的一些参数

animation的参数和translate有些像,所以如果你理解了translate的参数,这里就不难理解了。

  • animation-name

    动画的名称。

  • animation-duration

    定义动画播放一次需要的时间。默认为0;

  • animation-timing-function

    定义动画播放的方式,参数设置类似transition-timing-function

  • animation-delay

    定义动画开始的时间

  • animation-iteration-count

    定义循环的次数,infinite即为无限次。默认是1。

  • -webkit-animation-direction

    动画播放的方向,两个值,默认为normal,这个时候动画的每次循环都向前播放。另一个值是alternate,则第偶数次向前播放,第奇数次向反方向播放。

浏览器支持

不 幸的是,目前,只有少数浏览器支持CSS动画。2D CSS animations 可以在Safari 4 (Leopard)、Chrome 3、Safari Mobile、Shira 以及其它Webkit 浏览器中工作。Safari 4 (Snow Leopard)支持3D动画

总结

现在,JavaScript可以在CSS 3完善之前弥补这个差距。遗憾的是,让所有浏览器支持这些很棒的属性可能需要一个很长的过程。不用等待那一天的到来,我们可以先使用一些严谨的渐进增强以及以来Javascript来增强我们的网站和应用。这不是件坏事,至少现在看起来是。

看了最近的IE9的公告,如果IE团队添加这些属性中的一些到这个新的版本的浏览器中我不会感到惊讶,他们已经开始考虑整合CSS3了(border-radius)。

web的前景是光明的,特别是因为这些类似动画的高度实验性的属性。尽管很多属性对客户或高级产品工作还不可用,至少他们很有趣!我们都期待着有一天,我们可以支持所有平台,以建立一些真的很棒的轻量级应用。

参考与资源

关于原作者

Tim Wright是一位网页设计师/开发工程师和博主。他从2004年就成为一名web标准和易用性的倡导者。你可以在CSSKarma.com上找到他写的更多文章,或者follow Tim on Twitter

7个提高用户体验的CSS技巧

CSS之美在于能通过少量的声明并可使网页变得很与众不同。下面是7个CSS小技巧,可以让你的网页更加时尚,让用户获得更佳的用户体验和浏览愉悦感。

改变选中文字的默认颜色

selection { background:#c3effd; color:#000; /* Safari and Opera */ }
-moz-selection  { background:#c3effd; color:#000; /* Firefox */ }

选中文字的颜色一般默认是海军蓝(至少Windows是这样的),Firefox、Opera、Safari(Webkit)允许用户定义选中文字的颜色。

禁止浏览器Firefox、Webkit、Opera滚动条自动隐藏

html { overflow-y:scroll; }

Firefox、Webkit、Opera等浏览器在网页内容不超过一屏时,会自动隐藏滚动条,这也算合情合理,但在网页间切换时会有跳跃感,如果你不喜欢,就用让滚动条一直显示吧。

圆角(参见CSS3相关文章

input{ -moz-border-radius:10px; -webkit-border-radius:10px; }

分页打印(演示

.page-break{ page-break-before:always; }

如果内容过长,则可以使用此属性帮用户分好页,避免浏览器自动分页过于混乱。(译者注:此功能在Tab标签中应该很有用。)

为不同类型的链接添加不同的图标(参见CSS3选择符

a[href$='.pdf'] { padding:0 20px 0 0; background:transparent url(/graphics/icons/pdf.gif) no-repeat center right; }

如果是一个pdf文件则添加一个pdf的小图标,以此类推。

CSS鼠标指针(CSS3选择符

input[type=submit],label,select,.pointer{ cursor:pointer; }

当鼠标移动到可点击的非锚点元素上时鼠标指针变为手形。

块状显示连接

navigation li a{ display:block; }

使用CSS3实现Faux列

这是一个CSS3的小技巧,不使用图片便实现Faux Columns。边栏在布局中的问题是它不能随着内容的扩展而延伸到相等的高度。常规的方法是创建一个图片背景应用到内容的父容器上。本文将介绍如何使用CSS3渐变实现相同的效果。

旧的方法

先来回顾一下让边栏背景沿着页面延伸的常规方法。根据来自Alistapart的文章,作者使用了一个几像素高的背景图片,图片上的背景颜色和内容栏、边栏的宽度一样,如下图:

Dan Cederholm创建的Faux列

Dan Cederholm创建的Faux列

背景图片应用在内容栏和边栏的容器上并垂直重复:

background: url(images/bg.jpg) repeat-y;

这种方法在网页设计中已经使用了6年了,很不错,对吧?

使用CSS3实现

CSS3的渐变属性是一个很了不起的技术,我们可以用这个属性实现想要的效果,取代图片来加速网站。使用CSS3,可以生成超过两种颜色的背景。回到边栏背景上来,我们将使用2种颜色生成容器背景并分隔成两列。

CSS3渐变实现Faux列

CSS3渐变实现Faux列

针对Webkit浏览器使用的代码:

background: -webkit-gradient(linear, right top, left top, color-stop(0.30, #000000), color-stop(0.70, #FFFFFF));

上面声明的“Color-stops”决定渐变中每个颜色的过渡点,简言之,黑色从容器左边70%开始然后过渡,白色从容器30%的地方开始填充。如果不指定颜色过渡点,默认为50%。

如果指定相同的过渡点:

background: -webkit-gradient(linear, right top, left top, color-stop(0.30, #000000), color-stop(0.30, #FFFFFF));

结果如下:

CSS3渐变实现Faux列

CSS3渐变实现Faux列

上面的color-stop表明:左侧应该在渐变长30%的点填充黑色,但是白色也是从30%的点开始填充,所以没有两种颜色混合的空间。

针对Firefox的样式:

background: -moz-linear-gradient(right center, #000000 30%, #FFFFFF 30%);

一点说明

因为Opera不支持CSS3渐变、Internet Explorer的渐变滤镜没有颜色过渡点(color-stop)功能,所以这个技术仅对Firefox和Webkit浏览器有效。

当然,在CSS渐变被普遍支持之前,可以通过背景图片来为不支持的浏览器预留退路。

background: url(images/bg.jpg) repeat-y;
background: -webkit-gradient(linear, right top, left top, color-stop(0.30, #000000), color-stop(0.30, #FFFFFF));
background: -moz-linear-gradient(right center, #000000 30%, #FFFFFF 30%);

CSS3 Media Queries 详解

说起CSS3的新特性,就不得不提到 Media Queries

本文比较详细,所以很多实际中用不到。所以如果只是想简单了解Media Queries,推荐参考 CSS3 Media Queries

CSS2.1定义了 Media 的部分,包括类型、组别和规则等。CSS并非为了显示器而创造,而是应用于各种各样的媒体,比如常见的显示器,越来愈多的手持设备,可能略显过时的电视机等等。

而 Media Queries 的引入,其作用就是允许添加表达式用以确定媒体的情况,以此来应用不同的样式表。换句话说,其允许我们在不改变内容的情况下,改变页面的布局以精确适应不 同的设备,以此加强体验。所以Media Queries和CSS优化没有关系,甚至是矛盾的。

引用CSS3 Media Queries里的直观的 DEMO,当浏览器宽度改变时,应用的CSS发生变化。而这些,原本需要 JavaScript 的控制才能做到。

Web移动化的趋势越加明显。虽然国内受到很多制约,但是这种浪潮却无法阻挡。前段时间jQuery宣布mobile项目,也加速了这种变化。 Media Queries 不久的将来应该就会被更多的使用,以更好的支持新兴设备比如iPad。事实上, jQuery 甚至有 Media Queries的插件

看看 Media Queries 做了什么

Media Queries 做了什么

Media Queries 做了什么

一个三栏布局,在屏幕变窄的情况下,变成1栏布局,甚至是消除多余两栏而只留下通常的内容的第2栏。Media Queries是如何工作的?先看看 link 标签的写法:

<link rel="stylesheet" type="text/css" href="swordair.css" media="screen and (min-width: 400px)">

在media属性里:

  • screen 是媒体类型里的一种,CSS2.1定义了10种媒体类型
  • and 被称为关键字,其他关键字还包括 not(排除某种设备),only(限定某种设备)
  • (min-width: 400px) 就是媒体特性,其被放置在一对圆括号中。完整的特性参看 相关的Media features部分

媒体特性共13种,可以说是一个类似CSS属性的集合。但和CSS属性不同的是,媒体特性只接受单个的逻辑表达式作为其值,或者没有值。并且其中的 大部分接受 min/max 的前缀,用来表示 大于等于/小于等于 的逻辑,以此避免使用 &lt; 和 &gt; 这些字符。

CSS媒体特性

CSS媒体特性

那么,回到刚才的那条 Media Query,media="screen and (min-width: 400px)" 的意思就是当屏幕的宽度大于等于400px的时候,应用此条CSS。

一个 Media Query 包含一种媒体类型,如果媒体类型没有指定,那么就是默认类型all,比如:


<link rel="stylesheet" type="text/css" href="example.css"
media="(max-width: 600px)">

一个 Media Query 包含0到多个表达式,表达式又包含0到多个关键字,以及一种媒体特性,比如:

<link rel="stylesheet" type="text/css" href="example.css"
media="handheld and (min-width:20em) and (max-width:50em)">

逗号(,)被用来表示并列,表示或者。比如下面的例子表示此CSS被应用于宽度小于20em的手持,或者宽度小于30em的屏幕:

<link rel="stylesheet" type="text/css" href="example.css"
media="handheld and (max-width:20em), screen and (max-width:30em)">

not 关键字用来排除符合表达式的设备,比如:

<link rel="stylesheet" type="text/css" href="example.css"
media="not screen and (color)">

再看些其他例子(不准确,只是用来说明):

<link rel="stylesheet" type="text/css" href="styleA.css"
media="screen and (min-width: 800px)">
<link rel="stylesheet" type="text/css" href="styleB.css"
media="screen and (min-width: 600px) and (max-width: 800px)">
<link rel="stylesheet" type="text/css" href="styleC.css"
media="screen and (max-width: 600px)">

上面将设备分成3种,分别是宽度大于800px时,应用styleA,宽度在600px到800px之间时应用styleB,以及宽度小于 600px时应用styleC。这其实是一个CSS覆盖的问题,所以当宽度正好等于800px时该应用那个样式?答案是styleB,因为前两条表达式都 成立,后者覆盖了前者。

所以说上面的例子虽然能工作,但是不准确。这个例子正常情况应该这样写:

<link rel="stylesheet" type="text/css" href="styleA.css"
media="screen">
<link rel="stylesheet" type="text/css" href="styleB.css"
media="screen and (max-width: 800px)">
<link rel="stylesheet" type="text/css" href="styleC.css"
media="screen and (max-width: 600px)">

并非所有的浏览器都支持Media Queries,那么这些浏览器怎么看待Media Queries?

Media Queries是CSS3对于Media Type的一个扩展,所以不支持Media Queries的浏览器,应该仍然要识别Media Type,但是IE只是简单的忽略了样式。only 关键字可能显得有些多余,对支持Media Queries的浏览器来说确实是这样,因为加不加 only 没有影响。only的作用,很多时候是用来对那些不支持Media Queries但是却读取Media Type的设备隐藏样式表的。比如:

<link rel="stylesheet" type="text/css" href="example.css" media="only screen and (color)">
  • 支持Media Queries的设备,正确应用样式,就仿佛only不存在
  • 不支持Media Queries但正确读取Media Type的设备,由于先读取到only而不是screen,将忽略这个样式
  • 不支持Media Queries的IE不论是否有only,都忽略样式

最后再来看看 Media Queries 的支持情况。不出意外的,IE6/7/8全部出局,但是IE9幸免。根据IEBlog上的这篇 HTML5 and Same Markup 来看,IE9支持Media Queries。至于其他浏览器,同样不出意外的,全部支持Media Queries。

Media Queries浏览器支持情况

Media Queries浏览器支持情况

其他定义media的方法比如@media等,应用Media Queries的方法相同,所以不在重复叙述。水平有限,如有问题请指出给我,谢谢:)

经典论坛交流:http://bbs.blueidea.com/thread-2996434-1-1.html

来源:蓝色理想 - CSS3 Media Queries 详解

CSS3 Media Queries

CSS2允许为特定的媒体指定样式表,如screen(屏幕)和print(打印),CSS3通过添加media queries(媒体查询库)使其更加有效。CSS3可以通过添加查询语句来确定不同的媒体类型,应用不同的样式表。例如为大的显示器指定一个样式表,为移动设备指定另一个样式表。有了这一强大的技术,我们可以在不改变内容的情况下为不同的分辨率和设备量身定制样式。本文接下来将介绍media queries教程,参看一些充分利用该技术的网站。

CSS3 Media Queries (demo)

查看演示,调整浏览器窗口大小以验证不同分辨率下的效果。

Max Width(最大宽度)

当浏览器可视区域小于600px时将应用下面的样式。

@media screen and (max-width: 600px) {
  .class {
    background: #ccc;
  }
}

如果想链接到独立的样式表,将以下代码放在<head>标签内即可。

<link rel="stylesheet" media="screen and (max-width: 600px)" href="small.css" />

Min Width(最小宽度)

当可视区域大于900px时将应用下面的样式。

@media screen and (min-width: 900px) {
  .class {
    background: #666;
  }
}

多重Media Queries

可以多个media queries结合使用,可视区域介于600px-900px时将应用下面的代码。

@media screen and (min-width: 600px) and (max-width: 900px) {
  .class {
    background: #333;
  }
}

设备宽度(Device Width)

如果max-device-width等于480px时将应用下面的代码(例如iPhone的屏幕)。注意:max-device-width指设备的实际分辨率,max-width则指的是可视区域的分辨率。

@media screen and (max-device-width: 480px) {
.class {
background: #000;
}
}

用于iPhone 4

下面的样式是专门用于iPhone 4的(credits: Thomas Maier)。

<link rel="stylesheet" media="only screen and (-webkit-min-device-pixel-ratio: 2)" type="text/css" href="iphone4.css" />

用于iPad

可以通过媒体库查询探测iPad的屏幕方向(竖屏或横屏)(credits: Cloud Four)。

<link rel="stylesheet" media="all and (orientation:portrait)" href="portrait.css">
<link rel="stylesheet" media="all and (orientation:landscape)" href="landscape.css">

用于Internet Explorer的Media Queries

很不幸,Internet Explorer 9以前的版本的都不支持媒体查询,只能通过Javascript实现,下面是一些解决方案:

网站案例

下面的网站需要使用诸如Firefox、Chrome、Safari等支持media queries的浏览器查看(才能看到效果),注意观察不同浏览器窗口大小布局的变化。

Hicksdesign

  • 大尺寸:三列边栏
  • 较小尺寸: 两列边栏(中间的边栏掉到左边栏下面)
  • 更小:1列边栏(最右边的一列上移到Logo下面)
  • 最小:没有边栏(Logo和最右边的一列上移,另两列下移)
CSS3 Media Queries

Hicksdesign在不同浏览器窗口大小下的效果

Colly

根据不同的浏览器可视区域,布局在一列、两列、四列间切换。

CSS3 Media Queries

Colly根据不同浏览器可视区域切换布局

A List Apart

  • 大尺寸:导航在顶部,图片显示为一行
  • 中号尺寸:导航在左边,图片三列显示
  • 小尺寸:导航在顶部,没有背景及Logo,图片三列显示
CSS3 Media Queries在中的应用A List Apart

CSS3 Media Queries在中的应用A List Apart

Tee Gallery

和上面的Colly相似,不同的是TeeGallery的图片尺寸随着布局变化而变化,技巧是使用相对的百分比而不是固定的像素值(例如width=100%)。

CSS3 Media Queries

CSS3 Media Queries在TeeGallery中的应用

总结

记住:有一个针对移动设备优化的样式表不等于网站针对移动网络优化。缩减载入图片和代码的大小才是真正的优化。Media queries只是设计网页表现,不是优化。

CSS3 Media Query:移动 Web 的完美开端

移动时代,是任何 Web 设计与开发者都不能忽视的一个时代,总有一天,你设计的东西将被显示在两种屏幕上,桌面大屏幕和移动小屏幕,如何让同一个网站同时适应完全不同的两种尺寸 的屏幕,这是一个很久以来都没有完美解决方案的问题,直到有了 CSS3。

CSS3 的 Media Queries

在 CSS2 时代,如果你曾经为你的网站设计过打印版 CSS,就会明白 CSS3 Media Queries 的作用,不过,CSS3 的 Media Queries 比 CSS2 的 Media Type 更实用,事实上,CSS2 的 Media Type 并不曾被多少设备所支持过。CSS3 的 Media Queries 可以帮你获取以下数据:

  • 浏览器窗口的宽和高
  • 设备的宽和高
  • 设备的手持方向,横向还是竖向
  • 分辨率

如果用户有一个支持 Media Queries 的设备,我们就可以为该设备编写专门的 CSS,让网站适应这个设备的小屏幕,英国的 Web 技术大会 dConstruct 便基于该技术推出他们的 2010 年大会网站,手机也可以轻松访问,以下是该网站的桌面版和手机版截图:

CSS3 Media Query:移动 Web 的完美开端

CSS3 Media Query:移动 Web 的完美开端

dconstruct网站在iPhone上的显示效果

这个网站在不同尺寸的设备上按不同的布局显示,并且,手机版在 iPhone,Opera Mini, Android 等设备上有完全一致的表现。

使用 Media Queries 为手机创建单独的 CSS

我们举一个简单的两栏式结构的例子。

CSS3 Media Query:移动 Web 的完美开端

一个简单的两栏布局网页

为了让这个布局更好地在手机上显示,我们为手机版设计一个一栏式布局,且缩小 header 部分的图片大小。

使用 Media Queries 最直接的方法是,在你的 CSS 代码中,加一段独立代码分支,如下:

@media only screen and (max-device-width: 480px) {

}

接着,在这个分支中,为小屏幕编写独立的 CSS 定义,这些定义可以覆盖桌面版 CSS 中的相应定义(只要将这段分支代码放在后面),以下针对小屏幕的 CSS 将布局变成一栏式,且使用了小尺寸的 Header 图片:


@media only screen and (max-device-width: 480px) {
	div#wrapper {
		width: 400px;
	}

	div#header {
		background-image: url(media-queries-phone.jpg);
		height: 93px;
		position: relative;
	}

	div#header h1 {
		font-size: 140%;
	}

	#content {
		float: none;
		width: 100%;
	}

	#navigation {
		float:none;
		width: auto;
	}
}

最终,我们在小屏幕设备上得到了如下显示效果:

CSS3 Media Query:移动 Web 的完美开端

CSS3 Media Query定义后在iPhone上的显示效果

使用 Media Queries 链接单独的 CSS 文件

对于小型的改动,直接在 CSS 代码中插入移动设备代码分支是很方便的,但对于大型站点,可以使用 Media Queries 链接独立的式样表文件,以便在独立的式样表文件中完全自由地为小设备编写 CSS 代码,方法如下:

<link rel="stylesheet" type="text/css" media="only screen and (max-device-width: 480px)" href="small-device.css" />

测试 Media Queries

要在不同设备上测试 Media Queries 并非易事,你要有各种设备,还要将代码上传到某个主机进行访问测试。这里有一个在线服务,ProtoFluid, 该服务允许你提供你要测试的网站的 URL,或者你本机上的 URL,然后,模拟 iPhone 等移动设备显示你的设计,下图是上文中提到的 dConstruct 网站在 ProtoFluid 的 iPhone 模拟中显示的样子。你也可以填写你自己的窗口尺寸,来模拟特定的设备。

dConstruct 2010网站在ProtoFluid预览

dConstruct 2010网站在ProtoFluid预览

在 ProtoFluid 使用 Media Queries,你需要同时加上 max-width 和 max-device-width 属性,这意味着,Media Queires 不仅可以针对不同的移动设备,还可以针对桌面系统中某些人为的小窗口情形。

@media only screen and (max-width: 480px), only screen and (max-device-width: 480px) {

}

使用上面的代码,在桌面浏览器上,当你改变窗口尺寸到达 480 像素的时候,就会看到布局的改变。需要注意的是,上面的 max-width 部分仅仅为了测试,如果你不希望用户在桌面浏览器中因为改变了窗口大小而导致你的布局改变,可以去掉 max-width 部分,而只针对那些移动设备。

对现有网站的整改

上面的例子为了说明问题起见都很简单,现实中的站点不可能这样,下面的例子,作者将使用他自己的公司网站,说明如何使用 Media Queries 对现有网站进行移动化整改。

桌面布局

作者自己的网站是几年前设计的,那是还没有考虑 Media Queries 问题,这是一个三栏式布局。

CSS3 Media Query:移动 Web 的完美开端

edgeofmyseat在桌面浏览器中预览

增加新的式样表

为了适应移动设备,将使用 Media Queries 加载独立的式样表:

<link rel="stylesheet" type="text/css" media="only screen and (max-width: 480px), only screen and (max-device-width: 480px)" href="/assets/css/small-device.css" />

作者的做法是,将他站点中原来的 CSS 文件另存为 small-device.css ,在这个基础上针对移动设备进行整改。

压缩 Header 部分

第一步是让 Logo 部分能在小屏幕上显示,因为这个 Logo 是基于背景图片的,因此很好办,同时,提供一个小尺寸的背景图,以便和 Logo 搭配。

body {
	background-image: url(/img/small-bg.png);
}

#wrapper {
	width: auto;
	margin: auto;
	text-align: left;
	background-image: url(/img/small-logo.png);
	background-position: left 5px;
	background-repeat: no-repeat;
	min-height: 400px;
}

单列式布局

下一步主要的工作是将多栏式布局换成单栏式,桌面版使用 Float 实现多栏布局,要改成单栏,只需将 float 设置为 float:none,并将 width 设置为 width:auto,这样,就实现了单列式布局。

.article #aside {
	float: none;
	width: auto;
}

再紧凑一些

然后,将margin 和 padding 进行调整,使之更紧凑一些:

在ProtoFluid中测试

在ProtoFluid中测试

在 iPhone 中测试

在 iPhone 中实际测试的时候,发现网站在单列式布局中仍然向外延伸了,从 Safari developer website 找到解决办法,在网站头,添加一个 meta tag,将网站的视窗宽度设置成何设备一致。

<meta name="viewport" content="width=device-width" />
在iPhone中测试

在iPhone中测试

更多资源

在旧浏览器上支持 Media Queries

如果你面向的访问者是 iPhone, Opera Mini 等移动设备,这没有问题,对于那些不支持 Media Queries 的浏览器(像 IE6/7/8),以下文章或许对你有帮助。

更多示例

Jon Hicks 在 Hicksdesign 基于 Media Queries 实现了非常好的浏览体验,不仅针对移动设备,还面向那些拥有小屏幕的桌面系统。另外,还可以看看 Simon Collison’s website 以及 Ed Merritt’s portfolio 这些网站中对这种技术的运用。

本文作者

Rachel Andrew

Rachel Andrew 是一名 Web 前端设计师与后端开发者,是一家英国 Web 开发顾问公司 edgeofmyseat.com 的主管,她还是一款小型 CMS 系统 Perch 的设计者。她写过多本 Web 开发与设计相关的书,包括由 SitePoint 出版的 CSS Anthology: 101 Essential Tips, Tricks and Hacks,她的个人博客是 rachelandrew.co.uk

原文:Smashing Magazine How To Use CSS3 Media Queries To Create a Mobile Version of Your Website

翻译:锐商企业CMS 网站内容管理系统