0

0

深入理解CSS过渡transition_html/css_WEB-ITnose

php中文网

php中文网

发布时间:2016-06-24 11:21:56

|

1943人浏览过

|

来源于php中文网

原创

× 目录 [1]定义 [2]过渡属性 [3]持续时间 [4]延迟时间 [5]时间函数 [6]多值 [7]阶段 [8]触发 [9]API

前面的话

  通过过渡transition,可以让web前端开发人员不需要javascript就可以实现简单的动画交互效果。过渡属性看似简单,但实际上它有很多需要注意的细节和容易混淆的地方。本文将介绍和梳理关于css过渡的知识

 

定义

  过渡transition是一个复合属性,包括transition-property、transition-duration、transition-timing-function、transition-delay这四个子属性。通过这四个子属性的配合来完成一个完整的过渡效果

transition-property: 过渡属性(默认值为all)transition-duration: 过渡持续时间(默认值为0s)transiton-timing-function: 过渡函数(默认值为ease函数)transition-delay: 过渡延迟时间(默认值为0s)

  [注意]IE9-不支持该属性,safari3.1-6、ISO3.2-6.1、android2.1-4.3需要添加-webkit-前缀;而其余高版本浏览器支持标准写法

.test{    height: 100px;    width: 100px;    background-color: pink;    transition-duration: 3s;/*     以下三值为默认值,稍后会详细介绍 */    transition-property: all;    transition-timing-function: ease;    transition-delay: 0s;}    .test:hover{    width: 500px;}

<div class="test"></div>

//鼠标移动到元素上,会出现宽度变化效果

立即学习前端免费学习笔记(深入)”;

复合属性

  过渡transition的这四个子属性只有是必需值且不能为0。其中,都是时间。当两个时间同时出现时,第一个是,第二个是;当只有一个时间时,它是,而为默认值0

transition: <transition-property> || <transition-duration> || <transition-timing-function> || <transition-delay>

  [注意]transition的这四个子属性之间不能用逗号隔开,只能用空格隔开。因为逗号隔开的代表不同的属性(transition属性支持多值,多值部分稍后介绍);而空格隔开的代表不同属性的四个关于过渡的子属性

.test{    height: 100px;    width: 100px;    background-color: pink;<!-- 代表持续时间为2s,延迟时间为默认值0s -->    transition;2s;}    .test:hover{    width: 500px;}

<div class="test"></div>

 

.test{    height: 100px;    width: 100px;    background-color: pink;    <!-- 代表持续时间为1s,延迟时间为2s -->    transition: 1s 2s;}    .test:hover{    width: 500px;}

<div class="test"></div>

 

过渡属性

transition-property

  值: none | all | [,]*

  初始值: all

  应用于: 所有元素

  继承性: 无

none: 没有指定任何样式all: 默认值,表示指定元素所有支持transition-property属性的样式<transition-property>: 可过渡的样式,可用逗号分开写多个样式

可过渡的样式

  不是所有的CSS样式值都可以过渡,只有具有中间值的属性才具备过渡效果

Vstart = 开始值; Vend = 结束值; Vres = 中间值; p = 过渡函数的输出值Vres = (1 - p) * Vstart + p * Vend当Vres具有有效值时,则该CSS样式可过渡

颜色: color background-color border-color outline-color位置: backround-position left right top bottom长度:     [1]max-height min-height max-width min-width height width    [2]border-width margin padding outline-width outline-offset    [3]font-size line-height text-indent vertical-align      [4]border-spacing letter-spacing word-spacing数字: opacity visibility z-index font-weight zoom组合: text-shadow transform box-shadow clip其他: gradient

 

过渡持续时间

  该属性的单位是秒s或毫秒ms

transition-duration

  值:

  初始值: 0s

  应用于: 所有元素

  继承性: 无

  [注意]该属性若不能为负值

  [注意]若该属性为0s则为默认值,若为0则为无效值。所以必须带单位

  [注意]该值为单值时,即所有过渡属性都对应同样时间;该值为多值时,过渡属性按照顺序对应持续时间

//DEMO中的过渡属性值transition-property: width,background;

 

过渡延迟时间

  该属性定义元素属性延迟多少时间后开始过渡效果,该属性的单位是秒s或毫秒ms

transition-delay

  值:

  初始值: 0s

  应用于: 所有元素

  继承性: 无

  [注意]该属性若为负值,无延迟效果,但过渡元素的起始值将从0变成设定值(设定值=延迟时间+持续时间)。若该设定值小于等于0,则无过渡效果;若该设定值大于0,则过渡元素从该设定值开始完成剩余的过渡效果

  [注意]若该属性为0s则为默认值,若为0则为无效值。所以必须带单位

  [注意]该值为单值时,即所有过渡属性都对应同样时间;该值为多值时,过渡属性按照顺序对应持续时间

