CSS dönüşümü kullandıktan sonra bulanık metin: scale (); Chrome'da


129

Görünüşe göre, Google Chrome'da, a yaptıktan sonra bulanık metne neden olan bir güncelleme yapılmış transform: scale(). Özellikle şunu yapıyorum:

@-webkit-keyframes bounceIn {
  0% {
    opacity: 0;
    -webkit-transform: scale(.3);
  }

  50% {
    opacity: 1;
    -webkit-transform: scale(1.05);
  }

  70% {
    -webkit-transform: scale(.9);
  }

  100% {
    -webkit-transform: scale(1);
  }
}

Chrome'da http://rourkery.com adresini ziyaret ederseniz , sorunu ana metin alanında görmeniz gerekir. Bunu yapmıyordu ve diğer webkit tarayıcılarını (Safari gibi) etkilemiyor gibi görünüyor. 3B dönüşümlerle benzer bir sorun yaşayan insanlar hakkında başka yazılar da vardı, ancak bunun gibi 2d dönüşümler hakkında hiçbir şey bulamıyorlar.

Herhangi bir fikir takdir edilecektir, teşekkürler!


Siteyi Firefox ve IE 10 kullanarak ziyaret ettim, sorunu görmeyin. Chrome ile sınırlıysa Google'ın kendi kendine düzeltmesini beklemeniz gerekebilir.
Nolonar

Bulanıklaşma görmüyorum ... Chrome v25 / PC'deyim
vsync

Bu sorunla daha önce de karşılaştım, Nolonar'ın bahsettiği gibi Google'ın düzeltmesini beklememiz gerekecek.
raj_n

Bir çözüm değil, ancak sorunun yalnızca benim için CSS optimizeLegibility kullandığımda ortaya çıktığını fark ettim.
Bangkokian

Bağlantı koptu.
Timothy003

Yanıtlar:


79

Bu sorunu birkaç kez yaşıyorum ve düzeltmenin 2 yolu var gibi görünüyor (aşağıda gösterilmiştir). Oluşturmayı düzeltmek için bu özelliklerden birini veya aynı anda ikisini birden kullanabilirsiniz.

Gizli arka yüz görünürlüğü, animasyonu nesnenin sadece önüne kadar basitleştirdiği için sorunu çözer, oysa varsayılan durum ön ve arka durumdur.

backface-visibility: hidden;

TranslateZ, animasyona donanım ivmesi eklemek için bir hack olarak da çalışır.

transform: translateZ(0);

Bu özelliklerin her ikisi de yaşadığınız sorunu giderir ancak bazı insanlar da eklemeyi sever

-webkit-font-smoothing: subpixel-antialiased;

animasyonlu nesnelerine. Bir web yazı tipinin oluşturulmasını değiştirebileceğini ancak bu yöntemi denemekten de çekinmeyin.


12
Bu tekniklerin hepsi bir şeyleri iyileştiriyor gibi görünüyor, ancak yine de Chrome'u Firefox'ta gördüğüm aynı netlik seviyesine getiremiyorum.
Michael Martin-Smucker

13
backface-visibility: hidden;benim durumumda, opaklık geçişinden kaynaklanan bazı garip bulanık hareketleri çözmede kesinlikle işe yaradı, yani. Tuhaf hareket artık gitti, ANCAK bölümümdeki metinleri kalıcı olarak bulanıklaştırdı.
ITWitch

14
@Ykadaru öne sürdüğü gibi, eklemeyi deneyin perspective(1px)sizin için transform:başka bir şey sorunu çözüldü yaparken bu Chrome'da benim için çalıştı, kod
Serge Eremeev

4
Gnome X11 oturumuyla (Wayland kapalı) Ubuntu 17.10'da çalışan Chrome Sürümü 65.0.3325.162 (Resmi Yapı) (64 bit) üzerinde
çalışmaz

3
Chrome 72'de ilk iki seçenek, dönüşüm sırasında ve sonunda metnin bulanık olmasına neden oluyor
Brandito

25

