关于transition和animation的执行过程的处理优先级的疑惑,求专业解答~

关于transition和animation的执行过程的处理优先级的疑惑,求专业解答~

<!DOCTYPE html>

<html>

<head>

<style type="text/css">

section{

width:600px;height:400px;margin:100px auto;

border:20px solid skyblue;border-radius:5px;

position:relative;

}

section:after{

display:block;content:"";clear:both;

}

input{

display:none;

}

label{

width:150px;height:30px;margin-top:350px;

float:left;

cursor:pointer;

font-style:oblique;font-size:24px;line-height:32px;text-align:center;

position:relative;

z-index:1000;

}

label:before{

width:34px;height:34px;

content:"";

position:absolute;left:50%;margin-left:-17px;

border-radius:50%;

box-shadow:0 0 0 4px rgba(255,255,255,.35);

}

label:not(:last-of-type):after{

width:2px;height:400px;

content:"";

position:absolute;left:148px;bottom:-19px;

background:linear-gradient(180deg,transparent,rgba(255,255,255,.5));

}

.picbox{

width:100%;height:100%;

position:absolute;top:0;left:0;

overflow:hidden;

}

.picbox div{

width:150px;height:100%;

float:left;

position:relative;

overflow:hidden;

}


/*---------------------重点分割线---------------------*/

.picbox>div:nth-child(1)>span {background-position:0 0;}

.picbox>div:nth-child(2)>span {background-position:-150px 0;}

.picbox>div:nth-child(3)>span {background-position:-300px 0;}

.picbox>div:nth-child(4)>span {background-position:-450px 0;}


.picbox>div>span:nth-child(1) {background-image:url("images/1.jpg");}

.picbox>div>span:nth-child(2) {background-image:url("images/2.jpg");}

.picbox>div>span:nth-child(3) {background-image:url("images/3.jpg");}

.picbox>div>span:nth-child(4) {background-image:url("images/4.jpg");}


/*过渡效果在这段代码*/

.picbox span{

width:100%;height:100%;

position:absolute;top:0;left:0;

transform:translate(-150px,0);

transition:transform 500ms ease-in-out;

}


input:nth-of-type(1):checked~.picbox>div>span:nth-child(1),

input:nth-of-type(2):checked~.picbox>div>span:nth-child(2),

input:nth-of-type(3):checked~.picbox>div>span:nth-child(3),

input:nth-of-type(4):checked~.picbox>div>span:nth-child(4){

z-index:10; transform:translate(0,0); animation:none;

}


/*右出动画效果*/

input:checked~.picbox>div>span:nth-child(1),input:checked~.picbox>div>span:nth-child(2),

input:checked~.picbox>div>span:nth-child(3),input:checked~.picbox>div>span:nth-child(4){

animation:slideOut 500ms ease-in-out;

}

@keyframes slideOut{

0%{transform:translate(0,0);}

100%{transform:translate(150px,0);}

}


</style>

</head>

<body>

<section>

<input type="radio" name="pic" id="radio1" checked>

<label for="radio1">1</label>

<input type="radio" name="pic" id="radio2">

<label for="radio2">2</label>

<input type="radio" name="pic" id="radio3">

<label for="radio3">3</label>

<input type="radio" name="pic" id="radio4">

<label for="radio4">4</label>

<div class="picbox">

<div>

<span></span><span></span><span></span><span></span>

</div><div>

<span></span><span></span><span></span><span></span>

</div><div>

<span></span><span></span><span></span><span></span>

</div><div>

<span></span><span></span><span></span><span></span>

</div>

</div>

</section>

</body>

</html>


以上是完整代码,以下有几点疑惑:

1. 当把input:nth-of-type(1~4):checked~.picbox>div>span:nth-child(1~4)里面的animation:none;都去掉时,transition过渡和animation动画会产生冲突,结果是只执行transition而不执行animation,是不是可以说明:当控制同一个元素的同一个属性时,transition的执行权重比animation的高?

2. 如果把最下面的animation动画效果代码去掉,会发现当前选中的图片从左向右移进来,与此同时上一个选中的图片从右到左返回去,这是一个完整transition过渡过程(来回往返,默认状态-->指定状态-->默认状态),这个没有什么问题。

而加入animation动画效果代码之后,animation控制的是上一个选中的图片的状态,这和transition过渡的返回过程不就产生冲突了吗,也就是上一个选定的图片本该是被transition控制向左移出,但实际却被animation控制了向右移出。同一个元素的同一个属性控制,在这时候是animation发挥了作用,这和上面第一条的“transition的执行权重比animation的高”有点矛盾,请问这是为什么?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
嘘_别说话 2017-11-08 17:37:32
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <style>
    div {
        width: 200px;
        height: 300px;
        background-color: red;        
        animation: mymove 5s infinite;  
        transition: transform 4s ease-in-out;
    }
    div:hover{ transform:translate(400px,400px);} 
    @keyframes mymove {
        from {
            transform:translate(0,0);
        }
        to {
            transform:translate(100px,100px);
        }
    }
 
  
    </style>
