Для языков стилей кажется обычной практикой использовать [lang=en]
(или :lang(en)
).
Однако это соглашение может вызвать проблемы, особенно с модификаторами БЭМ. Рассмотрим этот CSS:
.block__element {
font-size: 12px;
}
[lang=ar] .block__element {
font-size: 14px;
}
.block__element--small {
font-size: 10px;
}
В этом случае, если у нас есть block__element
с lang
, который не является ar
, он будет иметь размер шрифта 12 пикселей. Если у него также есть модификатор --small
, у него будет размер шрифта 10.
Однако, если lang
страницы равно ar
, размер шрифта будет 14 пикселей независимо от модификатора. Это связано со спецификой CSS.
Поэтому, чтобы противостоять этому, разработчик может добавить новое правило, которое просто вернет block__element--small
на арабском языке к 10px:
.block__element {
font-size: 12px;
}
[lang=ar] .block__element {
font-size: 14px;
}
.block__element--small {
font-size: 10px;
}
// ^ Basically the same as this but more specific
[lang=ar] .block__element--small {
font-size: 10px;
}
Это далеко от идеала.
Есть ли более умный способ справиться с этой ситуацией, чтобы избежать переопределения стилей для каждого такого случая? (Что особенно часто встречается в проектах RTL+LTR)
all-languages
в одном проекте :( - person cwj   schedule 27.01.2019