Özellikle bulanıklığı iyileştirmek için. Chrome'da şunu yapmayı deneyin:

transform: perspective(1px) translateZ(0);
backface-visibility: hidden;

GÜNCELLEME: Perspektif , nesneyi teknik olarak ölçeklendiren ve bulanıklığın 'kalıcı' görünmesini sağlayan z düzlemi ile kullanıcı arasındaki mesafeyi ekler. perspective(1px)Yukarıdaki gibidir ördek kaset biz çözmeye çalışıyoruz bulanıklık eşleşen çünkü. Aşağıdaki css ile daha iyi şansınız olabilir:

transform: translateZ(0);
backface-visibility: hidden;

4
Benim için bu durumu daha da kötüleştiriyor.
balu

1
Benim için bu hatayı düzeltir (bu olmadan, öğe animasyon tamamlandıktan sonra 1px hareket eder, dönüştürün: perspektif (1px) tek başına bunu düzeltin!)
Sergiu

@balu güncellenmiş cevabımı kontrol et! perspective(1px)mülkten kurtulun ve daha iyi çalışıp çalışmadığını görün.
ykadaru

16

Ölçek oranını ayarlamanın biraz yardımcı olduğunu buldum.

Üzerinde kullanmak scale(1.048), (1.05)tam piksel yazı tipi boyutuna daha iyi bir yaklaşım oluşturarak alt piksel bulanıklığını azalttı.

Ayrıca translateZ(0), dönüşüm animasyonunda Chrome'un son yuvarlama adımını ayarlıyor gibi görünen kullandım . Bu, onhover kullanımım için bir artı çünkü hızı artırıyor ve görsel gürültüyü azaltıyor. Ancak bir onclick işlevi için bunu kullanmam çünkü dönüştürülen yazı tipi o kadar çıtır görünmüyor.


1
Benim için işe yarayan tek yaklaşım bu. Diğer yaklaşımlar (arka yüz görünürlüğü, filtre ekleme, perspektif ve eski güzel translateZ) durumu daha da kötüleştirdi. Tam piksel olarak ölçeklendirmeyi deneyin. Örneğin, ölçek faktörü 1,1429 (16/14) kullanarak 14 pikselden 16 piksele gidin.
hugo der hungrige

1
Olmadan benim için çalıştı translateZ(0), sadece değişti, 1.05için1.048
A. volg

15

Beni edilmiş nihayet bu sorunu giderdik ne olursa şans ile burada başka her şeyi denedikten sonra kaldırarakwill-change: transform; özelliği. Bazı nedenlerden dolayı, Chrome'da korkunç derecede bulanık görünen ölçeklemeye neden oldu, ancak Firefox'ta değil.


