【不一样的CSS】这些关于transition和animation的小细节,你知道吗?

简介: 关于transition和animation这两个CSS3属性想必大家都知道,这两个属性都是非常常用的属性,本篇文章来介绍一下关于transition和animation这两个的细节。
Hi~,我是 一碗周,一个在舒适区垂死挣扎的前端,如果写的文章有幸可以得到你的青睐,万分有幸~

🍇 写在前面

关于transitionanimation这两个CSS3属性想必大家都知道,这两个属性都是非常常用的属性,本篇文章来介绍一下关于transitionanimation这两个的细节。

ps:本篇文章参考张鑫旭大佬的新书——《CSS新世界》

🍈 transition属性

首先我们来看一下transition属性的一些细节。

🍉 transition-delay传递负值的情况

我们都知道,transition属性是transition-propertytransition-durationtransition-timing-functiontransition-delay的一个简写属性;

当传递两个时间时第一个表示transition-duration,第二个表示transition-delay,MDN中原文如下:

零,一或两个  \<time> 值。可以解析为时间的第一个值被分配给  transition-duration,并且可以解析为时间的第二个值被分配给 transition-delay

例如下面这段代码:

transition: 4s 1s; /* 动画执行4s,延迟1s */
transition: 1.5s .5s; /* 动画执行1.5s,延迟0.5s */

而第二个时间时允许写成负值的,示例代码如下:

transition: 4s -1s; /* 动画执行4s,延迟-1s */
transition: 1.5s -.5s; /* 动画执行1.5s,延迟-0.5s */

当第一个时间写成负值时,则会变成延迟时间,第二个变成执行时间,示例代码如下:

transition: -1s 2s; /* 动画执行2s,延迟-1s */

而且延迟时间变成负值时,过渡动画的执行也不是从头开始的而是从过渡动画执行了延迟时间的那一刻开始执行,例如下面这段代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>transition负值</title>
    <style>
      body { margin: 0; }
      .box {
        height: 100px; width: 200px; background: lightcoral;
        transition: 2s -0.5s;
      }
      .box:hover {  width: 600px; }
    </style>
  </head>
  <body>
    <div class="box"></div>
  </body>
</html>

代码运行结果如下:

01.gif

我们将鼠标悬停到盒子上时,它的宽度瞬间到了400px,然后执行过渡动画,离开时的效果也一致,这个就是transition-delay属性传递负值的效果

🍊 多余的all

当我们使用transition属性定义过渡动画时,通常是下面这段写法:

transition: all 1.5s .5s;

但是在transition-property属性的默认值就是all,所以说我们并不需要编写这个多余的值。

🍋 模拟长时间悬停或长按效果

使用transition属性还有要给SAO操作,可以模拟长按或长时间悬停效果,主要是通过transitionend事件完成,transitionend事件在过渡动画执行完毕后触发,具体可以参考MDN

