零.序言

  css 3 的新特性,很多都停留在听说而非实际使用。transform, transition, translate 这三长得实在太像,刚开始的时候总是迷迷糊糊,分不清它们的功能。而最近新接入的项目以视觉效果为主,故也算是被动弄清基础含义。

  先说结论,transform 与 transitions 是属性,如同 border、width 一样,我们可以手动设置其值以达到效果;translate 是 transform 的其中一个值,如同 auto 是 width 是其中的一个值一样。

一、transform 转变

  这是一个静态的属性,如同 border 一样,设置之后立即改变,改变不需要时间参与。它的作用是专注于改变元素基于默认位置的某些状态(如平移、缩放、旋转等),如下案例:

.container:hover {
/* transform: scale(2,2) */
transform: translateY(50%)
}
.other {
background-color: #333;
} <div class="container"></div>
<div class="other"></div>

  从上例中,我们可以看出,transform 是突变的,并且它转变之后并不挤压其他元素在文档流中的位置。

  至于 transform 有哪些值,我们可以参看 MDN 或者 w3c

二、transition 过渡

  相对于 transform,transition 则引入了时间概念,因此这不再是突变,而是当它所绑定的属性(比如width)发生改变的时候,会根据速度曲线慢慢变化。

  如下例:

.container {
transition: height 1s;
}
.container:hover {
height: 700px;
}
.other {
background-color: #333;
} <div class="container"></div>
<div class="other"></div>

  从上面我们可以看出, transition 绑定的是元素某一个已经存在的属性值,这个属性值再某种状态下发生了变化,而 transition 专注于将这种改变添加个速度曲线,使得元素平滑转变,不显得很突兀。

  从上图中我们也可以看出,因为 transition 过渡中某些属性被修改了,必然引起布局上的变化,这个有好处也有坏处,至于是看重效果还是看重性能,则需根据实际情况来定。

  (这里有个建议,上例中,transition 是写在 .container{} 中的,因此,在鼠标移出之后也会有个平滑地回退过程,而将 transition 写在 .container:hover {} 中,鼠标移出后不会有平滑回退)

  当然,如同其他属性一样,transition 支持嵌套:

.container {
transition: height 1s;
}
.child {
width: 100px;
height: 100px;
background-color: red;
transition: all 1s;
}
.container:hover .child {
width: 300px;
}
.container:hover {
height: 400px;
} <div class="container">
<div class="child"></div>
</div>
<div class="other"></div>

  另外,不是所有的 css 属性都能 transition,比如 transition: display 就不会生效。只有“可被用于动画的属性”(MDN - 可被用于动画的属性) 才能够生效。

三、混合使用

  很多成熟的网站上,这两者经常混合使用,从而形成了一种动画效果。当然,这并不是真正的动画,此外,正是因为混合使用,所以在初学的时候贼容易搞混,加上单词又长得很像,就容易迷糊。当然了,混合使用的时候也容易出现各种各样的坑,故一定要耐心调试...

  下面是一个简单的 demo:

.container {
transition: all 1s;
}
.container:hover {
transform: translateY(50%);
height: 400px;
} <div class="container"></div>
<div class="other"></div>

  这个例子中,设置 .container 沿 y 轴正向平移 50%,那么,猜一猜平移了多少 px ? o( ̄▽ ̄)d

四、transition 与 animation

  animation 与 transition 一起于 css3 中引入,在用法上也与 transition 上很相似,甚至很多的属性值如动画去线,执行时间等都一样。那么这两个有什么区别呢?

  先从整体上,transition 其实只有两个状态(关键帧),变化前的(start)和变化后的(end),而 animation 则可以人为设置多个状态(关键帧),这一点上,我们可以做出更丰富的视觉效果;transition 需要显式设定触发条件,如使用 hover,动态增加/删除 css 类来修改某些属性, animation 则不需要显式控制,一旦定义之后,它将自动开始执行。

  从细节上来看,transition 的触发方式决定了其不具有循环的特点,当然,使用 js 定时器来模拟循环也是一种思路,animation 则自带循环设置,animation-iteration-count 这个就可以指定循环重复次数;另外,transition 是直接在定义语句中绑定属性值,如 transition:width 1s ,而 animation 定义语句中绑定的是动画名字,如 animation: yourAniName 1s ...  ,再在  @keyframes 中的每个关键帧中描述需要改变的属性的值。

  下面是一个简单的 demo:

// transition
.container {
height: 300px;
transition: all 1s;
}
.container:hover {
transform: translateY(50%);
height: 400px;
} // animation
.container {
animation: myAni 3s linear 1s infinite normal;
}
@keyframes myAni {
0%, 100% {
height: 300px;
} 20%, 80% {
height: 400px;
width: 550px;
} 50% {
height: 500px;
width: 600px;
}
}

