CSS 初始状态或最终状态的过渡属性?

问题描述 投票:0回答:2

我刚刚读过https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Using_CSS_transitions

有一个简单的例子如下:

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

和CSS:

.box {
    border-style: solid;
    border-width: 1px;
    display: block;
    width: 100px;
    height: 100px;
    background-color: #0000FF;
    transition:width 2s, height 2s, background-color 2s, transform 2s;
}
.box:hover {
    background-color: #FFCCCC;
    width:200px;
    height:200px;
    transform:rotate(180deg);
}

当移动鼠标悬停在框上时,会按预期执行转换,例如从

.box
(初始状态)到
.box:hover
(最终状态)。 但是,当将鼠标移出框时,转换会反向执行,例如从
.box:hover
.box

我的问题是我们在初始状态还是最终状态上设置 CSS 转换属性? 规范是否明确了这个问题?

css css-transitions transition
2个回答
3
投票

您可以在转换的“向前”或“向后”状态上指定

transition-*
属性。它不仅仅需要在前者上。 转换模块有点暗示了这一点:

作者可以在指定触发转换的值的同一规则中指定“transition-duration”、“transition-timing-function”或“transition-delay”的值,或者可以同时更改这些属性当他们改变触发转换的属性时。由于影响转换的是这些“transition-*”属性的新值,因此这些值将用于转换到关联的转换值。

在下面的示例中,我在

transition-duration
上给出了 4 秒的
:hover
,但您会注意到,一旦您将鼠标移开,它就会返回到您在示例中指定的 1 秒值。您可以对其他动态伪类应用相同的规则。

http://jsfiddle.net/BZeQW/1/


0
投票

我确信接受的答案是正确的,但由于某种原因我没有得到它。我必须亲自使用 JSFiddle 直到我弄清楚它。这就是 JSFiddle——如果你不喜欢阅读,你可以玩一下。

enter image description here

但这是我的答案:

都需要转换。但 CSS 继承就是为什么它看起来只需要在 one 上。 发生的情况是,如果将过渡放在

.box
上,
.box:hover
also 也会继承过渡,因为它仍然是
.box
。具有过渡的含义是,如果带有过渡的元素当前看起来不像它定义的样式,那么它将过渡到该样式。

如果您仅将过渡放在

.box:hover
上,则
.box
上不再有过渡。这就是为什么它不进行“反向”转换。

添加类而不是伪类也是如此,如我的 JSFiddle 中所示。

© www.soinside.com 2019 - 2024. All rights reserved.