学习CSS3,觉得最难记忆的部分除了flex特性之外,就要属变形,过渡和动画部分了。作为初学者,总有种犯懒的心理,想着既然IE8浏览器都不完全支持CSS动画属性,还要考虑浏览器兼容问题,那么就不那么着急学,一旦有需求使用JS勉强应付即可。但后来就渐渐觉得心慌,看大家都在争相谈论使用CSS3的动画,做出一个个惊艳的效果。觉得这种想法真是害人,哪有程序员不向前看而呆在自己的舒适圈里坐井观天呢?手机端H5页面各种在用CSS动画,网页也使用CSS动画大大提升了页面性能,减少了JS代码负担,提高了效率,实在是没有理由在自欺欺人的将这些新理由拒之门外,于是我便打算重新完整的学习一下CSS这些新的属性,将知识系统的整理一遍,并在这过程中将想到的一些问题,一些心得记录下来。

我学习的主要参考是大漠撰写的《图解CSS3核心技术与案例实战》一书,预计分为5个部分,第一个部分主要简单的谈谈自己对这些CSS3新属性的思考与理解,第二部分着重梳理CSS3变形属性的知识点,随后的两个部分依次对CSS3过渡、动画的知识点进行梳理,在最后一个部分中,我会将我实际运用CSS3变形、过渡、动画属性做出的效果进行展示,并对实际运用中产生的种种问题进行梳理和总结,自然,第一部分和最后一部分是会不断更新的,希望有朝一日我可以达到不再更新的程度。

以下是这一系列文章的一个大体的框架:

  1. 对CSS3变形,过渡和动画属性的思考;
  2. CSS3变形属性探讨;
  3. CSS3过渡属性探讨;
  4. CSS3动画属性探讨;
  5. 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变形,过渡与动画①的更多相关文章

  1. 重新想,重新看——CSS3变形,过渡与动画④

    最后,我们来探讨一下CSS3的动画属性. 之前提到过,实际上过渡也算作动画的一种.但过渡作为动画的缺陷在于,只能使元素属性从一个值“过渡”至另一个值,但如果想要使元素的属性值根据需要在时间轴上不断变化 ...

  2. 重新想,重新看——CSS3变形,过渡与动画③

    这一篇主要谈谈CSS3的过渡属性. 过渡属性被设计的十分通俗易懂,属性写法为transition,有四个子属性: <transition-property> 表示需要过渡的属性[必须](本 ...

  3. 重新想,重新看——CSS3变形,过渡与动画②

    本篇文章主要用来归纳总结CSS3变形属性. CSS3变形属性大致可以分为以下三个部分: 变形控制属性 2D变形函数 3D变形函数 下面将对其一一进行分析: 1.变形控制属性 所谓的变形控制属性主要指“ ...

  4. css3的过渡、动画、2D、3D效果

    浏览器的内核: 谷歌的内核是:webkit 火狐的内核是:gecko Ie的内核是:trident 欧鹏的内核是:presto 国内浏览器的内核:webkit css3针对同一样式在不同的浏览器的兼容 ...

  5. 前端:css3的过渡与动画

    一.css3过渡知识 (一).概述 1.CSS3过渡是元素从一种样式逐渐改变为另一种的效果.      2.实现过渡效果的两个要件:    规定把效果添加到那个css属性上.    规定效果时长 定义 ...

  6. css3 转换 过渡 及动画

    转换transform: 通过 CSS3 转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸.您可以使用 2D 或 3D 转换来转换您的元素 2D转换属性: transform 向元素应用 2D 或 ...

  7. css3的过渡和动画的属性介绍

    一.过渡 什么是过渡? 过渡是指:某元素的css属性值在一段时间内,平滑过渡到另外一个值,过渡主要观察的是过程和结果. 设置能够过渡的属性: 支持过渡的样式属性,颜色的属性,取值为数值,transfo ...

  8. CSS3 变形记

    CSS3 变形 CSS3变形是一些效果的集合,比如平移,旋转,缩放和倾斜效果,每个效果都称为变形函数. transform transform属性向元素应用 2D 或 3D 转换.该属性允许我们对元素 ...

  9. 常用到用css3实现的转换,过渡和动画

    为什么要用css动画替换js动画 导致JavaScript效率低的两大原因:操作DOM和使用页面动画. 通常我们会通过频繁的操作 DOM的CSS来实现视觉上的动画效果,导致js效率低的两个因素都包括在 ...

随机推荐

  1. Debian安装Chrome

    本文完全原创,转载请说明出处,希望对大家有用. 本篇博客是个人总结,一方面以便日后查看,另一方面希望能为其他人提供一些便利. 正文 新安装的Debian需要安装个chromeFQ,但从google网站 ...

  2. Zabbix低级主动发现之MySQL多实例

    接上篇:Zabbix自动发现与主动注册 在一个agent安装一个maraidb 拷贝一个原始配置文档并且修改配置用于开启多实例 按照配置文件初始化数据库 mysql_install_db --user ...

  3. 在iOS模拟器上安装程式的ios-sim

    针对iOS装置进行开发时,绝大部分开发者采用的工具都是官方的Xcode.问题是负责图像设计和开发管理人员,却不一定熟悉Xcode的操作,这时ios-sim便是一个解决方案. 曾经从事iOS开发的朋友, ...

  4. IOS 简洁输入框的实现

    我们在朋友圈,qq空间或微博的app看到这样的操作,点击回复,在视图的下面立即显示一个输入框.输入我们的文字后点击发送就可以.那么这个小小的输入框是怎么实现的呢 我也试着自己写了一个小小对话框,先看一 ...

  5. Linux下的内核模块机制

    2017-06-20 Linux的内核模块机制允许开发者动态的向内核添加功能,我们常见的文件系统.驱动程序等都可以通过模块的方式添加到内核而无需对内核重新编译,这在很大程度上减少了操作的复杂度.模块机 ...

  6. centos7配置IP地址

    有关于centos7获取IP地址的方法主要有两种,1:动态获取ip:2:设置静态IP地址 在配置网络之前我们先要知道centos的网卡名称是什么,centos7不再使用ifconfig命令,可通过命令 ...

  7. jQuery中this与$(this)的差别

    jQuery中this与$(this)的差别 $("#textbox").hover(          function() {               this.title ...

  8. 002-java语言基础

    一.安装卸载 卸载:控制面板 安装:下载对应版本 注意1.安装路径→尽量不要有空格和汉字 注意2.安装之后,jre可以不用安装,jdk中含有 二.环境变量 环境变量:理解,一些快捷路径.方便快速查找应 ...

  9. POJ3176:Cow Bowling(数字三角形问题)

    地址:http://poj.org/problem?id=3176 题目解析:没什么好说的,之前上课时老师讲过.从下往上找,每一个三角形的顶点可由两个角加上顶点的值 两种方式得到 ,用dp数组保存下最 ...

  10. Windows常见宏的使用

    WIN32_LEAN_AND_MEAN 1.  参考资料:https://msdn.microsoft.com/en-us/library/windows/desktop/aa383745(v=vs. ...