Załóżmy, że na mojej stronie mam następującą regułę CSS:
body {
font-family: Calibri, Trebuchet MS, Helvetica, sans-serif;
}
Jak mogę sprawdzić, która ze zdefiniowanych czcionek została użyta w przeglądarce użytkownika?
Edytuj dla osób zastanawiających się, dlaczego chcę to zrobić: Czcionka, którą wykrywam, zawiera glify, które nie są dostępne w innych czcionkach, a gdy użytkownik nie ma czcionki Chcę wyświetlić łącze z prośbą o pobranie tej czcionki, aby mogę używać mojej aplikacji internetowej z odpowiednią czcionką.
Obecnie wyświetlam łącze pobierania czcionek dla wszystkich użytkowników, chcę to wyświetlać tylko dla osób, które nie mają zainstalowanej odpowiedniej czcionki.
javascript
html
css
fonts
Poklepać
źródło
źródło
Odpowiedzi:
Widziałem to zrobione w nieco niepewny, ale całkiem niezawodny sposób. Zasadniczo element jest ustawiony tak, aby używał określonej czcionki, a ciąg znaków jest ustawiony na ten element. Jeśli czcionka ustawiona dla elementu nie istnieje, przyjmuje czcionkę elementu nadrzędnego. Tak więc mierzą szerokość renderowanego ciągu. Jeśli pasuje do tego, czego oczekiwali dla żądanej czcionki, w przeciwieństwie do czcionki pochodnej, jest obecna. To nie zadziała w przypadku czcionek o stałej szerokości.
Oto skąd pochodzi: Wykrywacz czcionek JavaScript / CSS (ajaxian.com; 12 marca 2007)
źródło
measureText
from thecanvas
element: github.com/Wildhoney/DetectFontNapisałem proste narzędzie JavaScript, dzięki któremu możesz sprawdzić, czy czcionka jest zainstalowana, czy nie.
Wykorzystuje prostą technikę i przez większość czasu powinien być poprawny.
jFont Checker na github
źródło
@pat W rzeczywistości Safari nie podaje używanej czcionki, zamiast tego Safari zawsze zwraca pierwszą czcionkę w stosie, niezależnie od tego, czy jest zainstalowana, przynajmniej z mojego doświadczenia.
Zakładając, że Helvetica jest zainstalowana / używana, otrzymasz:
Podjąłem się tego problemu i stworzyłem Font Unstack , który testuje każdą czcionkę w stosie i zwraca tylko pierwszą zainstalowaną. Używa sztuczki, o której wspomina @MojoFilter, ale zwraca tylko pierwszą, jeśli zainstalowano wiele. Chociaż ma słabość, o której wspomina @tlrobinson (Windows po cichu zastąpi Arial zamiast Helvetica i zgłosi, że Helvetica jest zainstalowana), poza tym działa dobrze.
źródło
Technika, która działa, polega na spojrzeniu na obliczony styl elementu. Jest to obsługiwane w przeglądarce Opera i Firefox (i sprawdzam w safari, ale nie testowałem). IE (przynajmniej 7) zapewnia metodę uzyskiwania stylu, ale wydaje się, że jest to coś, co było w arkuszu stylów, a nie styl obliczony. Więcej informacji na temat trybu dziwacznego: Pobierz style
Oto prosta funkcja do pobierania czcionki używanej w elemencie:
Jeśli reguła CSS to:
Następnie powinien zwrócić helvetica, jeśli jest zainstalowana, a jeśli nie, to arial, i na koniec nazwę domyślnej czcionki bezszeryfowej systemu. Zwróć uwagę, że kolejność czcionek w deklaracji CSS jest znacząca.
Ciekawym hackem, którego możesz również spróbować, jest utworzenie wielu ukrytych elementów z wieloma różnymi czcionkami, aby spróbować wykryć, które czcionki są zainstalowane na komputerze. Jestem pewien, że za pomocą tej techniki ktoś mógłby stworzyć fajną stronę do zbierania statystyk czcionek.
źródło
Uproszczona forma to:
Jeśli potrzebujesz czegoś bardziej kompletnego, sprawdź to .
źródło
Jest proste rozwiązanie - wystarczy użyć
element.style.font
:Ta funkcja zrobi dokładnie to, co chcesz. Podczas wykonywania Zwróci typ czcionki użytkownika / przeglądarki. Mam nadzieję, że to pomoże.
źródło
Innym rozwiązaniem byłoby automatyczne zainstalowanie czcionki,
@font-face
co mogłoby wyeliminować potrzebę wykrywania.Oczywiście nie rozwiązałoby to żadnych problemów związanych z prawami autorskimi, jednak zawsze możesz użyć darmowej czcionki, a nawet stworzyć własną czcionkę. Trzeba będzie zarówno
.eot
&.ttf
pliki do pracy najlepiej.źródło
Calibri to czcionka będąca własnością firmy Microsoft i nie powinna być rozpowszechniana za darmo. Ponadto wymaganie od użytkownika pobrania określonej czcionki nie jest zbyt przyjazne dla użytkownika.
Sugerowałbym zakup licencji na czcionkę i osadzenie jej w swojej aplikacji.
źródło
Używam Fount. Wystarczy przeciągnąć przycisk Fount na pasek zakładek, kliknąć go, a następnie kliknąć określony tekst na stronie internetowej. Następnie pokaże czcionkę tego tekstu.
https://fount.artequalswork.com/
źródło
Możesz korzystać z tej strony:
http://website-font-analyzer.com/
Robi dokładnie to, czego chcesz ...
źródło
Możesz umieścić Adobe Blank w rodzinie czcionek po czcionce, którą chcesz zobaczyć, a wtedy wszelkie glify nie zawarte w tej czcionce nie zostaną renderowane.
na przykład:
O ile mi wiadomo, nie ma metody JS, która wskazywałaby, które glify w elemencie są renderowane przez którą czcionkę w stosie czcionek dla tego elementu.
Jest to skomplikowane przez fakt, że przeglądarki mają ustawienia użytkownika dla czcionek szeryfowych / bezszeryfowych / o stałej szerokości, a także mają własne zakodowane na stałe czcionki rezerwowe, których będą używać, jeśli glif nie zostanie znaleziony w żadnej z czcionek w stos czcionek. Dlatego przeglądarka może renderować niektóre glify w czcionce, której nie ma w stosie czcionek ani w ustawieniach czcionki przeglądarki użytkownika. Chrome Dev Tools pokaże każdą renderowaną czcionkę dla glifów w wybranym elemencie . Tak więc na komputerze możesz zobaczyć, co robi, ale nie ma sposobu, aby stwierdzić, co się dzieje na komputerze użytkownika.
Możliwe jest również, że system użytkownika może odegrać w tym rolę, ponieważ np. Window wykonuje podstawianie czcionek na poziomie glifów.
więc...
W przypadku glifów, które Cię interesują, nie możesz wiedzieć, czy zostaną wyrenderowane przez przeglądarkę / system awaryjny użytkownika, nawet jeśli nie mają określonej czcionki.
Jeśli chcesz przetestować to w JS, możesz wyrenderować poszczególne glify za pomocą rodziny czcionek, w tym Adobe Blank i zmierzyć ich szerokość, aby sprawdzić, czy wynosi zero, ALE musiałbyś dokładnie powtórzyć każdy glif i każdą czcionkę, którą chciałeś przetestować , ale chociaż możesz poznać czcionki w stosie czcionek elementów, nie ma sposobu, aby dowiedzieć się, jakich czcionek ma używać przeglądarka użytkownika, więc przynajmniej dla niektórych użytkowników lista czcionek, przez które iterujesz, będzie niekompletna. (Nie jest również przyszłościowe, jeśli pojawią się nowe czcionki i zaczną się używać).
źródło