2012-03-14 18 views
27

Çalıştığım bir web sitesinde bazı başlıklarda bazı CSS3 geçişlerini uygulamaya çalışıyorum, ancak metin içeren öğelerle ilgili geçişler hakkında bir şeyler var Bu gerçekten beni rahatsız ediyor: bir fontun gliflerini ima eden veya ızgaraya uyan tarayıcılarda (ki bunların çoğunu belki de bar, belki de Safari), görebileceğiniz bir geçişin başlangıcında ve sonunda gözle görülür bir 'atlama' var Bu metin, bu jsfiddle'de gösterildiği gibi piksel ızgarasına geri çekilir: http://jsfiddle.net/8csA9/20/ (bunun bir kısmı filtrelemeden dolayı muhtemelen anlık bir bulanıklıktır, ancak en azından FF ve Chrome'da kesinlikle bir şekil değişikliği var)Renkli (ızgarayla takılı) metin içeren öğelerdeki 'jumpy' CSS geçişlerini engelle

Normalde yazı tipi oluşturmanın karmaşıklıklarını karıştırmayı düşünmüyorum, ancak düşünün Gliflerin çok büyük olması, bu durumda gerçekten önemli olmadığını hissetmekteyim ve ipuçlarını devre dışı bırakmanın bir yolu ya da bu geçişleri biraz daha pürüzsüz hale getirmenin başka bir yolu olup olmadığını merak ediyordum. Bunun yapılabileceğini bilen var mı, nasıl?

Not: sadece sadece statik bir rotasyon da Firefox metin ipucu devam azından yapar uygulayarak, geçişler ve sonuç oldukça görünümlü biter ötesinde bu soru aslında .. garip

PPS biraz uzatır: Orada yapar '-webkit-font-smoothing' özelliği var gibi görünüyor (ya da var), ancak CSS3-fontlar taslağı temel aldığı kuralı (font-pürüzsüz) bırakmış gibi görünüyor ve sadece Chrome'da çalışmış gibi görünüyor. Mac için

+2

nasıl ilginç! Bu yazı tipi oluşturmanın işletim sistemi tarafından OS tarafından ele alınacağını ve dönüştürüleceğinin (diğer tüm öğeler gibi) olmasını beklerdim - bu durum böyle değildir. Sanırım ana kaygınız, belirli bir devletin tercihinden ziyade geçişin fırlamasıdır - Yaratılış motorunun geçişin devam ettiğini düşünmesini kandırabilir misiniz? –

+0

Evet, tam olarak, işletim sistemi ile istediği her şeyi (veya kullanıcı istediğini) yapan bir DJ'le iyiyim, sadece animasyonun daha az jumpy/jittery olmasını istiyorum.Başlangıçta, grid uydurma işlemini daha az yararlı kılan (çok küçük bir rotasyon gibi) herhangi bir dönüşümün uygulanmasının, ipuçlarının devre dışı kalmasını sağlayacağını düşünmüştüm ama ne yazık ki bu durum böyle görünmüyor. Tarayıcıyı sürekli bir geçişe kandırma fikriniz ilginç olsa da – aphax

+0

@aphax Bunların hepsini söylediğinizde çok doğrusınız. Bu olur. Şimdilik bir süredir bunun için bir çözüm bulmaya çalışıyorum, ama gelebildiğim tek şey bu türden küçük geçişlere sahip olmak. Bir şeyi 5px ile hareket ettirmek yerine sadece 1px ile hareket ettirmek istiyorum. O zaman daha az sarsıntılı görünüyor. Ve tekrar söyleyeceğim, bunu düzeltmenin bir yolu yok gibi görünüyor. – Aniket

cevap

29

Kullanım Arkadan görünüş: Gizli; ** Güncelleme: Webkit moz mz ve arka yüz görünürlüğü üzerinde standart http://jsfiddle.net/jugularkill/58S2z/4/

Daha: http://www.w3schools.com/cssref/css3_pr_backface-visibility.asp

+0

Bir şey kaçırıyor olabilirim, ama FF 12'de bu kukule OP'ninkiyle aynı görünüyor. Başlangıçta ve sonunda hala titreme ve gecikme var. –

+0

İlginç, bu, Chrome 18'de fırtınanın gitmesine neden oluyor gibi görünüyor, ancak Firefox 11'de değil. Bu mülkün ne anlama geldiğine baktığımızda, bunun nasıl uygulandığının bir yan etkisi olduğu görülüyor. Chrome, ama yine de, ilginç bir çalışma etrafında – aphax

+3

biliyorum eski bir yazı, ama diğerleri için ... Bunu yapmak için tarayıcı önekler (-moz, -webkit, ...) kullanmanız gerekir iş. – Raffael

6

Bu benim için bir cazibe gibi çalıştı. Geçiş özelliği olan öğelere "arka yüz görünürlüğü: gizli" (büyük tarayıcı önekleri) ekledim ve geçiş sırasında karşılaştığım atlama/titreşimi çözdüm. Firefox, IE (9/10) ve Chrome'da test ettim.

Yine de fark ettiğim bir şey: Özelliğin, öğenin sözde sınıfına (ör., Gezici, etkin ...) karşıt olarak öğenin doğal durumuna eklediğinizden emin olun. donanım hızlandırmalı 3D geçişleri kullanmak tarayıcı zorlar çünkü

.backface-visibility(hidden); 
1

Eğer bu sınıfı kullanabilirsiniz Bootstrap kullanıyorsanız.

1

transform: translate3d(0, 0, 0); veya transform: translateZ(0); sıklıkla geçiş hataları düzeltmek için yardımcı olur ekleme:

3

Benim için, backface-visibility: hidden ve transform-style: preserve-3d hem de sarsıntılı içerik içeren öğeye eklemem gerektiğini buldum. Örneğin

:

.element-with-jumpy-content { 
    -webkit-transform-style: preserve-3d; 
    -moz-transform-style: preserve-3d; 
    transform-style: preserve-3d; 
    -webkit-backface-visibility: hidden; 
    -moz-backface-visibility: hidden; 
    backface-visibility: hidden; 
}