Ligatury i przenoszenie wyrazów
Arkusze stylów i morze dostępnych w sieci czcionek stawiają dziś projektanta stron internetowych niemal w pozycji drukarza. Kontrola nad wyglądem dokumentu jest prawie całkowita. W związku z tym wiele subtelności typografii, wcześniej powszechnie ignorowanych w Internecie, wkracza również do HTML. Jedną z nich są ligatury, czyli graficzne ozdobne połączenia dwóch liter. Niestety z powodu błędów w przeglądarkach mogą nam też sprawić kłopoty.
Inną podobną nowością jest dzielenie wyrazów za pomocą łączników opcjonalnych, znanych szerzej jako „soft hyphens”. Są to niewidoczne znaki mówiące przeglądarce o tym, gdzie można przenieść wyraz. Dzielenie wyrazów nabrało szczególnego znaczenia po rozpowszechnieniu się smartfonów. Tekst w układzie pionowym na ekranie smartfona znacznie zyskuje na wyglądzie po podzieleniu wyrazów. Przykładowo ten blog jest zaprojektowany z myślą o czytaniu go również na smartfonach w układzie pionowym.
Niektóre przeglądarki potrafią automatycznie dzielić wyrazy zgodnie z regułami języka strony. To bardzo przydatna cecha, bo wstawienie łączników opcjonalnych „na twardo” w kod strony to dodatkowa czynność do zrobienia, poza tym może to utrudnić późniejszą edycję. Pech chce, że – jak to zazwyczaj bywa z nowymi przydatnymi udoskonaleniami przeglądarek – wciąż są to niektóre przeglądarki. Chrome, Android Browser, Opera, nie mają tej cechy, a tej trójki nie da się po prostu pominąć. Stąd między innymi ten tekst zawiera łączniki wstawione w kod strony.
Podobny bałagan panuje w temacie ligatur. Najczęściej chyba spotykaną ligaturą w językach europejskich jest „fi”. Jednak to, czy zobaczymy tu dwie oddzielne litery, czy ligaturę, zależy od wielu czynników...
- Przeglądarka. Firefox i Safari automatycznie wyszukują w tekście potencjalne wystąpienia ligatur i wstawiają je. Chrome tego nie robi. W związku z tym tutaj w Chrome ligatury nie będzie, a w Firefoksie i Safari będzie: fi. Można też jawnie wstawić ligaturę jako znak Unicode 64257 i tu także i Chrome ją pokaże: fi. Osobiście niespecjalnie mi się automatyzm Firefoksa podoba, w bloku tekstu ligatury nie są wymogiem i używa się ich raczej w tekście ozdobnym, np. w tytułach.
- Użyta czcionka. Czcionki bezszeryfowe (np. Arial czy Verdana) najczęściej nie mają ligatur. Szeryfowe zazwyczaj mają, ale nie każda musi. Dodatkowo w czcionkach True/OpenType ligatura często nie jest oddzielnym znakiem, ale jest odpowiednio składana z elementów. Na przykład ten blog używa czcionki Roboto Slab. W wykazie znaków czcionki, ligatury „fi” nie ma, co nie przeszkadza Safari i Firefoksowi jej radośnie wygenerować.
- Podzbiór znaków. Czcionki pobierane z sieci, na przykład z Google Fonts, zazwyczaj optymalizujemy, ograniczając zestaw znaków. I tu ciekawostka. Brak znaku ligatury nie przeszkadza w wygenerowaniu jej automatycznie, natomiast przeszkadza, jeżeli wstawimy ją jawnie – wtedy zostanie podstawiona przez przeglądarkę z innej czcionki...
Na szczęście niechcianej automatycznej ligatury można się pozbyć. Służy do tego specjalny znak Unicode, Zero Width Non-Joiner. Wstawienie go między znaki ligatury rozbija ją, przez co nawet Safari i Firefox pokażą ją jako dwa znaki: fi.
Teraz dochodzimy wreszcie do tego co mają ze sobą wspólnego ligatury i łączniki opcjonalne. Otóż w silniku WebKit był swego czasu błąd polegający na pojawianiu się „krzaków” w tekście, w którym jednocześnie użyto ligatur i miękkich przeniesień. Błąd został niby dawno temu poprawiony, ale Safari z iOS 9.2.3 oraz Safari 9.1 z OS X wciąż go mają. Oto tester:
finalnie czytamy masę krzaków tutaj
Problem można rozwiązać na trzy sposoby, w zależności od tego czy ostatecznie chcemy mieć tu ligatury czy nie. Po pierwsze można rozbić ligaturę wspomnianym wyżej znakiem ZWNJ:
finalnie czytamy masę krzaków tutaj
Po drugie można zabronić przeglądarce automatycznego wstawiania ligatur używając CSS: font-variant-ligatures: no-common-ligatures;
finalnie czytamy masę krzaków tutaj
Po trzecie wreszcie, jeżeli ligatura jest pożądana, wstawiamy ją jawnie jako jeden znak:
finalnie czytamy masę krzaków tutaj