AKTUALIZACJA Sierpień 2020
Nie musisz już kierować na Safari zapytania o media, aby włączyć wygładzanie czcionek subpikselowych. Domyślnie jest w porządku.
Jednak chociaż domyślnie używa wygładzania czcionek subpikselowych, maść w wygładzaniu czcionek Chrome jest znacząca , dla każdego, kto szuka spójnego renderowania tekstu .
- To jest renderowanie jasnego tekstu przez Chrome na ciemnym tle
- To jest renderowanie ciemnego tekstu przez Chrome na jasnym tle
Spójrz na rozmiar całości w literze e powyżej. Jasny tekst na ciemnym tle jest renderowany z zauważalnie większą wagą niż ciemny tekst na jasnym tle (z identycznym stylem czcionki CSS).
Jednym z rozwiązań dla witryn, które szanują ustawienia ciemnego / jasnego motywu użytkownika, jest kierowanie na Chrome zapytania o media, które jest ograniczone do trybu ciemnego i przełączenie go na wygładzanie bez subpikseli, jak na przykład:
@media screen
and (-webkit-min-device-pixel-ratio: 0)
and (min-resolution: 0.001dpcm)
and (prefers-color-scheme: dark) {
body {
-webkit-font-smoothing: antialiased;
}
}
Wynik :
O wiele bardziej spójna waga tekstu, niezależnie od tego, czy renderuje się jasno w ciemności, czy ciemno w świetle.
Zobacz porównanie przed i po:
-
AKTUALIZACJA Maj 2018
-webkit-font-smoothing: subpixel-antialiased
teraz nie działa w Chrome, ale w Safari nadal znacznie poprawia rzeczy, ALE TYLKO W RETINIE. Bez tego w Safari na ekranach siatkówki tekst jest cienki i mdły, podczas gdy z nim tekst ma odpowiednią wagę. Ale jeśli użyjesz tego na wyświetlaczach innych niż Retina w Safari (szczególnie przy niewielkich wartościach wagi) tekst to katastrofa. Zdecydowanie zalecamy użycie zapytania o media:
@media screen and (-webkit-min-device-pixel-ratio: 2) {
body {
-webkit-font-smoothing: subpixel-antialiased;
}
}
Jawne ustawienie -webkit-font-smoothing: subpixel-antialiased
jest najlepszym obecnie rozwiązaniem, jeśli chcesz przynajmniej częściowo uniknąć cieńszego, antyaliasowanego tekstu.
--tl; dr--
Zarówno w przeglądarce Safari, jak i Chrome, w których domyślne renderowanie czcionek wykorzystuje antyaliasing subpikselowy, każdy kod CSS, który wymusza renderowanie oparte na GPU, jak powyższe sugestie dotyczące użycia transformacji przy użyciu translateZ lub nawet tylko przejścia skali, spowoduje, że Safari i Chrome automatycznie „poddadzą się ”na wygładzaniu czcionek z antyaliasem subpikselowym i zamiast tego przełącz się na zwykły antyaliasowany tekst, który wygląda dużo jaśniej i cieńszy, szczególnie w przeglądarce Safari.
Inne reakcje skupiały się na utrzymaniu stałego renderowania, po prostu ustawiając lub wymuszając wygładzanie czcionek w przypadku cieńszego, antyliofilizowanego tekstu. Moim zdaniem użycie translateZ lub backface hidden znacznie obniża jakość renderowania tekstu i jest najlepszym rozwiązaniem, jeśli chcesz, aby tekst pozostał spójny, a cieńszy tekst jest w porządku -webkit-font-smoothing: antialiased
. Jednak jawne ustawienie -webkit-font-smoothing: subpixel-antialiased
faktycznie ma pewien wpływ - tekst nadal nieznacznie się zmienia i jest prawie wyraźnie cieńszy podczas przejść renderowanych na GPU, ale nie tak cienki, jak bez tego ustawienia. Wygląda więc na to, że przynajmniej częściowo zapobiega przełączaniu się na prosty tekst antyliściowy.