Двунаправленные горизонтальные правила в CSS
Атрибут dir в HTML и свойство dir в CSS можно использовать, чтобы задать направление текста и горизонтального потока. Некоторые языки используют написание слева направо (LTR), а другие - справа налево (RTL). Создание интерфейса для поддержки макетов LTR и RTL является сложной задачей. Технологии Flexbox и Grid упрощает этот процесс, но не до конца.
В CSS доступно множество свойств для указания направления. Например, при создании горизонтальных элементов дизайна отступ задается только для родительского элемента. А для первого и последнего дочерних элементов правый отступ равный 0.
.element {
margin-right: 1rem;
}
.element:last-child {
margin-right: 0;
}
Или:
.element:not(:last-child) {
margin-right: 1rem;
}
В приведенном выше примере мы добавляем отступ с правой стороны каждого элемента, кроме последнего. То есть, хотим добавить отступ после элемента в направлении горизонтального потока документа (или родительского элемента).
Чтобы выделить цитаты, обычно мы добавляем границу с той стороны цитаты, которую мы считаем предшествующей ей.
.content blockquote {
background-color: #f5f5f5;
border-left: 5px solid #dbdbdb;
padding: 1.25em 1.5em;
}
Есть много других CSS-стилей, в которых мы указываем направление (лево / право). Но на самом деле мы имеем в виду до или после. Поэтому при создании интерфейсов, которые поддерживают LTR и RTL-макеты следует использовать следующие правила написания CSS-кода:
.class {}
html[dir="rtl"] .class {}
Также можно подгружать разный CSS для макетов LTR и RTL. Но оба варианта реализации подразумевают увеличение объема кода.
А нельзя ли указать браузеру, что нам нужна сторона до или после элемента, а не направления (лево или право).
Для этого в CSS включает логические свойства: inline-start и inline-end:
.element:not(:last-child) {
margin-inline-end: 1rem;
}
Вместо использования top и bottom мы можем использовать block-start и block-end. Поэтому можно написать один набор CSS-правил для макетов LTR и RTL. Ниже приведен пример использования свойства margin-inline-end:
Пример использования свойств border-inline-start и padding-inline-start:
Браузер Firefox также поддерживает свойство border-*-*-radius. Поэтому можно указывать различные углы с помощью border-start-start-radius, border-end-start-radius и т.д.
Все демо-версии:
Поддержка браузерами
- Логические свойства
- border-*-*-radius