深入理解CSS过渡属性transition

深入理解CSS过渡属性transition

CSS中过渡属性transition,可以在不需要JS的情况下实现简单的动画交互效果。

定义

过渡transition是一个复合属性,包括transition-property,transition-durationtransition-timing-functiontranstion-delay四个子属性。通过四个子属性配合完成过度效果。

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

Internet Explorer 10、Firefox、Opera 和 Chrome 支持 transition 属性。

Safari 支持替代的 -webkit-transition 属性。

注释:Internet Explorer 9 以及更早版本的浏览器不支持 transition 属性。

Demo:

.test {
  height:100px;
  width:100px;
  background-color:red;
  transition-duration:3s;  /*过渡时间为3秒*/
  transition-property:all;
  transition-timing-function:ease;
  transition-delay:0s;
}
.test:hover{
  width:300px;
}
<div class="test"></test>

复合属性

属性transition这四个子属性中,只有transition-duration是必需值且不能为0;其中transition-durationtansition-delay都是时间,当存在两个时间时,第一个是transition-duration,如果出现两个时间值,第一个是transition-durationtransition-delay为默认值0s。

transition-property

过渡属性:

  • 值:none || all || <transition-property>

  • 初始值:all

  • 适用于:所有元素

  • 继承性:无

    none:没有指定任何样式
    all :默认值,指定元素所有支持transition-property属性的样式
    <transition-property> : 可选过渡样式
    
可过渡样式

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

颜色:color background-color border-color outline-color
位置:background-position left right top botton
长度:
    [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

  • 值:<time>

  • 初始值:0

  • 应用于:所有元素

  • 继承性:无

  • 该属性不能为负值

  • 该属性必须带单位,如果为0s则为默认值,如为0则为无效值

  • 该值为单值时,所有的过渡属性都对应同样时间;该值为多值时,过渡属性按照顺序对应顺序时间

    transition-property: width,background;
    

过渡延迟时间

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

transition-delay

  • 值:<time>
  • 初始值:0s
  • 应用于:所有元素
  • 继承性:无
  • 【注意】若该属性为负值,无延迟效果,但过渡元素的起始值将从0变成设定值(设定值=延迟时间+持续时间),若该设定值小于等于0;则无过渡效果;若该设定值大于0,则过渡元素从该设定值开始完成剩余的过渡效果。
  • 【注意】该属性必须带单位,0s为默认值,0则为无效值。
  • 该值为单值时,所有过渡属性都对应同样的时间;该值为多值时,过渡属性按顺序对应持续时间。

过渡时间函数

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

transition-timing-function

  • 值:<timing-function>
  • 初始值:ease
  • 应用于:所有元素
  • 继承性:无

取值

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

steps函数

bezier函数

关键字

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

ease:开始和结束慢,中间快。
linear:匀速
ease-in:开始慢
ease-out: 结束慢
ease-in-out:和ease类似,但比ease幅度大
step-start:直接位于结束处
step-end:位于开始处经过时间间隔后结束。

多值功能

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

  1. 设置不同的transition-property,对应的transition-delaytransition-timing-functiontransition-duration的属性相同时,设置一个即可。

    #test1 {
      transition-property:width,background;
      transition-duration:3s;
      transition-timing-function:ease;
      transition-delay:500ms;
    }
    /*相当于*/
    #test1 {
      transition:width 3s ease 500ms,background 3s ease 500ms;
    }
    
  2. transition-property的值的个数多余对应的其他属性时(属性值大于1个),则按顺序取值。

    #test{
      transition-property:width,background,opacity;
      transition-duration:2s,500ms;
      transition-timing-function:linera,ease;
      transition-delay:200ms,4s;
    }
    /*相当于*/
    #test1{
      transition:width 2s linera 200ms, background 500ms ease 4s,opacity 2s linera 200ms;
    }
    
  3. transition-property值得个数少于对应的其他属性,则多余的属性无效。

    #test1{
        transition-property: width;
        transition-duration: 2s,500ms;
        transition-timing-function: linear,ease;
        transition-delay: 200ms,0s;
    }
    /*类似于*/
    #test1{
        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的为准。

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

  6. 若过渡起始值为auto,则浏览器不会自己计算具体数值,不会产生过渡效果。

  7. 隐式过渡

触发方式

一般过渡transition的触发有三种方法,分别是伪类触发、媒体查询触发和Javascript脚本触发。

常见的是通过伪类触发,包括hover,focus,active等。

  • 伪类触发

  • 媒体查询触发

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

    用户点击元素时触发。

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

API

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,298评论 0 11
  • W3C标准中对css3的transition这是样描述的:“css的transition允许css的属性值在一定的...
    青春前行阅读 1,384评论 0 5
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,722评论 0 2
  • 上一篇介绍了CSS3里transform变形属性,本篇介绍另一个人气动画属性transition。transiti...
    张歆琳阅读 24,955评论 1 31
  • 看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印象,因...
    DCbryant阅读 1,853评论 0 4