【问题标题】:Animate a div?Proper selector?为 div 设置动画?正确的选择器?
【发布时间】:2014-07-06 18:20:58
【问题描述】:

我有 Div Ainput 表单。当输入聚焦时,如何实现 Div A 做一些变换动画?是否可以仅使用 CSS?

【问题讨论】:

    标签: html css animation focus transform


    【解决方案1】:

    如果您将 div 放在输入之后,您可以将 :focus 伪选择器与相邻的兄弟选择器 + 组合在一起。像这样:

    input:focus + div {
        -webkit-transition: all .5s;
        -moz-transition: all .5s;
        -o-transition: all .5s;
        transition: all .5s;
        -webkit-transform:rotate(45deg);
        -moz-transform:rotate(45deg);
        -o-transform:rotate(45deg);
        transform:rotate(45deg);
    }
    

    如需演示,请查看此JSFiddle

    编辑:

    要在输入不再处于焦点时将 div 平滑地旋转回其原始位置,您可能需要这样设置:

    div {
        -webkit-transform:rotate(0);
        -moz-transform:rotate(0);
        -o-transform:rotate(0);
        transform:rotate(0);
        -webkit-transition: all .5s;
        -moz-transition: all .5s;
        -o-transition: all .5s;
        transition: all .5s;
    }
    
    input:focus + div {
        -webkit-transform:rotate(45deg);
        -moz-transform:rotate(45deg);
        -o-transform:rotate(45deg);
        transform:rotate(45deg);
    }
    

    更新Fiddle

    编辑2

    如果 div 放在输入之前,或者中间有很多元素,您可以使用 javascript 来执行此操作。首先将 CSS 选择器 input:focus + div 重命名为 .my_div.animate。然后使用 javascript 添加/删除 .animate 类,如下所示:

    // These have to match your elements
    var my_input = document.querySelector(".my_input");
    var my_div = document.querySelector(".my_div");
    
    // Add class "animate" on focus
    my_input.onfocus = function(){
        my_div.className = my_div.className + " animate";
    };
    
    // Remove class "animate" on blur
    my_input.onblur = function(){
        my_div.className = my_div.className.replace( /(?:^|\s)animate(?!\S)/ , '' );
    };
    

    JSFiddle 上的演示。

    【讨论】:

    • 例如,我在 html 代码的开头有一个 div,最后有一个输入,以及它之间的一些东西。是否仍然可以使用相邻的兄弟选择器“+”来选择它?
    • 不,+ 只会匹配下一个兄弟。如果 div 放在 input 之前,或者中间有很多内容,则必须寻找 javascript 解决方案。
    • 啊,好的,非常感谢。没想到回答这么快,现在我知道为什么每个人都喜欢这个网站了
    • 很高兴为您提供帮助!用 javascript 解决方案更新了我的答案。希望这能满足您的需求!
    • 是的,这正是我正在寻找的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多