</head>
 
<body>
    <div></div>
</body>
 
</html>

重新修改测试了,不管如何替换位置,都是执行animation~

你也可以看下我写的demo。我觉得animation和tranisition是不同的效果,针对情况去使用,没有权重这一说。

  • 提问者 woximiemie #1
    <!DOCTYPE html> <html lang="en"> <head> <style type="text/css"> section{ width:600px;margin:100px auto 0; } .selector{ width:148px;height:48px;background:skyblue; border:orange 1px solid; float:left; } .clr{clear:both;} .box{ width:600px;height:300px; } .box div{ width:150px;height:300px; float:left;line-height:300px; transition: transform .5s ease-in-out; } .box>div:nth-child(1){background:rgba(255,255,0,.25);} .box>div:nth-child(2){background:rgba(255,0,255,.25);text-indent:25px;} .box>div:nth-child(3){background:rgba(0,255,255,.25);text-indent:50px;} .box>div:nth-child(4){background:rgba(0,0,255,.25);text-indent:75px;} .s1:hover~.box>div:nth-child(1){transform: translate(-150px,0);animation:none;} .s2:hover~.box>div:nth-child(2){transform: translate(-150px,0);animation:none;} .s3:hover~.box>div:nth-child(3){transform: translate(-150px,0);animation:none;} .s4:hover~.box>div:nth-child(4){transform: translate(-150px,0);animation:none;} .selector:hover~.box>div{ animation:rightOut .5s ease-in-out; } @keyframes rightOut{ 0% {transform: translate(0px,0);} 100%{transform: translate(150px,0);} } </style> </head> <body> <section> <div class="selector s1"></div> <div class="selector s2"></div> <div class="selector s3"></div> <div class="selector s4"></div> <div class="clr"></div> <div class="box"> <div>1</div><div>2</div><div>3</div><div>4</div> </div> </section> </body> </html>
    2017-11-09 13:12:43
  • 提问者 woximiemie #2
    我上面仿照课程案例做了一个简单的demo,大概知道了同时操控transition和animation的一些技巧(这里的animation:none;去掉之后执行的是animation不奇怪,问题在下面) 的确和你说的一样,我做了好多个demo的情况也是只执行animation。 所以我就想不明白为什么这个课程的案例,把input:nth-of-type(4):checked~.picbox>div>span:nth-child(4){z-index:10; transform:translate(0,0); animation:none;}里的animation:none;去掉之后,会执行transition而animation却失效了
    2017-11-09 13:13:18
  • 嘘_别说话 回复 提问者 woximiemie #3
    我觉得你写的演示不对,老师的代码是animation控制的是图片从做到右的动画,transition控制的是left的过渡效果,也就是left属性如果去动画,你再去看下老师的代码,并不是给span添加一样的特效!
    2017-11-09 18:46:58
嘘_别说话 2017-11-08 15:06:29

我觉得不冲突把,你的代码太多了,好复杂,我写了一个demo,你看下

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <style>
    div {
        width: 200px;
        height: 300px;
        background-color: red;
        position:relative;
        animation: mymove 5s infinite;
        -webkit-animation: mymove 5s infinite;
        transition: width 4s;
    }

    div:hover {
        width: 400px;
    }

    @keyframes mymove {
        from {
            left: 0px;
        }
        to {
            left: 200px;
        }
    }

    @-webkit-keyframes mymove
    {
        from {
           left: 200px;
        }
        to {
            left: 200px;
        }
    }
    </style>
</head>

<body>
    <div></div>
</body>

</html>

transition和animation不冲突啊~可以同时执行,如果你要给一个元素同时添加transition和animation,且都是一个动画,这种情况发生的几率太小了吧

  • 提问者 woximiemie #1
    谢谢你的回复,让我发现我问题的描述不够准确 是对同一个元素的同一个属性,也就是span的translate,transition控制的是的translate属性,animation控制的也是translate属性,同时控制的话,只能有一个发生效果 或者你可以再尝试demo一下
    2017-11-08 15:14:44
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
HTML5与CSS3实现动态网页 2018
  • 参与学习       1887    人
  • 提交作业       4643    份
  • 解答问题       5760    个

有HTML和CSS基础,却不知道如何进阶?本路径带你通过系统学习,完成从“会做网页”到“做出好的动态网页”的蜕变,迈出成为前端工程师的第一步。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师