实现代码如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>模拟长按和长悬停效果</title>
    <style>
      button { appearance: none; border: none; outline: none; cursor: pointer; white-space: nowrap; line-height: 40px;width: 80px;height: 40px;color: #fff;background-color: #1171ee;border-radius: 4px;}
      
      button.active {
        transition: background-color 1s;
      }
      .active:hover { background: #3683e9; }
      button:active { background: #0d65d8; }
    </style>
  </head>
  <body>
    <button id="btn1">悬停</button>
  </body>
  <script>
    const $btn1 = document.getElementById('btn1')
    function addClass(e) {
      event.target.setAttribute('class', 'active')
    }
    function removeClass(e) {
      event.target.setAttribute('class', '')
    }
    function AddListener() {
      console.log('延迟了1s触发')
    }
    $btn1.addEventListener('mouseenter', addClass)
    $btn1.addEventListener('mouseleave', removeClass)
    $btn1.addEventListener('transitionend', AddListener)
  </script>
</html>

代码允许效果如下所示:

02.gif

如果想要实现长按直接换成对应的事件即可。

🍌 animation属性

🍍 @keyframes规则的细节

在定义动画序列时,起始关键帧可以不容设置,默认会采用元素的样式作为起始关键帧,例如这段代码:

.box {
  height: 100px;
  width: 200px;
  background: lightcoral;
  opacity: 0.5;
  animation: fadeIn 1s infinite;
}
@keyframes fadeIn {
  100% {
    opacity: 1;
  }
}

该动画效果就会从透明度50%~100%进行过渡。

关键帧列表可以进行合并且无序,示例代码如下:

@keyframes fadeIn {
  0%,
  50%,
  100% {
    opacity: 0;
  }
  25%,
  75% {
    opacity: 1;
  }
}

还有就是动画序列中的是没有意义的,因为动画序列的优先级是最高的

🍎 animation-iteration-count属性

众所周知,animation-iteration-count属性用于设置动画的执行次数,这个属性可以使用数字作为值,而且可以是小数,比如下面这段代码:

.box {
  height: 100px;
  width: 200px;
  background: lightcoral;
  animation: fadeIn 1s 0.5 0.5s both;
}
@keyframes fadeIn {
  100% {
    opacity: 0;
  }
}

动画执行效果如下:

03.gif

延迟0.5秒后,从透明度100%过渡到50%

🍏 写在最后

本篇文章到这就结束了,如果觉得有用,可以点赞+评论支持一下~~~

目录
相关文章
|
前端开发 JavaScript UED
过渡效果的艺术:CSS transition 让网页交互更平滑(上)
过渡效果的艺术:CSS transition 让网页交互更平滑(上)
|
6月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
transition过渡属性 早期在Web中要实现动画效果,都是依赖于JavaScript或Flash来完成。 但在CSS3中新增加了一个新的模块transition,它可以通过一些简单的CSS事件来触发元素的外观变化, 让效果显得更加细腻。简单点说,就是通过鼠标经过、获得焦点,被点击或对元素任何改变中触发, 并平滑地以动画效果改变CSS的属性值。 在CSS中创建简单的过渡效果可以从以下几个步骤来实现: 在默认样式中声明元素的初始状态样式; 声明过渡元素最终状态样式,比如悬浮状态; 在默认样式中通过添加
350 1
|
6月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
Animation属性 css3为Animation动画提供的几个属性如下: 属性名 属性值 animation-name 指定动画名称,该属性指定一个已有的关键帧定义。 animation-duration 指定动画持续时间。 animation-timing-funtion 指定动画变化速度。 animation-delay 指定动画延迟多长时间才开始执行。 animation-iteration-count 指定动画的循环执行次数。 animation:这是一个复合属性。
449 3
|
前端开发
CSS transition过渡属性详解
本文介绍了CSS中`transition`属性的作用、用法及实例。`transition`用于在元素属性变化时添加平滑过渡动画,通过设置`transition-property`、`transition-duration`、`transition-timing-function`和`transition-delay`等属性值,可以精细控制过渡效果。文末提供了HTML示例代码,展示了如何使用`transition`实现鼠标悬停时背景颜色的平滑变化。
734 1
|
机器学习/深度学习 前端开发
HTML&CSS Day08 CSS transition过渡
HTML&CSS Day08 CSS transition过渡
227 0
|
前端开发 JavaScript
前端 css 经典:transition 过渡和 animation 动画
前端 css 经典:transition 过渡和 animation 动画
309 2
|
前端开发 JavaScript UED
CSS Transition(过渡效果)详解
CSS Transition(过渡效果)详解
1744 1
|
前端开发 UED
深入理解CSS过渡效果(Transition):提升网页动画体验
深入理解CSS过渡效果(Transition):提升网页动画体验
738 1
|
Web App开发 前端开发 JavaScript
过渡效果的艺术:CSS transition 让网页交互更平滑(下)
过渡效果的艺术:CSS transition 让网页交互更平滑(下)

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    449
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    350
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    335
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    226
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    447
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    621
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    924
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    238
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    756
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    417