Czy CSS może wybrać inną domyślną czcionkę i rozmiar w zależności od języka

Mam następujący fragment CSS:

INPUT{ font-family: Raavi; font-size: 14px;}

Który działa dobrze, gdy textbox zawiera jakiś skrypt jak ten: ਪੰਜਾਬੀ

Ale użytkownik może zamiast tego wpisać angielski, a ja wolałbym użyć czcionki Verdana o innym rozmiarze, ponieważ angielskie litery w czcionce Raavi są naprawdę funky i rozmiar jest zły.

Więc moje pytanie może być sformułowane jako:

  • czy istnieje jakiś rodzaj warunkowej rodziny czcionek i wyboru rozmiaru w CSS na podstawie input
  • czy CSS powinien wiedzieć o języku wejściowym?

Więc mogę utworzyć następujący PSEUDO_CSS:

INPUT{ EN-font-family: Verdana; EN-font-size: 12px; PA-font-family; Raavi; EN-font-size: 14px;}

Lub

INPUT.EN{ font-family: Verdana; font-size: 12px;}
INPUT.PA{ font-family: Raavi; font-size: 14px;}
 22
Author: Noah, 2009-02-11

7 answers

Jest to adresowane w CSS3, a to nie pomoże w kompatybilności ze starymi przeglądarkami, ale działa mi przy mieszaniu greckiego i łacińskiego tekstu z różnymi czcionkami dla każdego. Oto przykład zaczerpnięty z roboczego szkicu modułu czcionek CSS:

@font-face {
    font-family: BBCBengali;
    src: url(fonts/BBCBengali.ttf) format("opentype");
    unicode-range: U+00-FF, U+980-9FF;
}

Bit unicode-range jest magicznym kluczem, który mówi przeglądarce, aby używała tej instrukcji font-face tylko dla tego konkretnego bloku znaków Unicode. Jeśli przeglądarka znajdzie znaki z tego zakresu, używa tej czcionki; dla znaków spoza ten zakres, to spada z powrotem do następnego najbardziej konkretne instrukcje CSS zgodnie ze standardowym wzorcem defaulting.

 28
Author: Jaegra Oriades,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-26 22:20:15
input { font-family: Verdana, Raavi, sans-serif; font-size: 14px;}

To powinno działać dla Twoich celów:

  • Jeśli tekst jest w języku angielskim, obie czcionki powinny zawierać glify, A Preferowana będzie Verdana
  • Jeśli tekst jest w języku pendżabskim, Verdana nie powinna zawierać glifów, więc przeglądarka powinna wrócić do Raavi

Nie jestem pewien, czy wszystkie przeglądarki będą zachowywać się poprawnie, ale to właśnie powinny zrobić zgodnie ze specyfikacją CSS.

 12
Author: Miles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-11 06:33:01

Czyste rozwiązanie CSS może być tak proste jak:

input[lang=en] {
  font-family:Verdana;
  font-size:12px;
}

input[lang=pa] {
  font-family:Raavi;
  font-size:14px;
}

Ale to nadal do ciebie należy ustawienie atrybutu lang elementu wejściowego.

Niestety, jak w przypadku większości fancy Funkcje CSS, selektory atrybutów nie działają w 100% w całej tablicy przeglądarek. Moim zdaniem najlepszym rozwiązaniem jest użycie klasy dla każdego języka i przypisanie jej do elementu wejściowego.

Aktualizacja:

Na Twoją prośbę, oto przykład naiwnego sposobu na zrobienie tego z wanilią JavaScript. Z pewnością należy wprowadzić ulepszenia, ale to "działa".

<style type="text/css">
  .lang-en {
    font-family:Verdana;
    font-size:12px;
  }

  .lang-pa {
    font-family:Raavi;
    font-size:14px;
  }
</style>

<form>
  <input type="text" onkeyup="assignLanguage(this);" />
</form>

<script type="text/javascript">
  function assignLanguage(inputElement) {
    var firstGlyph = inputElement.value.charCodeAt(0);

    if((firstGlyph >= 65 && firstGlyph <= 90) || (firstGlyph >= 97 && firstGlyph <= 122)) {
      inputElement.setAttribute('lang', 'en');
      inputElement.setAttribute('xml:lang', 'en');
      inputElement.setAttribute('class', 'lang-en');
    } else {
      inputElement.setAttribute('lang', 'pa');
      inputElement.setAttribute('xml:lang', 'pa');
      inputElement.setAttribute('class', 'lang-pa');
    }
  }
</script>

Ten przykład zostanie wywołany po wpisaniu znaku. Następnie sprawdza, czy mieści się między zakresem uważanym za "Angielski" i odpowiednio przypisuje atrybuty. Ustawia lang, xml:lang, i class atrybuty.

 8
Author: Zack The Human,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-11 17:45:16

Powszechną praktyką podczas utrzymywania wielojęzycznych stron internetowych jest używanie oddzielnych plików CSS dla każdego języka. Jest to pożądane, ponieważ będziesz musiał dostosować więcej niż czcionkę. Często trzeba będzie dostosować odstępy, aby dopasować długość ciągów w języku. Ponadto, może być konieczne dostosowanie niektórych podstawowych formatowania strony, aby uczynić ją bardziej naturalną dla użytkowników języka.

Solidną odpowiedzią jest umiędzynarodowienie, a nie tylko zadowolić się inną czcionką ponieważ w końcu okaże się, że wybór czcionki będzie niewystarczający.

 3
Author: Elijah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-11 09:36:19

W znaczniku html masz tę właściwość lang.(po prostu lang= ' en ' lub lang= 'en-EN')

Możemy użyć tego w CSS.

Jeśli chcemy podać konkretny CSS dla znacznika p dla innego języka,

p:lang(en-EN){
}

Odpowiedni styl musimy dodać.

W ten sposób możemy nadać poszczególnym css dla różnych języków.

Przykład

html{font-family: Raavi; font-size: 14px;}
html:lang(en-EN){font-family: Verdana; font-size: 12px;}
 2
Author: Rajalakshmi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-25 09:39:09

Skąd CSS mógł wiedzieć o języku wejściowym?

Obawiam się, że jedynym rozwiązaniem jest znalezienie czcionki unicode, która wygląda ładnie dla obu zestawów znaków. Co jest dalekie od ideału, jeśli twój zdalny czytnik go nie zainstalował. Może Arial Unicode MS.

 0
Author: mouviciel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-11 06:26:05

Jedynym na razie niezawodnym rozwiązaniem jest Lista czcionek w żądanej kolejności, zgodnie z wskazaniami Mil.

Miejmy nadzieję, że (poprawne) rozwiązanie wskazane przez Zacka będzie poprawnie obsługiwane przez więcej przeglądarek.

Ale nawet wtedy twoim obowiązkiem będzie oznaczyć różne sekcje odpowiednim atrybutem lang.

Nic nie jest w stanie niezawodnie wykryć języka dowolnego tekstu.

 0
Author: Mihai Nita,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-11 09:02:02