Тег ruby в HTML: что это и как добавить аннотацию над текстом

Тег ruby добавляет мелкую аннотацию над словом или знаком: чаще всего это чтение иероглифа. Название взято из типографики, где «рубином» называли самый мелкий шрифт. Внутри тега записывают основу, а сразу за ней - аннотацию в теге rt. Необязательный тег rp хранит запасной вариант в скобках. Браузер выводит аннотацию над основой мелким шрифтом.

Чаще всего ruby встречается в японских текстах, но привязан он не к языку, а к задаче: над словом можно добавить чтение, произношение или короткое пояснение, в том числе для русского слова. Есть и неожиданная сторона: аннотация попадает в копию вместе с основой, поэтому о ней стоит знать заранее. Вместе с ruby работают теги rt и rp .

HTML
<p><ruby>猫<rt>ねこ</rt></ruby> спит на диване.</p>

Тег ruby в HTML: что это и как записать аннотацию

Спецификация HTML описывает ruby как основной текст вместе с соответствием его частей аннотациям. Справка MDN добавляет, что аннотация может стоять над основой, под ней или сбоку, а сам тег нужен прежде всего для чтения знаков восточных языков.

Запись всегда идёт в одном порядке: основа, затем аннотация в rt. Каждый rt относится к основе, которая записана перед ним. По умолчанию Chrome выводит ruby как особый вид элемента (display: ruby), а rt - как display: ruby-text размером вдвое меньше основы: 8 px при основе 16 px.

Тег rp скрыт (display: none). Он нужен на случай, если браузер не знает тег ruby: тогда аннотация окажется в скобках рядом с основой. По данным MDN, тег поддерживают все современные браузеры с 2015 года, но запись со скобками остаётся безопасной.

HTML
<ruby>
  猫<rp>(</rp><rt>ねこ</rt><rp>)</rp>
</ruby>

Тег ruby для группы знаков и для каждого знака отдельно

Слово из нескольких знаков подписывают двумя способами. Группой: одна аннотация на всю основу. По знакам: своя аннотация над каждым знаком.

HTML
<ruby>東京<rt>とうきょう</rt></ruby>

<ruby>東<rt>とう</rt>京<rt>きょう</rt></ruby>

По знакам точнее: читатель видит, какая часть чтения относится к какому знаку. Группой записывают слово, чтение которого не делится по знакам. У слова 今日 («сегодня») чтение «きょう» относится ко всему слову, и разбить его на части нельзя.

Проверьте оба способа в кадре. Кадр разбирает разметку и для каждого rt указывает основу, к которой он относится.

Пример: аннотация для группы знаков и для каждого знака

Результат

Выберите слово и способ записи. Кадр показывает вид, разметку и разбор: какая аннотация к какой основе относится.

Тег ruby для кириллицы и латиницы: когда он нужен, а когда лучше abbr

Тег ruby не привязан к иероглифам: аннотацию можно записать над латиницей или кириллицей. Так подписывают транскрипцию, например пиньинь над китайскими знаками, или пояснение к слову в учебном тексте.

HTML
<p><ruby>你好<rt>nǐ hǎo</rt></ruby> и
  <ruby>HTML<rt>язык разметки</rt></ruby></p>

У этого способа есть цена: аннотация видна всегда, растягивает слово и делает строку выше. Когда нужна короткая расшифровка сокращения, которую читатель посмотрит по желанию, лучше подходит abbr с атрибутом title: он не меняет ни ширину слова, ни высоту строки.

СпособКогда виден читателюЧто меняется в строке
rubyСразу, над словомСлово шире, строка выше
abbr с titleПо наведениюРазмеры не меняются, добавляется пунктир
Пояснение в скобкахСразу, в строкеСтрока становится длиннее

Выбор простой: ruby подходит, когда аннотацию нужно видеть сразу, например произношение или транскрипцию. Для расшифровки сокращения достаточно abbr.

