到目前为止,我们已经讨论了一个过渡如何在一个状态和另一个状态之间创建移动。接下来,我们将看到当我们对具有多个更改的元素应用单个过渡时会发生什么,以及如何同时使用多个过渡来微妙地改进动画。

例1:Fancy button

虽然我们已经看到了一个简单的按钮悬停效果,但我们可以将多个过渡组合合成在一个按钮上,以获得更有趣的效果。

来源:http://codepen.io/donovanh/pen/YPMGpJ

本例中,悬停效果结合了几种状态更改,但都是由单个过渡定义的:

1
transition: transform 0.4s cubic-bezier(.72,-0.61,.25,1.51);

这就是它的工作原理。按钮由两个图标和两段文本组成。初始(非悬停)状态是“Follow me”文本和Twitter 图标位于按钮内。我将@ 符号和“cssanimation”文本放在按钮外,如下所示:

然后添加了一个悬停状态,其中按钮外部的元素位于按钮内部,如:

我这样做是使用CSS 过渡。 例如,Twitter 符号使用绝对定位来定位。在设置时,我将它定位在我想要使用lefttop 值的位置:

1
2
3
4
5
.icon {
position: absolute;
left: 0.75em;
top: 0.75em;
}

然后为按钮添加悬停状态,并使用转换将Twitter 图标放在按钮外:

1
2
3
a:hover .icon {
transform: translateY(3em);
}

添加overflow: hidden 到容器中意味着按钮之外的元素不会显示。

如果没有过渡,图标将突然消失。由于按钮内的每个元素都是一个span,因此我可以同时对它们应用转换:

1
2
3
span {
transition: transform 0.4s cubic-bezier(.72,-0.61,.25,1.51);
}

这意味着,如果任何span 元素的状态发生变化(如悬停),它们都将被过渡。同样的技巧也适用于按钮的其他部分。

你可以大专栏  [css-animation-101] 8 multiple transitionsf="http://codepen.io/donovanh/pen/YPMGpJ" target="_blank" rel="noopener noreferrer">在CodePen上完整地看到这个例子。

例2:Background reveal

在这个例子中,我设置了一个包含一些文本的卡片,并在悬停时显示文本。

来源:http://codepen.io/donovanh/pen/LEvjJg

卡的初始(非悬停)状态显示标题,但段落文本不透明度为零。悬停时,我们将其更改为1以显示文本,并更改文本容器的高度。

如果没有过渡,看起来就像这样。当我们将鼠标悬停在卡片上时,变化是突然的。

加上两个过渡,完全改变气氛。结果就是这样

第一个过渡(这次是速记)如下所示:

1
transition: all 0.5s cubic-bezier(.48,-0.28,.41,1.4);

这会告诉浏览器在0.5 秒的时间内对所有属性设置动画,并使用cubic-bezier 过渡为其提供一些反弹。在这种情况下,它会影响文本容器的高度。

第二个过渡使文本移动。这里使用了一个ease-out 定时功能:

1
transition: all 0.4s ease-out;

我们可以通过改变悬停状态来达到很多目的。在这个例子中,info div的height和paragraph都在.card:hover 状态下给出了新的值。

在本例中,我们使用两个过渡,以便每个移动部件以不同的方式移动。让元素以不同的速度移动确实有助于增加过渡的吸引力。

也可以在CodePen 上看到这个例子

单个元素上的多个过渡

除了在多个元素上使用多个过渡之外,我们还可以在单个元素上使用多个转换。

这种情况下,你需要一个元素的背景与它的边框分开更改。对所有属性应用单一过渡可能对两者都太粗糙了。

我们可以通过将多个过渡组合成一个声明来实现这一点。多个过渡用逗号分隔。
例如:

1
transition: background 1s ease-out, border 0.5s linear;

这里的第一个过渡只在背景上工作,第二个(在逗号之后)只应用于边框。这意味着更改背景的悬停状态需要1秒钟,而边界的转换需要0.5秒。

家庭作业

在本章中,我们研究了如何通过单个过渡处理多个效果,以及如何将多个过渡一起使用。值得一看每个CodePen 上的示例:

