|
| 1 | +--- |
| 2 | +title: "Атрибут `dir`" |
| 3 | +description: "Указываем направление текста внутри всего документа или отдельного элемента." |
| 4 | +authors: |
| 5 | + - s-dudko |
| 6 | +contributors: |
| 7 | + - skorobaeus |
| 8 | +related: |
| 9 | + - html/global-attrs |
| 10 | + - html/bdi |
| 11 | + - html/bdo |
| 12 | +tags: |
| 13 | + - doka |
| 14 | +--- |
| 15 | + |
| 16 | +## Кратко |
| 17 | + |
| 18 | +[Глобальный атрибут](/html/global-attrs/) `dir` устанавливает направление вывода текста внутри элемента. Действие атрибута наследуется от родительского элемента, но может быть переопределено. Может быть применён к любому HTML-элементу, но не для всех элементов имеет смысл. |
| 19 | + |
| 20 | +## Пример |
| 21 | + |
| 22 | +```html |
| 23 | +... |
| 24 | + <p dir="ltr">Пример русского текста с верно установленным направлением.</p> |
| 25 | + <p dir="rtl">Пример русского текста с неверно установленным направлением.</p> |
| 26 | + |
| 27 | + <hr /> |
| 28 | + |
| 29 | + <p>هذه الفقرة باللغة العربية ولكن بشكل خاطئ من اليسار إلى اليمين.</p> |
| 30 | + <p dir="auto">هذه الفقرة باللغة العربية ، لذا يجب الانتقال من اليمين إلى اليسار.</p> |
| 31 | +... |
| 32 | +``` |
| 33 | + |
| 34 | +<iframe title="Примеры использования" src="demos/dir-example/" height="400"></iframe> |
| 35 | + |
| 36 | +В примере рассмотрены различные варианты выравнивания текста — слева направо (`ltr`), справа налево (`rtl`) и автоматическое определение направления текста браузером. |
| 37 | + |
| 38 | +## Как пишется |
| 39 | + |
| 40 | +Атрибут `dir` принимает одно из следующих значений: |
| 41 | + |
| 42 | +- `ltr` — текст будет написан слева направо. Такое направление текста используется, например, для русского или английского языков. Является значением по умолчанию; |
| 43 | +- `rtl` — текст будет написан справа налево. Актуально, например, для арабских языков; |
| 44 | +- `auto` — направление текста определяется браузером. |
| 45 | + |
| 46 | +Алгоритм, используемый браузерами для определения направления текста при значении `auto`, можно представить следующим образом: |
| 47 | + |
| 48 | +- браузер определяет, к какому типу языков (в плане направления написания текста) принадлежит первый символ абзаца; |
| 49 | +- устанавливается направление вывода текста исходя из норм языка, в котором используется данный символ. |
| 50 | + |
| 51 | +## Подробнее |
| 52 | + |
| 53 | +В HTML направление текста задаётся либо ближайшим родительским элементом, который использует атрибут `dir`, либо, при отсутствии такого атрибута, используется значение `ltr`. |
| 54 | + |
| 55 | +При изменении значения атрибута на `rtl`, браузер автоматически изменит как направление текста, так и его выравнивание (текст будет выровнен по правому краю), в соответствии с тем как это принято в таких языках. |
| 56 | + |
| 57 | +Чаще всего атрибут `dir` следует использовать для задания базового направления текста для всего документа. Чтобы это сделать необходимо применить атрибут к тегу [`<html>`](/html/html/). |
| 58 | + |
| 59 | +```html |
| 60 | +<!DOCTYPE html> |
| 61 | +<html dir="rtl" lang="ar"> |
| 62 | + <head> |
| 63 | + <meta charset="utf-8"> |
| 64 | + </head> |
| 65 | + ... |
| 66 | +</html> |
| 67 | +``` |
| 68 | + |
| 69 | +Объявляя общее для документа направление текста в теге `<html>`, не забудьте также объявить язык документа с помощью атрибута [`lang`](/html/global-attrs/#lang). Это поможет вспомогательным технологиям, например таким как [скринридер](/a11y/screenreaders/), верно взаимодействовать с контентом на странице. При этом, объявления языка не указывает направление текста. Всегда лучше объявлять направление текста явно с помощью атрибута `dir`. |
| 70 | + |
| 71 | +Также атрибут `dir` может быть использован внутри отдельных блоков чтобы изменить направление текста только в заданном блоке. Такие блоки называются блоками двунаправленного текста. |
| 72 | + |
| 73 | +```html |
| 74 | +<html dir="rtl" lang="ar"> |
| 75 | + ... |
| 76 | + <blockquote dir="ltr" lang="ru" cite="Мастер и Маргарита"> |
| 77 | + Поймите, что язык может скрывать истину, а глаза – никогда! |
| 78 | + </blockquote> |
| 79 | + ... |
| 80 | +</html |
| 81 | +``` |
| 82 | + |
| 83 | +## Значение `auto` |
| 84 | + |
| 85 | +Атрибут `dir` со значением `auto` следует применять только в том случае, если заранее неизвестно направление текста, например, если данные на сайт поступаю из внешних источников. |
| 86 | + |
| 87 | +При определении направления текста, в этом случае, браузер, при поиске первого строго типизированного символа, пропускает текст в элементе [`<bdi>`](/html/bdi/), а также текст в элементах [`<script>`](/html/script/), [`<style>`](/html/style/) и [`<textarea>`](/html/textarea/), в любом элементе с атрибутом `dir`. |
| 88 | +
|
| 89 | +<iframe title="Значение auto" src="demos/dir-auto/" height="530"></iframe> |
| 90 | +
|
| 91 | +Обратите внимание что этот используемый браузерами алгоритм не всегда надёжный. В примере последний абзац неверно интерпретируется браузером. Так как первый символ является арабским, то браузер выбрал направление текста справа налево. В результате, последняя строка будет выровнена по правому краю, а текст «верно?» находится слева от арабского текста, с вопросительным знаком в крайнем левом углу. |
| 92 | +
|
| 93 | +Также значение `auto` можно применять если данные вводятся пользователем в элементах формы, таких как [`<input>`](/html/input/) или [`<textarea>`](/html/textarea/). |
| 94 | +
|
| 95 | +<iframe title="Значение auto для элементов форм" src="demos/dir-auto-input/" height="530"></iframe> |
| 96 | +
|
| 97 | +В примере можно заменить, что браузер сам определяет направление текста в зависимости от первой введённой буквы. Для элемента `<textarea>`, направление текста в этом случае определяется отдельно для каждого абзаца. Абзацы `rtl` и `ltr` в этом случае также выравниваются по-разному. |
| 98 | +
|
| 99 | +## Подсказки |
| 100 | +
|
| 101 | +💡 Используйте [логические](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_logical_properties_and_values) CSS-свойства для стилизации блоков, это сделает вёрстку предсказуемой вне зависимости от направления текста. |
0 commit comments