重新想,重新看——CSS3变形,过渡与动画①
学习CSS3,觉得最难记忆的部分除了flex特性之外,就要属变形,过渡和动画部分了。作为初学者,总有种犯懒的心理,想着既然IE8浏览器都不完全支持CSS动画属性,还要考虑浏览器兼容问题,那么就不那么着急学,一旦有需求使用JS勉强应付即可。但后来就渐渐觉得心慌,看大家都在争相谈论使用CSS3的动画,做出一个个惊艳的效果。觉得这种想法真是害人,哪有程序员不向前看而呆在自己的舒适圈里坐井观天呢?手机端H5页面各种在用CSS动画,网页也使用CSS动画大大提升了页面性能,减少了JS代码负担,提高了效率,实在是没有理由在自欺欺人的将这些新理由拒之门外,于是我便打算重新完整的学习一下CSS这些新的属性,将知识系统的整理一遍,并在这过程中将想到的一些问题,一些心得记录下来。
我学习的主要参考是大漠撰写的《图解CSS3核心技术与案例实战》一书,预计分为5个部分,第一个部分主要简单的谈谈自己对这些CSS3新属性的思考与理解,第二部分着重梳理CSS3变形属性的知识点,随后的两个部分依次对CSS3过渡、动画的知识点进行梳理,在最后一个部分中,我会将我实际运用CSS3变形、过渡、动画属性做出的效果进行展示,并对实际运用中产生的种种问题进行梳理和总结,自然,第一部分和最后一部分是会不断更新的,希望有朝一日我可以达到不再更新的程度。
以下是这一系列文章的一个大体的框架:
- 对CSS3变形,过渡和动画属性的思考;
- CSS3变形属性探讨;
- CSS3过渡属性探讨;
- CSS3动画属性探讨;
- CSS变形,过渡和动画属性的实际应用与问题;
为了节约篇幅,就在此直接开始第一部分——对CSS3变形,过渡和动画属性的思考。
从整个知识体系而言,对于惯用CSS2的前端开发人员而言,CSS3的flex属性和本文介绍的变形,过渡,动画属性无疑是最陌生的,因此也造成了学习曲线较为陡峭,之所以之前对这些属性有点不上心除了浏览器兼容问题外,其实还是自以为动画用jQuery也可以完成,而且三个属性纠缠在一起一时很难分辨的清。但现在想来,这些偏见似乎都很有进一步思考的必要,思考清楚之后固本清源,似乎就能够对CSS3的这些新属性有一层更加深入的认识。
1.对变形,过渡,动画属性的认识
(1)变形属性
因为属性名为transform,因此中文翻译为"变形",私以为比较贴切,属性的作用也可以顾名思义,用于改变元素的位置,大小和形状。变形属性我认为有四个特点:
- ① 使用函数;
- ② 主要服务于动画;
- ③用于改变元素(盒子)的位置,大小和形状;
- ④ 为元素建立了3D空间,使得元素拥有了变形的另外两个重要控制:远近和透视角度。至此,通过变形属性,我们可以对元素(盒子)进行更多的操控,元素的表现方式被大大扩展了。
学习的难点除了在于记忆各种变形函数的名称和使用方式外,还必须深刻理解元素在3D环境下的呈现方式,当然,还需要勤加练习方能熟而生巧。
(2)过渡属性
过渡属性名为transition,有"过渡,变换"之意,实际上的作用也是如此,其作用在于在指定的时间内,用指定的速率,将指定的元素属性的值从值A过渡为值B,同时,允许时间上的延迟。因此从作用上看,要使用过渡必须要有的条件有三个:同一属性的两个值,触发过渡,过渡的时间。过渡的本质大概在于"监听",紧紧盯住某个元素属性值的变化,并在一定时间内反映出来。其实我认为过渡也属于一种动画,毕竟有"动"的成分在里面,但之所以还需要额外的一个"动画属性"则在于,过渡属性只能处理元素属性值从A到B的过程,而真正的动画往往需要多帧,即某属性值从A到B再到C的过程,这种情况显然是过渡属性无法处理的。
(3)动画属性
在前面也提到过,动画属性主要通过为元素属性添加"帧数"来实现动画效果,具体的实现方式将在之后谈及,这里就不再赘述。
2.关于结构、样式和行为的分离
从第一次接触前端技术就被反反复复灌输结构、样式和行为分离有多么政治正确,多么高效。因此在第一次接触CSS3这三个属性时就本能的产生疑惑,动画?这不是行为吗?那不是应该由JS来实现吗?为什么用CSS去做?特别是看到一些代码中使用CSS3+JS实现动画效果,这种疑惑就愈演愈烈了。
但是仔细一想,又觉得其实是自己走进了误区,没有本质上理解结构,样式和行为分离的含义,我们都知道HTML控制页面的结构和语义,CSS用来控制页面的样式,JS控制页面的行为,三者各司其职,因此在开发工程中彼此相对独立,维护起来会比较高效。但是,什么是样式?什么又是行为呢?我以为两者的分界线在于"交互",那什么是交互呢?即页面需要用户的主动行为产生改变,而用户需要得到页面的反馈进行可能的下一步行为。因此不需要人与页面交互的属于样式,应该由CSS来实现,需要人与页面交互的则需要JS来完成。
这么看来,动画则完全应该隶属于不需要交互的"样式"范畴,理所应当由CSS实现。但是如果我们进一步思考,就会对以上提到的分类方法产生疑问,为什么分界要是"交互"呢,我是这样理解的,因为"交互"存在着不确定性,而一门程序语言的作用就是通过编程让机器处理各种不确定性的过程。因此对于HTML,CSS,JS这三门语言而言,唯有JS有这个能力处理这种不确定性,因此由JS负责交互的部分。这也就解释了为什么CSS中hover等属性含有"交互"色彩却未受太多争议的问题,因为hover太简单,太实用了,不具备不确定性。我想,未来的前端发展,一定是将越来越多可以通用的,简单的,成熟的效果推向CSS,以简化前端开发人员的开发压力,节约开发者的时间使其能够更多的考虑如何实现更好的交互效果。
以上。
重新想,重新看——CSS3变形,过渡与动画①的更多相关文章
- 重新想,重新看——CSS3变形,过渡与动画④
最后,我们来探讨一下CSS3的动画属性. 之前提到过,实际上过渡也算作动画的一种.但过渡作为动画的缺陷在于,只能使元素属性从一个值“过渡”至另一个值,但如果想要使元素的属性值根据需要在时间轴上不断变化 ...
- 重新想,重新看——CSS3变形,过渡与动画③
这一篇主要谈谈CSS3的过渡属性. 过渡属性被设计的十分通俗易懂,属性写法为transition,有四个子属性: <transition-property> 表示需要过渡的属性[必须](本 ...
- 重新想,重新看——CSS3变形,过渡与动画②
本篇文章主要用来归纳总结CSS3变形属性. CSS3变形属性大致可以分为以下三个部分: 变形控制属性 2D变形函数 3D变形函数 下面将对其一一进行分析: 1.变形控制属性 所谓的变形控制属性主要指“ ...
- css3的过渡、动画、2D、3D效果
浏览器的内核: 谷歌的内核是:webkit 火狐的内核是:gecko Ie的内核是:trident 欧鹏的内核是:presto 国内浏览器的内核:webkit css3针对同一样式在不同的浏览器的兼容 ...
- 前端:css3的过渡与动画
一.css3过渡知识 (一).概述 1.CSS3过渡是元素从一种样式逐渐改变为另一种的效果. 2.实现过渡效果的两个要件: 规定把效果添加到那个css属性上. 规定效果时长 定义 ...
- css3 转换 过渡 及动画
转换transform: 通过 CSS3 转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸.您可以使用 2D 或 3D 转换来转换您的元素 2D转换属性: transform 向元素应用 2D 或 ...
- css3的过渡和动画的属性介绍
一.过渡 什么是过渡? 过渡是指:某元素的css属性值在一段时间内,平滑过渡到另外一个值,过渡主要观察的是过程和结果. 设置能够过渡的属性: 支持过渡的样式属性,颜色的属性,取值为数值,transfo ...
- CSS3 变形记
CSS3 变形 CSS3变形是一些效果的集合,比如平移,旋转,缩放和倾斜效果,每个效果都称为变形函数. transform transform属性向元素应用 2D 或 3D 转换.该属性允许我们对元素 ...
- 常用到用css3实现的转换,过渡和动画
为什么要用css动画替换js动画 导致JavaScript效率低的两大原因:操作DOM和使用页面动画. 通常我们会通过频繁的操作 DOM的CSS来实现视觉上的动画效果,导致js效率低的两个因素都包括在 ...
随机推荐
- Ubuntu安装atom
sudo add-apt-repository ppa:webupd8team/atom sudo apt-get update sudo apt-get install atom 安装的时如果报错, ...
- 20165330 2017-2018-2 《Java程序设计》第3周学习总结
课本知识总结 第四章 类与对象 类:包括类声明和类体 基本格式: class 类名 { 类体的内容 } 类声明: class+类名(注意:类名首字母需大写) 类体:类声明之后的一对"{&qu ...
- Educational Codeforces Round 25 E. Minimal Labels&&hdu1258
这两道题都需要用到拓扑排序,所以先介绍一下什么叫做拓扑排序. 这里说一下我是怎么理解的,拓扑排序实在DAG中进行的,根据图中的有向边的方向决定大小关系,具体可以下面的题目中理解其含义 Educatio ...
- Tornado @tornado.gen.coroutine 与 yield
在使用 Tornado 的过程中产生了以下疑问: 什么时候需要给函数增加 @tornado.gen.coroutine 什么时候调用函数需要 yield @tornado.gen.coroutine ...
- PHP之冒号、endif、endwhile、endfor 是什么鬼?f
解释:其实这些都是PHP的语法,只不过不常用而已,这些都是PHP流程控制的替代语法. 冒号(:)相当于是 左大括号---->{ endif.endwhile.endfor.endforeach- ...
- c#修改cpu主频
并不是真正能修改硬件,只是一个数据,能骗过部分程序检测,如英雄联盟必须达到3.0的主频才能使用录像功能,通过修改可以达到要求. 下面是代码: public enum RegValueKind { // ...
- Win32调试API原理
在Win32中自带了一些API函数,它们提供了相当于一般调试器的大多数功能,这些函数统称为Win32调试API(Win32 Debug API).利用这些API可以做到加载一个程序或捆绑到一个正在运行 ...
- 过程记录:搭建wordpress站点
过程记录:搭建wordpress站点 前提:现在aws中搭建好LNAMP环境和网络mysql数据库,即为下载的wdcp和aws的rds 1.获取WordPress安装包(中文版) https://cn ...
- Delphi锁定鼠标 模拟左右键 静止一会自动隐藏鼠标
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- MySQL 温故知心(三)
MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level loc ...