你能想到这些类型的过渡对你当前正在处理的项目有帮助吗?

到目前为止,我们已经报道了很多。接下来,我们将了解如何使用JavaScript 应用这些转换。

[css-animation-101] 8 multiple transitions的更多相关文章

  1. CSS animation & CSS animation 101

    CSS animation 101 如何为 Web 添加动画效果. https://github.com/cssanimation/css-animation-101 https://github.c ...

  2. css animation & animation-fill-mode

    css animation & animation-fill-mode css animation effect https://developer.mozilla.org/en-US/doc ...

  3. CSS魔法堂:更丰富的前端动效by CSS Animation

    前言  在<CSS魔法堂:Transition就这么好玩>中我们了解到对于简单的补间动画,我们可以通过transition实现.那到底多简单的动画适合用transtion来实现呢?答案就是 ...

  4. CSS Animation triggers text rendering change in Safari

    薄荷新首页上周五内测,花哥反馈在 MacBook Safari 浏览器下 鼠标移动到第一个商品的时候后面几个商品的文字会加粗.这是什么鬼??? 待我回到家打开笔记本,鼠标蹭蹭蹭的发现问题远不止如此: ...

  5. No.6 - 利用 CSS animation 制作一个炫酷的 Slider

    *{ margin:; padding:; } div{ margin: auto; width: 800px; height: 681px; position: relative; overflow ...

  6. [CSS3] Make a One-time CSS Animation that Does Not Revert to its Original Style

    We'll add animation to patio11bot using CSS keyframes. When defining a CSS animation, you can add it ...

  7. 利用 CSS animation 和 CSS sprite 制作动画

    CSS3 大大强化了制作动画的能力,但是如果要做出图案比较复杂的动画,选择 GIF 依然是一个不错的选择.今天给大家介绍一个使用 CSS animation 配合雪碧图(CSS sprite)来制作动 ...

  8. 百度前端技术学院2018笔记 之 利用 CSS animation 制作一个炫酷的 Slider

    前言 题目地址 利用 CSS animation 制作一个炫酷的 Slider 思路整理 首先页面包含三种东西 一个是type为radio的input其实就是单选框 二是每个单选框对应的label 三 ...

  9. css animation @keyframes 动画

    需求:语音播放动态效果 方案:使用如下图片,利用 css animation @keyframes  做动画 html <span class="horn" :class=& ...

随机推荐

  1. 吴裕雄--天生自然 pythonTensorFlow图形数据处理:输入数据处理框架

    import tensorflow as tf # 1. 创建文件列表,通过文件列表创建输入文件队列 files = tf.train.match_filenames_once("F:\\o ...

  2. [原]procexp替换任务管理器

    2019-09-14更新:本文已经在新博客重新整理发布,请各位读者移步. process explorer有个功能是替换任务管理器,它是怎么实现的呢???   windows有个注册表项HKEY_LO ...

  3. 小程序中map的取值和赋值

    1.初始化 resultMap: { "near": [], "join": [], "publish": [] } 2.js中直接取 co ...

  4. Java零基础学习详解

    01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数据库操作实用工具,小巧简单实用. * DBUtils ...

  5. Ubuntu更改源地址列表

    1. 备份源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup 2.打开源列表 sudo gedit /etc/apt/sour ...

  6. MySQL不能通过127.0.0.1访问

    检查权限都是正确的,最后想到是防火墙的问题 -A INPUT -d 127.0.0.1/32 -j ACCEPT-A INPUT -s 127.0.0.1/32 -j ACCEPT 搞定

  7. PictureService

    package me.zhengjie.tools.service; import me.zhengjie.tools.domain.Picture; import org.springframewo ...

  8. android ijkplayer简单使用

    class VideoPlayer : FrameLayout, TextureView.SurfaceTextureListener{ private var url:String? = null ...

  9. python中的if not

    在python中 None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False ,即: not None == not False = ...

  10. Miller-Rabin素数检测算法

    遇到了一个题: Description: Goldbach's conjecture is one of the oldest and best-known unsolved problems in ...