
Когда CSS становится проблемой производительности
Как чрезмерное использование селекторов и глубокая вложенность влияют на производительность рендеринга.

Веб-сайты потребляются на сотнях языков, некоторые из которых пишутся слева направо (LTR), как английский и французский, другие справа налево (RTL), как арабский и иврит, а также есть те, что сочетают вертикальный и горизонтальный текст, например японский. Если ваш CSS жестко прописан для одного направления, интерфейс может стать нечитаемым или невозможным для использования при изменении направления документа. Создание с учетом интернационализации (i18n) предполагает использование техник, которые позволяют вашим макетам естественно масштабироваться как в LTR, так и в RTL без дублирования таблиц стилей.
dir как источник правдыHTML предоставляет встроенную метадату направления:
<html lang="ar" dir="rtl">
...
</html>
или для любого поддерева:
<section dir="rtl">...</section>
Основывайте ваш CSS на этом атрибуте, а не на вручную созданных классах .rtl. Это сохраняет смысловую структуру разметки и предотвращает случайное расхождение между разметкой и стилями.
Традиционные свойства (margin-left, padding-right, border-top) являются физическими; их значение меняется в RTL. Логические свойства описывают логические стороны блока, позволяя браузеру автоматически определять правильный физический край.
margin-inline-start и margin-inline-end заменяют левый и правый отступыpadding-block-start и padding-block-end заменяют верхний и нижний отступыinset-inline-start и inset-inline-end заменяют позиционирование слева и справа.button {
padding-inline: 1rem 1.5rem; /* start end */
border-inline-start: 4px solid var(--brand);
}
Правило выше создаст левую рамку в LTR и правую в RTL — без дополнительного CSS.
Элементы Flex автоматически следуют за direction документа при flex-direction равном row. Вам практически никогда не потребуется отдельная настройка для RTL.
.toolbar {
display: flex; /* порядок элементов меняется в зависимости от направления */
gap: 0.75rem;
}
CSS Grid также поддерживает логичный поток с помощью свойства direction. Избегайте жестко прописанных grid-column-start: 1, когда вы подразумеваете «первая сторона». Используйте именованные линии сетки:
.layout {
display: grid;
grid-template-columns: [start] 250px [content] 1fr [end];
}
:dir()Нужна исключительная ситуация? Обращайтесь к элементам по направлению без дополнительных классов:
input:dir(rtl) {
background-image: url(icons/search-rtl.svg);
}
Это делает ваш стиль декларативным и избегает ненужных изменений DOM.
В Восточной Азии иногда предпочитают вертикальный текст. Используйте writing-mode и логические свойства вместе:
.callout {
writing-mode: vertical-rl; /* сверху вниз, колонки справа налево */
margin-block: 2rem;
}
transform: scaleX(-1) для зеркалирования иконок при необходимости.direction="rtl", чтобы использовать <switch> для путей RTL.Объявляйте семейство шрифтов для каждого языка через псевдокласс :lang():
:lang(ja) {
font-family: "Noto Sans JP", system-ui, sans-serif;
}
Комбинируйте с переменными шрифтами для уменьшения веса ресурсов.
dir="rtl" к элементу <html> и откройте каждую страницу.Браузеры, которые не поддерживают логические свойства (в основном старый Safari и IE), могут получать запасной файл, расположенный после современного:
<link rel="stylesheet" href="styles-modern.css">
<!--[if lte IE 11]>
<link rel="stylesheet" href="styles-legacy.css">
<![endif]-->
Каскадность обеспечивает, что новые браузеры игнорируют условный комментарий, а устаревшие получают пригодный CSS.
Интернационализация — это не дополнение, а ключевая часть инклюзивного дизайна. Используя нативные возможности CSS — логические свойства, Flexbox, Grid, :dir() и селекторы с учетом языка — вы можете создать единый стиль, который гармонично адаптируется к любой системе письма. В результате получаете ускоренный цикл разработки, меньше ошибок и продукт, создающий ощущение локальности в любой точке мира.
Давайте обсудим, как я могу помочь воплотить её в жизнь. Готов ответить на вопросы и рассказать о возможных решениях.
Связаться со мной
Как чрезмерное использование селекторов и глубокая вложенность влияют на производительность рендеринга.

Сравнивает стратегии рендеринга с реальными примерами реализации, сосредоточившись на влиянии на SEO, масштабируемости, стратегиях кэширования и стоимости инфраструктуры.