Это небольшая заметка-памятка о том, как вводить нестандартные символы в HTML и CSS код.
Unicode и HTML
В HTML есть несколько способов включить символ в текст документа. Помимо непосредственного ввода символа можно использовать ссылки (character references). Ссылки могут быть десятичными, шестнадцатеричными или именованными.
Десятичные символьные ссылки
Возьмём произвольный символ Unicode, например, тильду (~). Её можно ввести с клавиатуры, но мы попробуем сделать это с помощью десятичной ссылки.
Код символа в таблице: U+007E.
Переводим в десятичный формат: 7E16 = 7*16 + 14 = 12610
Чтобы отобразить символ в HTML документе, нужно поместить его код между "&#" и ";".
<span>Это тильда: ~</span>
Шестнадцатеричные символьные ссылки
Аналогично десятичному представлению можно использовать шестнадцатеричное, добавим большую или малую латинскую "x" (икс) перед шестнадцатеричным кодом символа.
<span>Это тоже тильда: ~</span>
Через числовые ссылки можно сослаться на любой символ таблицы Unicode, за исключением символов с кодами U+0000 и U+000D, перманентно не определённых символов, суррогатов (U+D800–U+DFFF) и управляющих символов помимо пробельных.
Именованные символьные ссылки
В начале было слово.. (с)
А в нашем случае был метаязык SGML (Standard Generalized Markup Language), на котором определялись языки разметки документов. HTML до версии 4 включительно был приложением SGML, а XML является подмножеством SGML.
В частности, SGML помимо декларативной разметки и описания типов документов (document type definition, DTD), обладал механизмом строковой подстановки, когда некоторая последовательность символов заменяется при обработке некоторой другой последовательностью (для обеспечения переносимости нестандартных символов).
В SGML строки, для которых определены подстановки, назывались entities (иногда их переводят как "объекты", Википедия называет их "символ-мнемоника"). После того, как entities объявлен, на него можно ссылаться в любом месте документа, используя его имя, перед которым ставится символ "&", а после которого - точка с запятой. Точка с запятой может быть опущена, если за ссылкой на entities следует пробел или конец записи.
В HTML определено много entities для специальных символов, вроде валют и математических знаков, а также для отображения символов, имеющих специальное значение для HTML (например, < и >). Их описание можно найти на официальном сайте консорциума. Для HTML 4 пример описания дроби 3/4 (U+00BE) выглядит так:
<!ENTITY frac34 CDATA "¾" -- vulgar fraction three quarters
= fraction three quarters, U+00BE ISOnum -->
Затем символ можно использовать в документе:
<span>Платформа 9¾</span>
Такое описание выглядит нагляднее, но по факту просто заменяется на:
<span>Платформа 9¾</span>
Unicode и CSS
В CSS тоже можно обращаться к символам через их коды, но формат записи отличается от HTML. Код символа предваряется обратным слешем (\).
.test1:after {
content: "\7E";
}
<span class="test1">Это всё та же тильда:</span>
Подобным образом можно заэкранировать символ, имеющий специальное значение в CSS-разметке, например, кавычку:
.test2:after {
content: "\"Hello\"";
}
<span class="test2">Он сказал:</span>
Однако, если мы захотим написать "примерно 15км", то есть "~15км", такой код не сработает:
.test3:after {
content: "\7E15км";
}
<span class="test3">Расстояние:</span>
Поскольку символы, которые могут быть интерпретированы как шестнадцатеричные цифры (0-9, a-f, A-F), будут восприняты как часть кода символа. Есть два способа исправить ситуацию: поставить пробел после кода символа (этот первый пробел не будет отображён при выводе) или использовать 6-циферный код символа.
.test4:after {
content: "\7E 15км"; /* или "\00007E15км" */
}
Сводная табличка в качестве резюме:
Формат |
Описание |
HTML |
&#A9; |
Десятичная ссылка (decimal numeric character reference) |
© |
Шестнадцатеричная ссылка (hexadecimal numeric character reference) |
© |
Именованная ссылка (мнемоника, HTML entity, named character reference) |
CSS |
\A9 |
Если после идёт символ из диапазона 0-9, a-f, A-F, перед ними нужен пробел |
\0000A9 |
Код символа должен содержать ровно 6 символов, пробел после не нужен |
Ссылки
- Character entity references in HTML 4 (in HTML 5)
- Character references in HTML 4 (in HTML 5)
- Using character escapes in markup and CSS