冒泡动画按钮的简单实现(使用CSS3)
原始的参考文章是 http://tutorialzine.com/2010/10/css3-animated-bubble-buttons/ ,基本原理是利用了 hover,background-position 和 transition 三个属性。
原文给出的实现细致完整,但是对于理解关键的实现原理不便,我按照原文的思路给出一种简单实现,效果可以可见http://jsbin.com/UbIJUfA/1/ 。
代码如下(这段代码只能在Chromium类浏览器工作):
<!DOCTYPE html> <html> <style> .btn { padding: 10px 20px; background-color: rgb(0, 162, 255); background-image: url("http://demo.tutorialzine.com/2010/10/css3-animated-bubble-buttons/buttons/button_bg.png"); background-position:bottom left; -webkit-transition: background-position 1s; } .btn:hover{ background-position:top left; } </style> <p><a href="javascript:;" class="btn">Here!</a></p> </html>
实现原理简单说来:
首先是使用hover伪类和background-position,使得按钮在鼠标滑入和滑出时按钮背景产生“变化”,然后是用transition属性把这个变化“放慢”从而产生“动画”。hover常被用来产生对鼠标滑过的感应动画效果。在本例中,background-image是一张尺寸比较大的带气泡图案的图片,hover的作用是设定background-position属性,让鼠标滑入时背景图片的显示区域从底部(bottom)移动到顶部(top),滑出时相反。由于hover对属性的修改是瞬间完成的,所以需要配合transition的“减速”作用(当然实际情况可能是浏览器做为此生成了补间动画)。
在原文中,作者还设置了其他属性使得按钮更美观和具有普适性,还有些代码是为了兼容多种浏览器,因此其余部分代码也是值得学习研究一番的。
如果你是一位资深的前端工程师,你可以飘过。如若你总是因为浏览器兼容性问题而苦恼,那么你可以看一下以下整理的内容,并根据DEMO进行测试,或许会有一定的收获。
CSS HACK 汇总
IE CSS HACK
在所有浏览器中,对标准支持最乱的是IE,更新最慢的也是IE,用户群(国内)最多的仍数IE。泥吗,在IE上做开发完全就是程序员折腾程序员。抱怨还是放一边吧!下面切入正题!
IE中的条件注释
IE中的条件注释可以很容易的检测到早期版本的Windows Internet Explorer。条件注释可以很容易的把IE和其它非IE浏览器区分开来,并且可以针对IE的不同版本来进行书写特定的样式和HTML结构。不过要特别注意:在IE 10+,标准模式下不再支持条件注释(解决方案基于功能检测)。
条件注释语法及应用
注释类型 | 语法或可能值 |
---|---|
标准的HTML注释 | <!-- 注释内容 --> |
下层隐藏 | <!--[if expression]> 相应代码 <![endif]--> |
下层显示 | <![if expression]> 相应代码 <![endif]> |
下面是其中的表达式可以对以下几项(IE版本,操作系统版本)进行判断
项 | 实例 | 作用 |
---|---|---|
! | [if !IE] | 非操作。对最后匹配结果进行取反。实例表示非IE浏览器。 |
lt | [if lt IE 5.5] | lt是less than的缩写,即判断返回值小于时执行。实例表示在所有版本低于IE 5.5的IE中执行。 |
lte | [if lte IE 6] | lte是less than or equal的缩写,即判断返回值要小于或等于时执行。 |
gt | [if gt IE 5] | gt是greater than的缩写,即判断返回值要大于时才执行。 |
gte | [if gte IE 7] | gte是greater than or equal的缩写,即判断返回值要大于或等于时才执行。 |
( ) | [if !(IE 7)] | 子表达式,用来构建更加复杂的表达式。 |
& | [if (gt IE 5)&(lt IE 7)] | 取与操作。对前后两个表达式的值取与。 |
| | [if (IE 6)|(IE 7)] | 或操作。对前后两个表达式取或操作。 |
下面就来几个例子:
1、只为IE6指定样式的方法(为IE9以上的版本不可以采用条件注释)
<!--[if IE 6]> <style type="text/css"> #mine { 300px; height:200px; } </style> <![endif]-->
2、为IE 8、9指定样式
<!--[if (IE 8) | (IE 9)]> <style type="text/css"> #mine { 300px; height:200px; } </style> <![endif]-->
注意事项
- 特别注意,IE条件句在IE 10标准模式下不再支持。
- IE的条件判断语句仅适用于IE浏览器 ,并且位置必须放在相应的HTML文件中,在CSS文件或其它文件将会引起错误。
- 判断浏览器版本都是一个粗的判断,你可以指定一个4位数的小数进行判断。如:
[if IE 5.5000]
- 对于判断语句,并不是完全根据浏览器版本来进行判断,而是根据IE浏览器的渲染版本进行判断的。如:
<meta content="IE=EmulateIE7" http-equiv="X-UA-Compatible"/>
,代码就是让所有版本高于7的IE都以IE的模式进行渲染,故就会被判断为IE 7。
CSS 解析器 Hacks 区分 IE
虽然IE的条件注释语句在某种程序上为我们提供了方便,但是却很难让我们把样式放置到同一个CSS文件中。。。那么下面,我们就来了解一下IE中CSS解释器HACK对各版本的支持情况。(以下表格中的检测结果是基于IE浏览器的标准渲染模式,若有错误,请留言指出,我会立即更正。)
标识 | IE版本 | 示例 | ||||
---|---|---|---|---|---|---|
IE 6 | IE 7 | IE 8 | IE 9 | IE 10 | ||
_ | 支持 | 不支持 | 不支持 | 不支持 | 不支持 | {_display:none;} |
+ | 支持 | 支持 | 不支持 | 不支持 | 不支持 | {+display:none;} |
* | 支持 | 支持 | 不支持 | 不支持 | 不支持 | {*display:none;} |
# | 支持 | 支持 | 不支持 | 不支持 | 不支持 | {#display:none;} |
*- | 支持 | 不支持 | 不支持 | 不支持 | 不支持 | {*-display:none;} |
*+ | 不支持 | 支持 | 不支持 | 不支持 | 不支持 | {*+display:none;} |