Почему завершающий знак препинания отображается в начале с direction: rtl?

это скорее любопытство. Во время работы над многоязычным веб-приложением я заметил, что некоторые символы, такие как знаки препинания (!?.;,) в конце элемента блока отображаются, как если бы они были помещены в начале, а не когда направление письма справа налево (как это имеет место для некоторых азиатских языков, на которых я не говорю).

другими словами, строки

Hello, World!

отображается как

!Hello, World

при размещении в блоке div с direction: rtl

это становится еще более очевидным, если текст разделен на две части и заданы разные цвета: непрерывный кусок текста в конце отображается в двух отдельных областях:

http://jsfiddle.net/22Qk9/

в чем смысл такого поведения? Я думаю, это должно быть особенностью (всего?) языки справа налево, которые автоматически обрабатываются браузером, поэтому мне не нужно заботиться об этом, или я должен?

3 ответов


причина в том, что восклицательный знак "!"имеет класс BiDi на [других нейтральных], что означает, что он эффективно адаптируется к направленности окружающего текста. В этом примере он помещается слева от текста перед ним. Это вполне справедливо для языков, написанных справа налево: завершающий знак препинания появляется на конец, то есть слева.

обычно вы используете код CSS direction: rtl или, предпочтительно, атрибут HTML dir=rtl для текстов на языке, который пишется справа налево, и только для них. Для них такое поведение является решением, а не проблемой.

если вы используете direction: rtl или dir=rtl только для специальных эффектов, таких как создание столбцов таблицы, выложенных справа налево, тогда вам нужно рассмотреть последствия. Например, в случае таблицы вам нужно будет установить направление ltr для каждой ячейки таблицы (если вы не хотите, чтобы они отображались в основном справа налево текст.)

если у вас есть, скажем, английское предложение, цитируемое внутри блока арабского текста, то вам нужно установить направленность элемента, содержащего английский текст в ltr, например,

<blockquote dir=ltr>Hello, World!</blockquote>

аналогичный случай (только с арабским внутри английского текста) обсуждается как вариант использования 6 в документе W3C что вам нужно знать об алгоритме bidi и встроенной разметке (что имеет несколько странностей, хотя, как использование cite разметка для цитируемого текста, против рекомендаций W3C).


Если вы хотите исправить это поведение, добавьте символ LRM &lrm; в конце. Это не = печатный символ.

источник:http://dotancohen.com/howto/rtl_right_to_left.html

пример:http://jsfiddle.net/yobjj6ed/


Это просто предположение, почему это произошло.

Я предполагаю, что direction: rtl свойство добавляет явление "двунаправленности", где оно также влияет на пунктуацию. Это используется для арабского или иврита, где соответствующая пунктуация перемещается в начало строки.

источник:http://www.w3.org/TR/2013/WD-css-writing-modes-3-20131126/#text-direction

но почему слово на конец?

Я предполагаю, что этот Юникод не рассматривается как один из поддерживаемых языков, который влияет.

jsFiddle

как вы можете видеть, арабский текст вступает в силу


Так это потому, что он изначально предназначен для арабского, иврита или любого другого "смешанного языка", где он видел только последнюю пунктуацию как один из поддерживаемых УНИКОДОВ, где само слово не было одним поддерживаемого языка UNICODE.