//DEMO中的过渡属性值transition-property: width,background;

 

过渡时间函数

  过渡时间函数用于定义元素过渡属性随时间变化的过渡速度变化效果

transition-timing-function

  值: [,]*

  初始值: ease

  应用于: 所有元素

  继承性: 无

取值

  过渡时间函数共三种取值,分别是关键字、steps函数和besizer函数

steps函数

  steps步进函数将过渡时间划分成大小相等的时间时隔来运行

  steps步进函数为

steps(<integer>[,start | end]?)

<interger>:用来指定间隔个数(该值只能是正整数)第二个参数: 该参数可选,默认是end,表示开始值保持一次;若参数为start,表示开始不保持

贝塞尔曲线

  贝塞尔曲线通过p0-p3四个控制点来控制,其中p0表示(0,0),p3表示(1,1)。而就是通过确定p1(x1,y1)和p2(x2,y2)的值来确定的

transition-timing-function: cubic-bezier(x1,y1,x2,y2);

  [注意]x1,y1,x2,y2都是0到1的值(包括0和1)

关键字

  关键字其实是bezier函数或steps函数的特殊值

字狐AI
字狐AI

由GPT-4 驱动的AI全能助手,支持回答复杂问题、撰写邮件、阅读文章、智能搜索

下载

ease: 开始和结束慢,中间快。相当于cubic-bezier(0.25,0.1,0.25,1)liner: 匀速。相当于cubic-bezier(0,0,1,1)ease-in: 开始慢。相当于cubic-bezier(0.42,0,1,1)ease-out: 结束慢。相当于cubic-bezier(0,0,0.58,1)ease-in-out: 和ease类似,但比ease幅度大。相当于cubic-bezier(0.42,0,0.58,1)step-start: 直接位于结束处。相当于steps(1,start)step-end: 位于开始处经过时间间隔后结束。相当于steps(1,end)

 

多值

  transition的多个属性值用逗号分隔开表示可以同时为多个值设置过渡属性。

transtion: <single-transition>[,<single-transition>]*

<single-transition>: <transition-property> || <transition-duration> || <transition-timing-function> || <transition-delay>

//property为all,timing-function为linear,delay为0s,duration为0s。表示无过渡行为transition: 0s;

【1】若不同的transition-property的值,对应的transition-delay | transition-timing-function | transition-duration的属性值都相同时,其他的属性设置一个即可

#test1{    transition-property: width,background;    transition-delay: 200ms;    transition-timing-function: linear;    transition-duration: 2s;}/*类似于*/#test2{    transition: width 2s linear 200ms,background 2s linear 200ms;}

【2】当transition-property的值的个数多于对应的transition-delay | transition-timing-function | transition-duration的属性值(属性值的个数大于1个)时,将按顺序开始取值

#test1{    transition-property: width,background,opacity;    transition-duration: 2s,500ms;    transition-timing-function: linear,ease;    transition-delay: 200ms,0s;}/*类似于*/#test2{    transition: width 2s linear 200ms,background 500ms ease 0s,opacity 2s linear 200ms;}

【3】当transition-property的值少于对应的transition-delay | transition-timing-function | transition-duration的属性值时,多余的其他属性值将无效

#test1{    transition-property: width;    transition-duration: 2s,500ms;    transition-timing-function: linear,ease;    transition-delay: 200ms,0s;}/*类似于*/#test2{    transition: width 2s linear 200ms;}

【4】当transition-property的值中出现一个无效值,它依然按顺序对应transition的其他属性值(其他属性出现无效值,处理情况也类似)

#test1{    transition-property: width,wuxiao,background;    transition-duration: 2s,500ms;    transition-timing-function: linear,ease;    transition-delay: 200ms,0s;}/*类似于*/#test2{    transition: width 2s linear 200ms,background 2s linear 200ms;}

【5】当transition-property的值中,有些值重复出现多次,则以最后出现的值为准,前面所有出现的值都被认定为无效值,但依然按顺序对应transition的其他属性值

#test1{    transition-property: width,width,background;    transition-duration: 2s,500ms;    transition-timing-function: linear,ease;    transition-delay: 200ms,0s;}/*类似于*/#test2{    transition: width 500ms ease 0s,background 2s linear 200ms;}

 

过渡阶段

【1】过渡开始时间=样式改变的时刻+过渡延迟时间;而过渡结束时间=过渡开始时间+过渡持续

【2】过渡起始值=过渡前的过渡属性值;而过渡结束值=过渡完成后的过渡属性值

【3】过渡分为两个阶段:前进(forward)和反向(reverse)。若前进阶段进行一段时间后进入反向阶段。则反向阶段的初始值是前进阶段结束时的瞬时值

