Вимкнути / вимкнути успадковані переходи 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.