颜色的过渡是即时的? [复制]

Posted

技术标签:

【中文标题】颜色的过渡是即时的? [复制]【英文标题】:Transitions for colurs are instant? [duplicate] 【发布时间】:2019-04-08 01:20:10 【问题描述】:

我在进行基于颜色的过渡时遇到了一些问题...

我正在使用以下 CSS:

.embtn 
    position:absolute;
    top:0vh ;
    left: 0vw;
    border-radius: 5vw;

    padding: 0.2vw;
    color: red; 
    width: calc(2vw + 1vh); 
    height: calc(2vw + 1vh);
    background-color: white;
    -webkit-transition: background-color 2s ;
    -webkit-transition: width 0.5s ease-out;
    -o-transition: background-color 2s ;
    -o-transition: width 0.5s ease-out;
    -moz-transition: background-color 2s ;
    -moz-transition: width 0.5s ease-out;
    transition-delay: 2s;
    transition: background-color 2s ;
    transition-delay: 2s;
    transition: width 0.5s ease-out;
    transition-delay: 2s;

.embtn:hover 


    -webkit-transition: background-color 2s ;
    -webkit-transition: width 0.5s ease-out;
    -o-transition: background-color 2s ;
    -o-transition: width 0.5s ease-out;
    -moz-transition: background-color 2s ;
    -moz-transition: width 0.5s ease-out;
    transition: background-color 2s ;
    transition: width 0.5s ease-out;
    background-color: black;
    width: 30vw;


关于以下代码:

<div class='embtn'><div  id="searchproduct" style="font-size:calc(1vw + 1vh);cursor:pointer; display: inline;" onClick="searchProducts()">&#x1F50D;</div>

<input id="search" style=" color: white; position:absolute; top: calc(((2vw + 1vh)/2)-(1vw + 1vh); );  ; left: 3vw; display: inline; border-style: none; outline: none; background: transparent;  width: 25vw; font-size: calc(1vw + 1vh); " type="text" placeholder=" Search..." name="search" required>
</div>

并且希望看到延迟的过渡...宽度过渡在预期的延迟下工作正常,但颜色过渡没有延迟...即它不仅立即发生,而且在发生之前没有等待 2 秒。 ..

有什么建议吗?

【问题讨论】:

【参考方案1】:

问题是您在之后立即用另一个 CSS 属性覆盖了一个 CSS 属性:

transition: background-color 2s;
transition: width 0.5s ease-out;

如果您这样做,您将看不到 background-color 的任何过渡效果,因为您随后立即将其覆盖,仅适用于 width

转换多个 CSS 属性的正确方法是用逗号分隔每个转换,如下所示:

transition: background-color 2s ease-out 0.5s, width 2s ease-out 0.5s;

一次设置一个或多个过渡属性的简写语法如下:

transition: <property> || <duration> || <timing-function> || <delay> [, ...];

看看这个Multiple animated properties example

最后,这是您的示例,在 background-colorwidth 属性上进行了转换。

.embtn 
  border-radius: 5vw;
  width: calc(2vw + 1vh);
  height: calc(2vw + 1vh);
  background-color: white;
  transition: background-color 2s ease-out 0.5s, width 2s ease-out 0.5s;


.embtn:hover 
  background-color: black;
  width: 30vw;
<div class='embtn'>
  <div id="searchproduct">&#x1F50D;</div>
  <input id="search" type="text" placeholder=" Search..." name="search" required>
</div>

【讨论】:

【参考方案2】:

要在多个属性上设置转换,正确的语法是在同一 transition 简写声明中用逗号分隔每个属性,如下所示:


  ...
  transition: background-color 2s ease 2s, width .5s ease-out;
  /*  property ^               ^    ^   ^    ^    ^      ^   ^      
                      duration ^    ^   ^    ^    ^      ^   ^
                    timing-function ^   ^    ^    ^      ^   ^
                                  delay ^    ^    ^      ^   ^
                                    property ^    ^      ^   ^
                                         duration ^      ^   ^
                                         timing-function ^   ^
                                         implicit delay (0s) ^ */

您拥有的这段代码执行以下操作:


  ...
  transition: background-color 2s;
  transition-delay: 2s;
  transition: width 0.5s ease-out;
  ...

这样做:

    transition-property 设置为background-colortransition-duration 设置为2stransition-timing-function 设置为ease(默认),transition-delay 设置为0stransition-delay 覆盖为2stransition-property 设置为width,将transition-duration 设置为0.5s,将transition-timing-function 设置为ease-outtransition-delay 设置为0s有效地覆盖@98765443和2.

有关如何使用transition 速记的更深入信息,我推荐MDN 或W3C spec。

【讨论】:

【参考方案3】:

首先,如果你需要在 mouseenter 和 mouseleave 上实现相同的悬停效果,只需在没有 :hover 选择器的元素上设置属性

其次,您可以通过在下面设置宽度过渡来覆盖背景颜色过渡。如果您必须指定多个属性(不使用默认的所有属性),请将它们以逗号分隔

.embtn 
    ...
    transition: width 0.5s ease-out 2s, background 2s ease 2s;

.embtn:hover 
    ....

单个属性的语法是

transition: property duration timing-function delay|initial|inherit;

https://www.w3schools.com/cs-s-ref/css3_pr_transition.asp

【讨论】:

以上是关于颜色的过渡是即时的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CSS 中从 HEX 过渡到渐变? [复制]

ae里的渐变过度在哪里

为啥它不工作。过渡属性? [复制]

复制并过渡到ipad,它是通用应用程序吗?

可以使用 Flutter 复制 iOS App Store 过渡吗?

如何在 UITableView 重新加载期间控制过渡动画? [复制]