Оформление тега ruby: позиция аннотации, межстрочный интервал и ширина слова

По умолчанию аннотация выводится над основой. Положением управляет свойство ruby-position: значение under выводит аннотацию под основой. В вертикальном тексте (writing-mode: vertical-rl) аннотация оказывается справа от основы. Значения alternate и inter-character Chrome не принял, это проверено измерением.

CSS
ruby {
  ruby-position: under;
}

Пример: положение аннотации и направление письма

Результат

Переключайте положение и направление. Кадр измеряет, где на самом деле оказалась аннотация относительно основы.

Аннотация занимает место. Если она шире основы, слово растягивается по ширине. Если межстрочный интервал мал, вырастает высота строки: чем интервал больше, тем меньше разница, а при достаточном запасе строка с аннотацией не выше обычной. Поэтому в абзацах с ruby интервал задают с запасом.

CSS
p {
  line-height: 2;
}

Ширину определяет более широкий из двух: если аннотация длиннее основы, соседний текст отодвигается. Размер самой аннотации меняют свойством font-size у rt, об этом подробно написано на странице про rt.

Пример: межстрочный интервал и ширина слова

Результат

Двигайте ползунок и выбирайте длину аннотации. Кадр сравнивает строку без аннотации со строкой с аннотацией и меряет ширину знака.

Копирование и поиск текста с тегом ruby: что попадёт в выделение

При копировании основа и аннотации идут подряд, без пробелов и пометок: запись 図<rt>と</rt>書<rt>しょ</rt>館<rt>かん</rt> даёт текст «図と書しょ館かん». Слово «図書館» в таком тексте уже не найти: между знаками стоят аннотации. Это важно для скриптов, которые ищут слово в тексте страницы, и для читателя, который записывает копию в другое место.

Текст тега rp в выделение не попадает, хотя в свойстве textContent он есть: у записи со скобками textContent вернёт «図(と)書(しょ)館(かん)», а выделение - «図と書しょ館かん». Кадр ниже показывает оба значения.

Убрать аннотации из копии через CSS ненадёжно: в Chrome свойство user-select: none у rt дало неполный результат, часть аннотаций осталась в выделении. Поэтому не рассчитывайте на него и проверяйте копию.

Пример: что попадёт в копию

Результат

Переключайте запись. Кадр выделяет слово так же, как при копировании, и сравнивает выделение с textContent.

Частые ошибки с тегом ruby

Ошибки с этим тегом связаны с порядком записи, скобками и местом, которое занимает аннотация.

ОшибкаЧто происходитКак исправить
Аннотация вне ruby: 猫<rt>ねこ</rt>Тег rt без ruby работает как обычный строчный текст: «ねこ» выводится в строку, а не над основойОбернуть основу и аннотацию в ruby
Аннотация раньше основы: <ruby><rt>ねこ</rt>猫</ruby>Аннотация относится к основе перед ней, а здесь её нет; при копировании аннотация оказывается раньше основыСначала основа, потом rt
Скобки обычным текстом: <ruby>猫(ねこ)</ruby>Скобки видны всегда, а аннотации над основой нетЗаписать rt и, если нужно, rp со скобками
Длинное пояснение: <rt>язык гипертекстовой разметки</rt>Аннотация растягивает слово, соседний текст отодвигаетсяКороткая аннотация или abbr с title
ruby ради вида: <ruby>Новинка<rt>NEW</rt></ruby>Тег сообщает, что это чтение или пояснение к основе, а не меткаspan с классом и стилями
Тесный line-height в абзаце с аннотациямиСтрока с аннотацией выше остальных, и интервалы в абзаце получаются неровнымиУвеличить интервал, например line-height: 2 и больше
Расчёт на чистую копию текстаВ копию попадает «図と書しょ館かん», и слово 図書館 в ней не находитсяПроверить копию и учитывать аннотации при поиске
Категория
Поделиться в социальных сетях

Отправить комментарий

0 Комментарии

Отправить комментарий (0)

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×