Devralınan CSS3 geçişlerini devre dışı bırakın / kapatın


117

Bu yüzden a öğesine ekli aşağıdaki css geçişlerine sahibim:

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

Belirli bir öğede bu devralınan geçişleri devre dışı bırakmanın bir yolu var mı?

a.tags { transition: none; } 

İşi yapıyor gibi görünmüyor.

Yanıtlar:


166

transition: noneAşağıdaki HTML ile kullanımı destekleniyor (Opera için özel bir ayarlama ile):

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

... ve 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 demosu .

Ubuntu 11.04'te Chromium 12, Opera 11.x ve Firefox 5 ile test edilmiştir.

Opera'ya özel adaptasyon -o-transition: color 0 ease-in;, diğer transitionkurallarda belirtilen aynı özelliği hedefleyen , ancak geçiş zamanını ayarlayan 0, bu da geçişin farkedilebilir olmasını etkin bir şekilde engelleyen kullanımdır. a.noTransitionSeçicinin kullanımı, geçişler olmadan öğeler için belirli bir seçici sağlamaktır.


Düzenlenen bu nota Frédéric Hamidi cevabı @ kullanılarak all(en azından, Opera için) Eğer geçişe sahip olduğu istemediklerini her mülk adını listeleyen çok daha özlü.

all-o-transition: all 0 none@ Frédéric'in cevabının kendi kendini silmesinin ardından Opera: 'nın kullanımını gösteren güncellenmiş JS Fiddle demosu .


Ahh, geçişten önce tarayıcıya özel etiketleri eklemem gerekiyordu. Kötü, şerefe!
Scotty

Opera için teşekkürler, geçiş bilgisi yok.
pedro_sland

5
Opera bu farkla gerçekten sıkıcı
Junior Mayhé

1
neden böyle bir şey yapamıyorsunuz: geçiş: renk yok, arka plan rengi 0.1s kolaylığı;

26

Tek bir geçiş özelliğini devre dışı bırakmak istiyorsanız şunları yapabilirsiniz:

transition: color 0s;

(sıfır saniyelik geçiş, geçiş olmamasıyla aynı olduğundan.)


Bir performans tutkunu suç işleyebilir, ancak bu, tek bir özelliği devre dışı bırakmak için yasal görünüyor.
doublejosh

Şu anda Chrome'da benim için çalışmıyor. Bu sadece miras alınan tüm geçişleri devre dışı bırakır.
İnversiyon

Bir örnek verebilir misiniz @Inversion
Will Madden

@WillMadden, burada jsfiddle.net/312bu8po başlangıç ​​durumunu deneyin ve ardından css'de hazırlanan satırın açıklamasını kaldırın - geçiş için geçiş leftkaldırılacaktır.
Tersine

2

Tüm geçişleri kaldırmanın başka bir yolu da unsetanahtar kelimedir:

a.tags {
    transition: unset;
}

Durumunda transition, unseteşdeğerdir initialçünkü transitionbir miras özelliği değildir:

a.tags {
    transition: initial;
}

Belirli sözdizimi hakkında düşünmek zorunda kalmadan, bu çözümlerin doğru olduğunu bilen unsetve initialhemen söyleyebilen bir okuyucu transition.


unset & initial, IE ile iyi desteklenmiyor
allenski

caniuse.com/#feat=css-unset-value - IE11 desteğine ihtiyacınız varsa muhtemelen baş harflerle giderim.
Nick Middleweek

0

Ayrıca, içeren bir öğenin içindeki tüm geçişleri miras bırakabilirsiniz:

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
Hmm, muhtemelen bu şekilde yapmayı tavsiye etmem. Kural, sınıfı uyguladığınız öğe için geçerli değildir, yalnızca çocuklar için geçerlidir ve kuralın uygulanmasına ihtiyaç duymayanlar da dahil olmak üzere her çocuk için geçerlidir , bu da daha ileride özgüllük ve ölçeklenebilirlik sorunlarına yol açabilir.
Scotty

Bu, son zamanlarda harita davranışına tuhaflık katan bir Google harita öğesinden küresel olarak geçişleri kaldırmak için çok yararlı bir çözümdü.
freeworlder

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.