Вимкнути / вимкнути успадковані переходи CSS3


117

Отже, у мене є наступні переходи css, приєднані до елемента:

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; } 

Здається, це не робить.

Відповіді:


166

Використання transition: noneздається, підтримується (з коригуванням певної для Opera) , що задається наступним HTML:

<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 Fiddle демо .

Тестований на Chromium 12, Opera 11.x та Firefox 5 на Ubuntu 11.04.

Спеціальна адаптація до Opera полягає у використанні, -o-transition: color 0 ease-in;яке націлює на те саме властивість, що визначене в інших transitionправилах, але встановлює час переходу до 0, що фактично не дозволяє помітити перехід. Використання a.noTransitionселектора просто для забезпечення конкретного селектора для елементів без переходів.


Відредаговано, щоб зауважити, що відповідь @ Frédéric Hamidi , використовуючи all(принаймні, для Opera), набагато більш стислий, ніж перелічення кожного окремого імені властивості, на яке ви не хочете мати перехід.

Оновлено демонстрацію JS Fiddle, що показує використання allв Opera:-o-transition: all 0 none після самовіддачі відповіді @ Frédéric .


Ах, мені потрібно було додати теги для браузера перед переходом. Злі, ура!
Скотті

Дякуємо за опера, інформація про перехід
pedro_sland

5
Опера дійсно нудна з цією різницею
Junior Mayhé

1
чому не можеш зробити щось на кшталт: перехід: кольоровий жоден, кольоровий фон 0,1-го простота введення;

26

Якщо ви хочете відключити один властивість переходу, ви можете зробити:

transition: color 0s;

(оскільки нульовий другий перехід такий же, як немає переходу.)


Стикери продуктивності можуть образитись, але це видається законним для відключення однієї власності.
doublejosh

Зараз це не працює для мене в Chrome. Це просто вимикає всі успадковані переходи.
Інверсія

Чи можете ви навести приклад @Inversion
Will Madden

@WillMadden, тут jsfiddle.net/312bu8попробуй початковий стан, а потім скаментує підготовлений рядок у css - перехід для leftбуде видалено.
Інверсія

2

Ще один спосіб видалити всі переходи - за допомогою unsetключового слова:

a.tags {
    transition: unset;
}

У випадку transition, що unsetє рівнозначним initial, оскільки transitionне є спадковим майном:

a.tags {
    transition: initial;
}

Читач, який знає unsetі initialможе сказати, що ці рішення одразу правильні, не замислюючись про конкретний синтаксис transition.


unset &
Initial

caniuse.com/#feat=css-unset-value - я, мабуть, перейду з початковою, якщо вам потрібна підтримка IE11.
Нік Міддвейк

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
Гм, я, мабуть, не радив би робити це так. Правило не поширюється на елемент, до якого ви застосовуєте клас, лише до дітей, і воно стосується кожної дитини, навіть тих, які не потребують застосування цього правила, що може призвести до конкретності та проблем масштабованості далі вниз.
Скотті

Нещодавно для мене це було дуже корисним рішенням для видалення глобальних переходів із елемента карти Google, які додавали дивацтва поведінці карт.
freeworlder

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.