Тег bdo в HTML: что это и как изменить направление текста

Тег bdo (от английского bidirectional override, «переопределение направления») принудительно задаёт направление письма для своего текста. Атрибутом dir вы сами говорите браузеру: выводи буквы слева направо или справа налево, независимо от языка. Тег парный, закрывающий обязателен.

Разворот у bdo жёсткий: он действует на буквы, а не на язык, поэтому обычная русская фраза внутри тега с dir="rtl" читается задом наперёд. Применять его приходится редко, гораздо чаще нужна мягкая изоляция без принудительного разворота, о ней написано на странице про bdi. Чем bdo отличается от CSS и от символов Unicode, показано ниже.

HTML
<p><bdo dir="rtl">Hello</bdo></p>

Тег bdo в HTML: что это и для чего нужен

Спецификация описывает bdo как явное управление направлением текста для его содержимого: автор обходит алгоритм двунаправленного текста и сам указывает порядок. Внутри допустим строчный контент. Главное слово здесь «override»: тег не подсказывает браузеру направление, а задаёт его.

В Chrome bdo - строчный элемент (display: inline) со свойством unicode-bidi: isolate-override: содержимое изолировано от окружения и направлено принудительно. По данным справки MDN, тег доступен во всех современных браузерах с 2015 года.

Разница с bdi такая: bdi выбирает направление по содержимому и буквы не переворачивает, а bdo по вашей команде переворачивает всё, что внутри.

Атрибут dir у тега bdo: ltr, rtl и что будет без него

Спецификация требует указать dir у bdo и допускает два значения: ltr (слева направо) и rtl (справа налево). Значение auto, привычное для bdi, здесь не допускается.

Что делает браузер, если правило нарушено, показывает замер. Без dir Chrome применяет направление ltr с принудительным порядком (isolate-override), автоопределения нет. Значение auto Chrome принимает и определяет направление по содержимому: для иврита получается rtl, для латиницы ltr. Но спецификация auto не допускает, поэтому результат зависит от браузера и от текста.

HTML
<bdo dir="ltr">שלום</bdo>
<bdo dir="rtl">Hello</bdo>

Атрибут dir у обычного span действует иначе: он задаёт только базовое направление и буквы не разворачивает. В замере <span dir="rtl">Kate 5</span> вывел «Kate 5» без изменений. Проверьте значения в кадре.

Пример: значения dir у bdo

Результат

Выберите текст и значение dir. Кадр показывает вычисленное направление и порядок букв на экране.

Что разворачивает тег bdo: буквы, слова, числа и знаки

Тег bdo с dir=rtl выводит всё содержимое справа налево: буквы, порядок слов, цифры и знаки препинания. Фраза «привет мир 123» превращается в «321 рим тевирп», а «a, b! c?» - в «?c !b ,a». Вложенные теги разворачиваются вместе с текстом: в замере ab<em>cd</em>ef вывелось как «fedcba».

Обратная сторона: dir=ltr показывает буквы слева направо и там, где язык пишет их справа налево. Ивритская фраза «שלום עולם» с dir=ltr выводится буквами в порядке ввода, слева направо.

Введите свою фразу в кадре и сравните четыре записи: обычный текст, span с dir=rtl, bdo с rtl и bdo с ltr.

Пример: что разворачивает bdo

Результат

Введите фразу или выберите готовую. Кадр показывает порядок символов на экране для четырёх записей.

Тег bdo, CSS и символы Unicode: как получить тот же результат

Тот же разворот даёт CSS: свойство unicode-bidi: bidi-override вместе с direction: rtl у обычного span. В замере «Kate» вывелось как «etaK», как и у bdo. Разница в смысле: тег говорит, что здесь принудительное направление, а CSS описывает только вид.

CSS
.rev {
  unicode-bidi: bidi-override;
  direction: rtl;
}

Третий способ - управляющий символ Unicode U+202E (переопределение справа налево). Он тоже разворачивает текст, но остаётся в строке невидимым знаком: такой знак попадает в копию, в поиск и в сравнение строк. Поэтому лучше тег или CSS.

Во всех трёх случаях меняется только показ: текст в разметке остаётся прежним, и в копию попадает он, а не то, что видно на экране. Так иногда прячут адрес от простых роботов: в разметке записывают «moc.elpmaxe@ecno», а на экране получается «once@example.com». Но читатель, скопировавший такой адрес, получит перевёрнутую строку. Проверьте в кадре.

Пример: разворот адреса тремя способами

Результат

Выберите способ. Кадр показывает, что видно на экране и что попадёт в копию.

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

Ошибки с этим тегом связаны с атрибутом dir и с тем, что разворот принимают за изоляцию.

ОшибкаЧто происходитКак исправить
Запись без dir: <bdo>Hello</bdo>Спецификация требует dir, Chrome применяет ltr, и разворота нетУказать dir="rtl" или dir="ltr"
dir="auto" у bdoСпецификация значение не допускает, а Chrome определяет направление по тексту: результат зависит от содержимогоДля автоопределения использовать bdi
bdo для имён пользователейИмена на латинице разворачиваются: «Kate» становится «etaK»Использовать bdi
dir="rtl" у span ради разворотаАтрибут задаёт только базовое направление, буквы не разворачиваютсяДля разворота взять bdo или CSS bidi-override
Перевёрнутый адрес в разметкеНа экране верный адрес, а в копию попадает перевёрнутая строкаЗаписать адрес как есть
Символ U+202E в тексте вместо тегаНевидимый знак попадает в копию и в поискИспользовать тег bdo или CSS
Категория
Поделиться в социальных сетях

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

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

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

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

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