Neden birisi buna olumsuz oy versin? Anlayamıyorum ... :( Bu, Chrome'un bazı sürümlerinde tamamen geçerli bir sorundur ve genel olarak "değişecek" gibi görünüyor ve hala oldukça yeni ve muhtemelen kullanılmaması gerekiyor. Daha fazla bilgi için greensock'a
Dan

Aynı sorunu yaşadım. Gönderdiğiniz için teşekkürler.
raine

Chrome 75'te material-design-components oluştururken aynı sorunu yaşadım. "Değiştirilecek" css stilini kaldırmak sorunu çözdü.
Rob

Chrome 79'da Onaylandı
Fareesh Vijayarangam

1
Tam tersi var, eklenmesi will-change: transform;sorunu biraz düzeltir
Jakub Zawiślak

14

Onun yerine

transform: scale(1.5);

kullanma

zoom : 150%;

Chrome'daki metin bulanıklaştırma sorununu düzeltir.


Yardımcı olabilir, ancak bazen beyaz sınır çizgilerinin ortaya
Kevin

1
neden olumsuz oy kullandığından emin değilim. Bunu onay kutularına uyguladığımda, bu dönüşümden çok daha iyi çalıştı: scale ()
Brian McCall

2
Firefox için, transform: scale () işlevini kullanın, herhangi bir bulanıklık olmadan çekicilik gibi çalışır. Tarayıcı algılama üzerinde çalışmanız ve chrome / safari ve firefox için buna göre hareket etmeniz gerekir.
Naisheel Verdhan

15
Diğer bir sorun da yakınlaştırmanın geçiş özelliğiyle çalışmadığı, bu nedenle CSS animasyonları için kullanılamamasıdır
ericgrosse

3
Çalışır ve bulanık olanı karıştırır, ancak aynı zamanda öğelerin konumunu da değiştirir.
user1156544

8

Bu, Chrome'da (Sürüm 56.0.2924.87) bir hata olmalıdır, ancak aşağıdaki, konsoldaki css özelliklerini değiştirirken ('. 0') bulanıklığı benim için düzeltir. Rapor edeceğim.

filter: blur(.0px)

1
Hata raporunuzla bir yere vardınız mı?
Diazole

korkarım hatayı nereye gönderdiğimi bile hatırlamıyorum. Öyle de yaptım.
andyw

Bootstrap (4.4.1), Chrome (80.0.3987.132), Windows 10 (görünüm% 125 büyütülmüş) kullanıyorum ve açılır menüde bulanık metinler var. Menü kullanılarak konumlandırılmış transform: translate3d();ve bu soruna neden oluyor gibi görünüyor. Önerilen çözümlerin hiçbiri benim için işe yaramadı. Bunun dışında. Bu, yalnızca önce pozitif bir değere (örneğin blur(0.1px)) ayarlarsam ve sonra olarak değiştirirsem işe yarar blur(0px). Öğe dinamik olduğundan ve aynı zamanda dinamik (JS) bir çözüm gerektirdiğinden, ... bu berbat: \
akinuri

7

Sunderls beni cevaba götürüyor. Hariç filter: scaleyok, ama filter: blurvar.

Sonraki bildirimleri bulanık görünen öğelere uygulayın (benim durumumda bunlar dönüştürülmüş bir öğenin içindeydiler):

backface-visibility: hidden;    
-webkit-filter: blur(0);

Bu neredeyse mükemmel çalıştı. " Neredeyse " çünkü bir geçiş kullanıyorum ve geçiş sırasında öğeler mükemmel görünmüyor, ancak geçiş tamamlandığında görünüyorlar.


-webkit-filter: blur(0);yalnız benim için çalışıyor. backface-visibility: hidden;Daha sonra ölçeklendirmeyi sıfırladığımda öğemi bulanıklaştırıyor.
Kai Hartmann

Bu Chrome için biraz komik ... eğer ayarlarsam blur(0px);düzeltmez. ama yaparsam blur(1px);ve sonra aşağı ok tuşuna blur(0px);basarsam doğru görünüyor. Sayfa yenilemeye gitti / CSS'de ne
yazarsam yazayım

1
@TomRoggero Bu, bulanıklık özelliği değerine daha az özgü ve mizanpajın yeniden çizilmesinin ne zaman yapılacağı hakkında daha fazla ses çıkarır. Biraz gecikmeden sonra JavaScript kullanarak öğeyi yeniden çizmeye zorlamayı deneyebilirsiniz.
Gajus

5

Sorunun herhangi bir şekilde göreceli dönüşümlerde ortaya çıktığını öğrendim. translateX (% 50), ölçek (1.1) veya her ne olursa olsun. mutlak değerler sağlamak her zaman işe yarar (bulanık metin (ures) üretmez).

Burada bahsedilen çözümlerin hiçbiri işe yaramadı ve henüz bir çözüm olmadığını düşünüyorum (bunu yazarken Chrome 62.0.3202.94 kullanarak).

Benim durumumda transform: translateY(-50%) translateX(-50%)bulanıklığa neden oluyor (bir iletişim kutusunu ortalamak istiyorum).

Biraz daha "mutlak" değerlere ulaşmak için, ondalık değerleri olarak ayarlamak zorunda kaldım transform: translateY(-50.09%) translateX(-50.09%).

NOT

Bu değerlerin farklı ekran boyutlarına göre değiştiğinden oldukça eminim. Birine yardımcı olur diye deneyimlerimi paylaşmak istedim.


Ben de aynı şeyi yaparak aynı konuya giriyordum. Translate3d (-% 50, -% 50, 0) ile bir modal merkezliyordum. Benim durumumda, değerleri% -50.048'e yükselttim ve mükemmel görünüyor.
Chris Gutierrez


4

Eklemek perspective(1px)benim için çalıştı.

transform: scale(1.005);

için

transform: scale(1.005) perspective(1px);

3

zoom: 101%;Yakınlaştırma + ölçekleme kombinasyonunu kullanamadığınızda karmaşık tasarımlar için kullanmayı deneyin .


Bunun zoomherhangi bir web standardı tarafından tanımlanmadığını ve firefox caniuse.com/#feat=css-zoom
Boltgolt

3

Benim durumumda aşağıdaki kod bulanık yazı tipine neden oldu:

-webkit-transform: translate(-50%,-50%);
transform: translate(-50%,-50%);

ve sadece yakınlaştırma özelliği eklemek benim için düzeltildi. Yakınlaştırma ile oynayın, aşağıdakiler benim için çalıştı:

zoom: 97%;   

4
İçin firefox desteği yokzoom
Dustin Poissant

3

Chrome'da bulanık dönüşümler (translate3d, scaleX) için bulduğum başka bir düzeltme, öğeyi " display: inline-table ;" olarak ayarlamaktır. Bazı durumlarda (X ekseninde) piksel yuvarlamayı zorlar gibi görünüyor.

Chrome altında alt piksel konumlandırmasının amaçlandığını okudum ve geliştiriciler bunu düzeltmeyecek.


3

2019 Güncellemesi
Chrome görüntüleme hatası hala düzeltilmemiş ve kullanıcıların hatası olmamasına rağmen, bu web sitesinin tamamında sunulan önerilerin hiçbiri sorunu çözmeye yardımcı olmuyor. Her birini boşuna denediğim konusunda hemfikir olabilirim: yalnızca 1 yaklaşır ve bu css kuralı: filter: blur (0); Bu, bir kabın 1 piksel kaydırılmasını ortadan kaldırır, ancak kabın kendisinin ve sahip olabileceği herhangi bir içeriğin bulanık görüntüleme hatasını çözmez.

İşte gerçek: bu sorunun tam anlamıyla bir çözümü yok, bu yüzden işte akışkan web siteleri için bir çalışma.

CASE
Şu anda akışkan bir web sitesi geliştiriyorum ve tümü vurgulu efektlerle ortalanmış ve hem genişlik hem de konumda yüzde değerleri paylaşan 3 div'ım var. Chrome hatası, solda ayarlanan merkez kapsayıcıda meydana geliyor:% 50; ve dönüştürün: translateX (-% 50); ortak bir ayar.

ÖRNEK: Önce HTML ...

<div id="box1" class="box">
    Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry"s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
</div>

<div id="box2" class="box">
    Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry"s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
</div>

<div id="box3" class="box">
    Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry"s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
</div>

İşte Chrome hatasının oluştuğu CSS ...

*{margin:0; padding:0; border:0; outline:0; box-sizing:border-box;  background:#505050;}
.box {position:absolute; border:1px solid #fff; border-radius:10px; width:26%; background:#8e1515; padding:25px; top:20px; font-size:12pt; color:#fff; overflow:hidden; text-align:center; transition:0.5s ease-in-out;}
.box:hover {background:#191616;}
.box:active {background:#191616;}
.box:focus {background:#191616;}
#box1 {left:5%;}
#box2 {left:50%; transform:translateX(-50%);} /* Bugged */
#box3 {right:5%;}

İşte düzeltilmiş css ...

*{margin:0; padding:0; border:0; outline:0; box-sizing:border-box;  background:#505050;}
.box {position:absolute; border:1px solid #fff; border-radius:10px; width:26%; background:#8e1515; padding:25px; top:20px; font-size:12pt; color:#fff; overflow:hidden; text-align:center; transition:0.5s ease-in-out;}
.box:hover {background:#191616;}
.box:active {background:#191616;}
.box:focus {background:#191616;}
#box1 {left:5%;}
#box2 {left:37%;} /* Fixed */
#box3 {right:5%;}

Hatalı keman: https://jsfiddle.net/m9bgrunx/2/
Sabit keman: https://jsfiddle.net/uoc6e2dm/2/

Görebileceğiniz gibi, CSS'de küçük bir değişiklik, konumlandırma için dönüştürme kullanma gereksinimini azaltmalı veya ortadan kaldırmalıdır. Bu aynı zamanda sabit genişlikli web siteleri için de geçerli olabilir.


Öğe yarım pikselde bitebileceğinden, çeviri kullanılırken bulanıklık beklenir . Artık işleri merkezlemek için daha iyi alternatifler var: flexbox sample , grid sample
Timothy003

Test ettiğim ve dönüşüm merkeziyle ilgili bir sorunu var gibi görünen tek tarayıcı Chrome, geri kalan her şey çok net görünüyor. Geriye baktım ve bu konu 7 yıldır ortalıkta! Yine de bir kedinin derisini yüzmenin birçok yolu var ve sizin dediğiniz gibi artık buna gerek yok.
SJacks

bu inanılmaz, ancak filtre: bulanıklık (-0.1px); bana yardımcı oldu !!. bu nasıl oluyor?
jt3k

3

Bende de aynı sorun var. Bunu kullanarak düzelttim:

.element {
  display: table
}

2
deli ama işe yarıyor; Görünüşe göre Chrome yeni IE
Arthur

oooow lord! ir çalışıyor!
PX'teki

3

Benim çözümüm şuydu:

ekran: başlangıç;

Sonra gevrek keskindi


2

Yukarıdakilerin hiçbiri benim için işe yaramadı. Bu animasyonu pop-up'lar için yaptım:

@keyframes pulse {
  from {
    transform: scale3d(1, 1, 1);
  }
  50% {
    transform: scale3d(1.05, 1.05, 1.05);
  }
  to {
    transform: scale3d(1, 1, 1);
  }
}

Benim durumumda, bu kuralı uyguladıktan sonra bulanık efekt kayboldu: -webkit-perspective: 1000;Chrome denetçisinde kullanılmamış olarak işaretlenmiş olsa bile.


Benim için çalışıyor ve ayrıca kullanılmamış olarak işaretleniyor. Ayrıca will-change: transform;öğe sınırlarının bulanıklığını düzelten ekledim . Diğer cevaplar benim için işe yaramadı.
Jakub Zawiślak

1

Yukarıdakilerin hiçbiri benim için işe yaramadı.

Perspektif eklediğimde işe yaradı

Yani

transform : translate3d(-10px,-20px,0) scale3d(0.7,0.7, 1)

değiştim

transform : perspective(1px) translate3d(-10px,-20px,0) scale3d(0.7,0.7, 1)


Eklemek perspective(1px)beni gerçekten daha da kötüleştirdi :(
balu

1

Durumumu ekleyerek düzelttim:

transform: perspective(-1px)

Bu benim için scale()dönüşüm sonucunu kaldırdı
jpenna

1

KORME İÇİN:

Buradaki tüm önerileri denedim. Ama işe yaramaz. Üniversitem daha iyi çalışan harika bir çözüm buldu:

1.0'ı geçmemelisiniz

translateZ(0)Fareyle üzerine gelindiğinde ekleyin , ancak fareyle üzerine gelme / başlangıç ​​konumunda DEĞİL.

Misal:

a {
    transition: all 500ms cubic-bezier(0.165, 0.840, 0.440, 1.000);
    transform: scale(0.8, 0.8);
}

a:hover {
    transform: translateZ(0)scale(1.0, 1.0);
}

1

Tüm cevapların bir kombinasyonunu kullandım ve sonunda benim için işe yarayan şey buydu:

.modal .modal--transition {
  display: inline-table;
  transform: perspective(1px) scale(1) translateZ(0);
  backface-visibility: hidden;
  -webkit-font-smoothing: subpixel-antialiased;
}

1

Chrome'da bulanık metin sorunuyla karşı karşıyaydım, ancak kullandığımda Firefox'ta değil transform: translate(-50%,-50%).

Şey, gerçekten çok sayıda geçici çözümü denedim:

transform: perspective(1px);
filter: blur(0);
transform: translateZ(0);
backface-visibility: hidden;

Bunların hiçbiri benim için işe yaramadı.

Son olarak, elemanın yüksekliğini ve genişliğini eşitledim. Benim için sorunu çözdü !!!

Not: Kullanım durumundan kullanım durumuna bağlı olabilir. Ama kesinlikle denemeye değer!


1

Bu cevaplardan çok sayıda örnek denedim, maalesef Chrome için hiçbir şey yardımcı olmadı Version 81.0.4044.138 , bunun yerine dönüştürme öğesine ekledim

 transform-origin: 50% 50%;

Bu

 transform-origin: 51% 51%;

bana yardımcı oluyor


0

Benim için sorun, öğelerimin kullanıyor olmasıydı transformStyle: preserve-3d. Bunun uygulama için aslında gerekli olmadığını ve kaldırılmasının bulanıklığı düzelttiğini fark ettim.


0

Bunu kodumdan kaldırdım transform-style: preserve-3d; ve bunu ekledim - transform: perspective(1px) translateZ(0);

bulanıklık gitti!


0

5-25-19'dan itibaren geçerli olan Chrome 74.0.3729.169'da, dönüşümün neden olduğu belirli tarayıcı yakınlaştırma düzeylerinde oluşan bulanıklık için herhangi bir düzeltme yok gibi görünüyor. Basit bir şey bile TransformY(50px)öğeyi bulanıklaştırır. Bu, Firefox, Edge veya Safari'nin mevcut sürümlerinde görülmez ve tüm yakınlaştırma düzeylerinde görülmez.


Benim başıma gelen buydu. Bu bulanıklık etkisinden kurtulamıyorum. top: 0, bottom: 0, left: 0; right: 0; margin: autoİşe yarayan bir çözüm, bu özellikleri ayarlamaktır: ancak daha sonra konteyner, alabileceği tüm alanı kaplayacaktır (genişlik olmalıdır), bu nedenle içeriğin ne kadar büyük konteyner olacağına karar vermesi gerektiğinde bu işe yaramaz.
kwiat1990

0

Sadece css ile çözmek zor olacak.

Ben de jquery ile çözdüm.

Bu benim CSS'm.

.trY {
   top: 50%;
   transform: translateY(-50%);
}

.trX {
   left: 50%;
   transform: translateX(-50%);
}

.trXY {
   top: 50%;
   left: 50%;
   transform: translate(-50%, -50%);
}

ve bu benim jquery.

function tr_init() {
$(".trY, .trX, .trXY").each(function () {
    if ($(this).outerWidth() % 2 != 0) {
        var fixed_width = Math.ceil($(this).outerWidth() / 2) * 2;
        $(this).css("width", fixed_width);
    }
    if ($(this).outerHeight() % 2 != 0) {
        var fixed_height = Math.ceil($(this).outerHeight() / 2) * 2;
        $(this).css("height", fixed_height);
    }
})}

0

Sadece düzeltme çılgınlığına eklemek için, kötü görünen nesnenin etrafına {border: 1px solid # ???} koymak sorunu benim için düzeltir. Sabit bir arka plan renginiz varsa, bunu da düşünün. Bu o kadar aptalca ki kimse bahsetmeyi düşünmedi sanırım, eh eh.



-1

Yapmazsanız metin bulanık olmayacaktır transition.transform .

Sadece şunu yap:

&:hover {
    transform: scale(1.1);
}

Gibi geçiş olmadantransition: all .2s;

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.