Клавиша / esc

ruby-merge

Управляем объединением руби-аннотаций: когда их много, а места мало.

Время чтения: меньше 5 мин

Кратко

Скопировано

Свойство ruby-merge контролирует, как несколько аннотаций (<rt>) внутри одного элемента <ruby> будут отображаться, когда их несколько. Оно решает, будут ли они «отдельными» (каждый над своей буквой) или объединятся в одну общую подпись, если это удобнее.

Это свойство особенно полезно для отображения групповых руби (Jukugo-ruby), когда одно слово произносится слитно, а не по отдельным иероглифам.

Пример

Скопировано

У нас есть два иероглифа, для каждого своя аннотация:

        
          
          <ruby>  無常  <rt>む</rt>  <rt>じょう</rt></ruby>
          <ruby>
  無常
  <rt></rt>
  <rt>じょう</rt>
</ruby>

        
        
          
        
      
        
          
          ruby {  ruby-merge: merge;}
          ruby {
  ruby-merge: merge;
}

        
        
          
        
      
Открыть демо в новой вкладке

Браузер объединит и じょう в одну общую аннотацию むじょう и разместит её над обоими иероглифами.

Как пишется

Скопировано
        
          
          .element {  ruby-merge: separate;}
          .element {
  ruby-merge: separate;
}

        
        
          
        
      
  • separateЗначение по умолчанию. Каждая аннотация отображается строго над своим базовым символом (или группой символов). Если аннотация длиннее базы, к базе добавляется пространство, чтобы они не накладывались.
  • merge — Все аннотации внутри одного элемента <ruby> объединяются в одну общую аннотацию и центрируются над всей группой базовых символов. Это похоже на то, как если бы вы написали <ruby>無常<rt>むじょう</ruby>.
  • auto — Браузер сам решает, как лучше отобразить аннотации. Обычно он пытается вести себя как separate, но если аннотации слишком широкие, он может автоматически применить логику merge, чтобы избежать лишних пробелов между символами.

Как понять

Скопировано

Представьте, что вы учите японский и видите слово 上手. Оно состоит из двух иероглифов: и , но читается как 「じょうず」 (Дзё:дзу) — одним словом.

Если мы попытаемся написать это с помощью <ruby> в лоб, то получится:

        
          
          <ruby>  上<rt>じょう</rt>  手<rt>ず</rt></ruby>
          <ruby><rt>じょう</rt><rt></rt>
</ruby>

        
        
          
        
      

В этом случае, если мы используем ruby-merge: separate, аннотации будут стоять над своими символами. Это выглядит неправильно, потому что чтение разбито по слогам.

Наглядная разница

Скопировано

Вот как выглядят три значения на примере слова 上手 (ё:дзу):

  1. separate (по умолчанию):
    Аннотации отдельно. Над じょう, над . Чтобы поместить длинную じょう над узким , браузер добавит пробел вокруг иероглифа .

  2. merge:
    Аннотации объединяются. Мы видим одну общую надпись じょうず над обоими иероглифами.

  3. auto:
    Браузер оценивает ситуацию. Если есть место и аннотации не длинные, он может оставить их раздельными. Но если, как в примере, じょう очень длинная, он их объединит, чтобы избежать «рваной» верстки.

Открыть демо в новой вкладке

Подсказки

Скопировано

💡 Подробнее о всех свойствах руби-аннотаций можно прочитать в официальной спецификации CSS Ruby Layout Module Level 1.
💡 Чаще всего ruby-merge используют со значением merge или auto. separate используется по умолчанию для простых случаев, когда чтение совпадает с написанием.
💡 Значение auto — хороший выбор для «безопасной» типографики. Если аннотации короткие, они будут выглядеть как отдельные. Если длинные — объединятся, не сломав макет.
💡 Помните, что при merge аннотации, визуально объединяясь, теряют привязку к конкретному символу. Это нормально для сложных слов, но не подходит для пометки каждого иероглифа по отдельности.
💡 Свойство отлично комбинируется с ruby-align, чтобы задать точное выравнивание получившейся общей надписи.

        
          
          .kanji-word {  ruby-merge: merge;  ruby-align: center;  /* Или space-between, если нужно */}
          .kanji-word {
  ruby-merge: merge;
  ruby-align: center;  /* Или space-between, если нужно */
}