【4】以hover为例,若在元素非hover态时设置transition,相当于设置的反向状态。而前进和反向是一致的。而如果在元素hover态设置transition,则前进状态以hover态设置的为准,而反向状态以非hover态设置的为准

.test{    width: 100px;    transition: 3s;}    .test:hover{    width: 500px;    transition: 500ms;}

【5】如果子元素和父元素过渡属性都一致。若触发子元素过渡时,父元素正在过渡,则将父元素过渡的中间态的值作为子元素过渡的初始值

.box:hover{    font-size: 50px;}.test:hover{    font-size: 30px;}

<div class="box">    <div class="test">test</div></div>

【6】若过渡起始值或过渡开始值为auto,则浏览器不会自己计算成具体数字值,而是不发生过渡效果。所以要过渡某些属性,首先需要将其重置成具体数字值

  [注意]低版本webkit内核浏览器存在bug,会产生反向的过渡效果

.test{    width: 100px;    -webkit-transition: width 2s;    transition:width 2s;}    .test:hover{    width:auto;}

【7】隐式过渡是指一个属性改变时引起另一个属性的改变。如border-width是1em,则font-size改变时,border-width也会相应的改变。firefox和IE浏览器支持隐式过渡。而webkit内核浏览器不支持隐式过渡。 

.test{    border: 1px solid black;    -webkit-transition: font-size 2s;    transition:font-size 2s;    font: 20px/100px "宋体";}    .test:hover{    font-size: 40px;    border-right-width: 1em;}

 

触发方式

  一般地,过渡transition的触发有三种方式,分别是伪类触发、媒体查询触发和javascript触发。其中常用伪类触发包括:hover、:focus、:active等

【1】hover

  鼠标悬停触发

【2】active

  用户单击元素并按住鼠标时触发

【3】focus

  获得焦点时触发

【4】@media触发

  符合媒体查询条件时触发

/* 把浏览器的宽度拖动到小于1000px时触发 */@media (max-width: 1000px){    .test{        width: 500px;    }}

【5】点击事件

  用户点击元素时触发

test.onclick = function(){    test.style.width = '300px';    setTimeout(function(){        test.style.width = '100px';    },3000);}

 

API

  关于过渡transition的事件只有一个,是transitionend事件,它发生在过渡事件完成后

  [注意]safari3.1-6、ISO3.2-6.1、android2.1-4.3需要使用webkitTransitionEnd事件

【1】过渡分为两个阶段:前进阶段和反向阶段。transitionend事件在前进阶段结束时会触发,在反向阶段结束时也会触发。

var index = 0;//兼容低版本safari、IOS、androidtest.addEventListener("webkitTransitionEnd", myFunction);// 标准语法test.addEventListener("transitionend", myFunction);function myFunction() {    index++;    this.innerHTML = index;}

【2】过渡事件触发的次数与transition-property过渡属性的个数有关。过渡属性有几个就会触发几次

    transition: width 1s,background-color 1s;    -webkit-transition: width 1s,background-color 1s;

【3】如果过渡属性是复合属性,如border-width相当于是border-top-width、border-bottom-width、border-left-width和border-right-width这四个属性的集合。则过渡事件触发4次

  [注意]在低版本webkit内核浏览器里只触发1次

    transition:border-width 1s;    -webkit-transition: border-width 1s;

【4】如果过渡属性是默认值all,则过渡事件的次数是计算后的非复合的过渡属性的个数。如果发生过渡的属性是border-width和width,则经过计算后过渡事件应该触发5次

  [注意]在低版本webkit内核浏览器中处理情况也一致

.test{    width: 50px;    border: 1px solid black;    transition:all 1s;    -webkit-transition: all 1s;}    .test:hover{    border-width: 10px;    width: 100px;}

【5】如果过渡延迟时间为负值,且绝对值大于等于过渡持续时间时,低版本webkit内核浏览器不会产生过渡效果,但会触发过渡事件;而其他浏览器即不会产生过渡效果,也不会触发过渡事件

    transition:width 1s -1s;    -webkit-transition: width 1s -1s;

【6】如果过渡属性是存在复合属性及该复合属性包含的非复合属性,则浏览器计算复合属性的子属性时,不会重复计算已包含的属性

  [注意]低版本webkit内核浏览器会出现bug,不仅复合属性被当作一个属性来触发事件,而且会多触发一次

[注意]当过渡事件执行完后,应及时使用removeEventListener取消绑定,以免对其他效果造成影响

var index = 0;//兼容低版本safari、IOS、androidtest.addEventListener("webkitTransitionEnd", myFunction);// 标准语法test.addEventListener("transitionend", myFunction);function myFunction() {    index++;    this.innerHTML = index;    if(index == 1){        test.removeEventListener("webkitTransitionEnd", myFunction);        test.removeEventListener("transitionend", myFunction);    }}

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

463

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

135

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

64

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

26

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

14

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

524

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

53

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号