五、最后

  css3 的新特性,对于 IE 来说都做不到完美兼容,如果需要照顾老项目,优先不考虑 css 3 的这些新特性。但是,对于新项目,使用这些新的特性绝对能够带来非凡的体验。

css3 - transform, transition 与 translate的更多相关文章

  1. CSS3(transform/transition/animation) 基础 总结

    1.CSS3新增的样式(常用) //颜色透明表示rgba(0,0,0,.5) //圆角(定义角半径)border-radius: 5px 10px 15px 20px; //文字/盒子阴影text-s ...

  2. css3中的transform、transition、translate、animation(@keyframes)的区别

    一.前言 在CSS中,我们经常会使用到transform.transition.translate.animation(@keyframes)这些长得相似,又不好区分的属性(值).每当需要使用它们,都 ...

  3. css笔记——区分css3中的transform transition animation

    出处:http://blog.csdn.net/dyllove98/article/details/8957232   CSS3中和动画有关的属性有三个  transform. transition  ...

  4. CSS3 Transform、Transition和Animation属性总结

    CSS3的三个与变形和动画啊相关的属性: Transform 浏览器支持情况: Internet Explorer 10.Firefox.Opera 支持 transform 属性. Internet ...

  5. CSS3之transition&transform

    参考网页: CSS3 transform 属性使用详解: http://www.renniaofei.com/code/css3-transform-shuxing-shiyong-xiangjie/ ...

  6. CSS动画详解及transform、transition、translate的区别

    刚看完一节慕课网的css动画,在此总结下 1. 先说下 transform.transition.translate的区别 transform 和 transition是css的2个属性,transl ...

  7. CSS3 transform对普通元素的N多渲染影响

    一.一入transform深似海 一个普普通通的元素,如果应用了CSS3 transform变换,即便这个transform属性值不会改变其任何表面的变化(如scale(1), translate(0 ...

  8. CSS3 Transform——transform-origin

    2012年9月,W3C组织发布了CSS3变形工作草案.CSS3变形允许CSS把元素转变为2D 或3D空间,这个草案包括了CSS3 2D变形和CSS3 3D变形. CSS3变形是一些效果的集合,比如平移 ...

  9. 制作变形、移位、扭曲等效果:《CSS3 transform》

    今天开始我们一起来学习有关于CSS3制作动画的几个属性:变形(transform).转换(transition)和动画(animation)等更高级的CSS3技术.本文主要介绍的是这三个属性之中的第一 ...

随机推荐

  1. 股票数据的原始数据形态&数据驱动来设计金融股票业务场景

    1. 数据源 其实金融数据没大家想象的那麽复杂,只需要最原始状态的数据,保存到本地即可以. 那麽,怎样才是股票数据的原始状态呢.那就看看1920's年代的道氏理论,他是怎样计算道琼斯指数,那麽他采用的 ...

  2. php 设计模式之命令模式

    命令模式 将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化.对请求排队或记录请求日志,以及支持撤销的操作. 命令模式以松散耦合主题为基础,发送消息.命令和请求,或通过一组处理程序发送 ...

  3. jQuery如何给DOM添加ID

    ID每个元素只能有一个,ID名同一页面也不能重复,addID方法是不需要的,和其他属性一样用attr方法就行了, $(singleTarget).attr('id','idName'); 更简单的 $ ...

  4. SpringSecurity过滤器顺序

    https://blog.csdn.net/qq_35720307/article/details/97656608 org.springframework.security.config.annot ...

  5. 吴裕雄--天生自然 PHP开发学习:MySQL 插入数据

    <?php $servername = "localhost"; $username = "root"; $password = "admin& ...

  6. springboot的http监控接口启动器的配置

    基于SpringBoot框架企业级应用系统开发全面实战()->03.07_http监控_recv.mp4 监控接口启动器 自定义监控接口启动器的配置 ====================== ...

  7. Chrome使用频率最高的快捷键

    标签 ctrl+T 打开新标签  ——— ctrl+W 关闭标签 ctrl+shift+T 打开上衣个被关闭的标签 ctrl+tab 标签向右切换 —— ctrl+shift+tab 标签向左切换 c ...

  8. 在后端C#中 call web api

    我们要想使用web api, 需要首先在azure 中创建application. (如何创建application可以参考我的另一篇blog 从O365中获取users到D365中 ) Get 我们 ...

  9. 计量经济与时间序列_滞后算子和超前算子L的定义

    1.   为了使计算简单,引入滞后算子的概念: 2.   定义LYt = Yt-1 , L2Yt = Yt-2,... , LsYt = Yt-s. 3.   也就是把每一期具体滞后哪一期的k提到L的 ...

  10. js实际应用

    -----------------------------获取select选中的值------------------------- 原生JS获得选中select值 var obj = documen ...