Кратко
Скопировано:dir — псевдокласс, который совпадает с элементами в зависимости от их вычисленного направления письма: :dir или :dir. Направление может приходить от атрибута dir, от языка документа или быть наследовано.
Пример
СкопированоСдвинем «акцент» цитаты к краю чтения: слева в LTR и справа в RTL.
<blockquote dir="ltr" lang="ru"> <p>Ничего на свете лучше нету, чем бродить друзьям по белу свету.</p> <div class="lang">dir=ltr</div> <!-- Направление слева направо --></blockquote><blockquote dir="rtl" lang="ar"> <p>السَّلَامُ عَلَيْكُمْ — مثال على نص باللغة العربية.</p> <div class="lang">dir=rtl</div> <!-- Направление справа налево --></blockquote>
<blockquote dir="ltr" lang="ru">
<p>Ничего на свете лучше нету, чем бродить друзьям по белу свету.</p>
<div class="lang">dir=ltr</div>
<!-- Направление слева направо -->
</blockquote>
<blockquote dir="rtl" lang="ar">
<p>السَّلَامُ عَلَيْكُمْ — مثال على نص باللغة العربية.</p>
<div class="lang">dir=rtl</div>
<!-- Направление справа налево -->
</blockquote>
blockquote { border-radius: 8px; padding: 12px 14px; border-inline-start: 3px solid #2E9AFF; padding-inline-start: 14px;}blockquote:dir(rtl) { border-inline-start-color: #F498AD;}
blockquote {
border-radius: 8px;
padding: 12px 14px;
border-inline-start: 3px solid #2E9AFF;
padding-inline-start: 14px;
}
blockquote:dir(rtl) {
border-inline-start-color: #F498AD;
}
Как пишется
Скопировано
/* К элементам с направлением слева направо */blockquote:dir(ltr) { padding-left: 14px; border-left: 3px solid #2E9AFF;}/* К элементам с направлением справа налево */blockquote:dir(rtl) { padding-right: 14px; border-right: 3px solid #2E9AFF; text-align: right;}
/* К элементам с направлением слева направо */
blockquote:dir(ltr) {
padding-left: 14px;
border-left: 3px solid #2E9AFF;
}
/* К элементам с направлением справа налево */
blockquote:dir(rtl) {
padding-right: 14px;
border-right: 3px solid #2E9AFF;
text-align: right;
}
Как понять
Скопировано:dir опирается на вычисленную направленность элемента, а не просто на наличие атрибута dir. Вычисленная направленность определяется в следующем порядке:
- Атрибут
dirна самом элементе - Атрибут
dirна родительских элементах (наследование) - Атрибут
langи правила языка документа
Поэтому :dir сработает на потомках с dir, даже если у них нет собственного атрибута.
Отличие от селектора [dir]
СкопированоГлавное отличие :dir от атрибутного селектора [dir:
[dir— выбирает только те элементы, у которых явно задан атрибут= "rtl" ] dir:dir— выбирает элементы, у которых вычисленное направление( rtl ) rtl, включая унаследованное
<div dir="rtl"> <!-- У этого абзаца нет атрибута dir, но направление вычисляется как rtl --> <p>Этот абзац унаследовал направление rtl.</p> <!-- А этот абзац явно переопределил направление --> <p dir="ltr">А этот абзац явно переопределил направление на ltr.</p></div>
<div dir="rtl">
<!-- У этого абзаца нет атрибута dir, но направление вычисляется как rtl -->
<p>Этот абзац унаследовал направление rtl.</p>
<!-- А этот абзац явно переопределил направление -->
<p dir="ltr">А этот абзац явно переопределил направление на ltr.</p>
</div>
/* :dir(rtl) сработает на унаследованном элементе */p:dir(rtl) { background-color: #FF8630;}/* [dir="rtl"] НЕ сработает на унаследованном элементе */p[dir="rtl"] { border: 2px solid white;}
/* :dir(rtl) сработает на унаследованном элементе */
p:dir(rtl) {
background-color: #FF8630;
}
/* [dir="rtl"] НЕ сработает на унаследованном элементе */
p[dir="rtl"] {
border: 2px solid white;
}
В этом примере первый абзац получит оранжевый фон от :dir, но не получит белую рамку от [dir, потому что у него нет атрибута dir.
Взаимодействие с :lang()
Скопировано:dir и :lang — это разные псевдоклассы для разных задач:
:lang— выбирает элементы по языку (атрибут( ) lang):dir— выбирает элементы по направлению письма( )
Они не конфликтуют и могут использоваться вместе. Например, селектор :lang выберет только арабские элементы с направлением справа налево. Очерёдность применения не влияет на результат, потому что они проверяют разные характеристики элемента.
Подсказки
Скопировано💡 Используйте :dir для симметричных отступов/границ, чтобы избежать дублирования «лево/право» правил.
💡 Комбинируйте с логическими свойствами (margin, padding) — тогда часть правил можно вовсе не ветвить по направлению.
💡 При смешанных направлениях внутри блока (вставки на другом языке) :dir поможет точечно поправить выравнивание и декоративные элементы.
💡 Помните о поддержке браузерами. :dir не работает в Internet Explorer и старых версиях браузеров. Для них используйте атрибутный селектор [dir в качестве фолбэка. Проверить актуальную поддержку можно на caniuse.com.
- Chrome 120, поддерживается
- Edge 120, поддерживается
- Firefox 49, поддерживается
- Safari 16.4, поддерживается