禁用/关闭继承的CSS3过渡


117

所以我有以下css过渡附加到a元素:

a { 
     -webkit-transition:color 0.1s ease-in, background-color 0.1s ease-in ;  
     -moz-transition:color 0.1s ease-in, background-color 0.1s ease-in;  
     -o-transition:color 0.1s ease-in, background-color 0.1s ease-in;  
     transition:color 0.1s ease-in, background-color 0.1s ease-in; 
}

有没有办法禁用特定元素上的这些继承的过渡?

a.tags { transition: none; } 

似乎没有完成这项工作。

Answers:


166

transition: none鉴于以下HTML ,似乎支持使用(对Opera进行了特定调整):

<a href="#" class="transition">Content</a>
<a href="#" class="transition">Content</a>
<a href="#" class="noTransition">Content</a>
<a href="#" class="transition">Content</a>

...和CSS:

a {
    color: #f90;
    -webkit-transition:color 0.8s ease-in, background-color 0.1s ease-in ;  
    -moz-transition:color 0.8s ease-in, background-color 0.1s ease-in;  
    -o-transition:color 0.8s ease-in, background-color 0.1s ease-in;  
    transition:color 0.8s ease-in, background-color 0.1s ease-in; 
}
a:hover {
    color: #f00;
    -webkit-transition:color 0.8s ease-in, background-color 0.1s ease-in ;  
    -moz-transition:color 0.8s ease-in, background-color 0.1s ease-in;  
    -o-transition:color 0.8s ease-in, background-color 0.1s ease-in;  
    transition:color 0.8s ease-in, background-color 0.1s ease-in; 
}
a.noTransition {
    -moz-transition: none;
    -webkit-transition: none;
    -o-transition: color 0 ease-in;
    transition: none;
}

JS小提琴演示

已在Ubuntu 11.04上使用Chromium 12,Opera 11.x和Firefox 5进行了测试。

对Opera的特定修改是使用,-o-transition: color 0 ease-in;它的目标与其他transition规则中指定的属性相同,但是将过渡时间设置为0,这有效地防止了过渡的出现。a.noTransition选择器的使用仅是为元素提供特定的选择器,而无需进行过渡。


编辑注意,@FrédéricHamidi的answerall(至少对于Opera而言)使用比列出不想转换的每个单独的属性名称更为简洁。

all-o-transition: all 0 none自删除@Frédéric的答案后,更新了JS Fiddle演示,展示了在Opera:中的用法


嗯,我需要在过渡之前添加特定于浏览器的标签。邪恶,欢呼!
Scotty

感谢歌剧的过渡信息。
pedro_sland 2012年

5
Opera确实对这种区别感到无聊
JuniorMayhé2012年

1
为什么你不能做这样的事情:transition:无颜色,背景颜色0.1s缓入;

26

如果要禁用单个过渡属性,可以执行以下操作:

transition: color 0s;

(因为零秒转换与无转换相同。)


表现顽固的人可能会发脾气,但这对于禁用单个财产似乎是合法的。
doublejosh

现在,它不适用于Chrome浏览器。这只是禁用所有继承的过渡。
反转

您能举一个例子吗@Inversion
疯狂

@WillMadden,这里jsfiddle.net/312bu8po尝试初始状态,然后取消注释CSS中准备好的行-过渡left将被删除。
反转

2

删除所有过渡的另一种方法是使用unset关键字:

a.tags {
    transition: unset;
}

在的情况下transitionunset等效于initial,因为transition它不是继承的属性:

a.tags {
    transition: initial;
}

一位了解unsetinitial能立即判断出这些解决方案正确的读者,而无需考虑的特定语法transition


IE对unset和initial的支持
不佳

caniuse.com/#feat=css-unset-value-如果需要IE11支持,我可能会选择Initial。
Nick Middleweek

0

您也可以取消继承包含元素内的所有转换:

CSS:

.noTrans *{
-moz-transition: none;
-webkit-transition: none;
-o-transition: color 0 ease-in;
transition: none;
}

HTML:

<a href="#">Content</a>
<a href="#">Content</a>
<div class="noTrans">
<a href="#">Content</a>
</div>
<a href="#">Content</a>

2
嗯,我可能不建议这样做。该规则不适用于您将类应用于其的元素,仅适用于子元素,它不适用于每个子元素,即使是不需要该规则的子元素,也可能导致特定性和可扩展性问题。
Scotty,2016年

最近,这对我来说是一个非常有用的解决方案,可从Google地图元素中全局删除过渡,这些过渡增加了地图行为的怪异性。
freeworlder

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.