Как изменить стили в зависимости от языка страницы?

Как можно изменить стили на веб-странице в зависимости от языка, указанного в атрибуте lang тега HTML, если я нашел информацию о том, что язык можно использовать в медиазапросах, но моя реализация не работает?
  • 25 сентября 2024 г. 11:13
Ответы на вопрос 4
Изменение стилей в зависимости от языка страницы — это задача, которая может быть решена несколькими способами. Давайте рассмотрим основные подходы к этом вопросу.

### 1. Использование CSS с атрибутом `lang` в селекторах

CSS поддерживает селекторы атрибутов, поэтому вы можете написать стили, основанные на значении атрибута `lang`. Например:

```css
[lang="en"] {
    /* Стили для англоязычной версии */
    background-color: blue;
}

[lang="ru"] {
    /* Стили для русскоязычной версии */
    background-color: red;
}
```

Здесь используется селектор `[lang="..."]`, который применяет стили в зависимости от языка, указанного в атрибуте `lang`.

### 2. JavaScript для динамического применения стилей

Вы также можете использовать JavaScript для изменения классов или стилей на основе значения атрибута `lang`. Пример:

```javascript
document.addEventListener("DOMContentLoaded", function() {
    const lang = document.documentElement.lang; // Получаем язык страницы
    
    if (lang === "en") {
        document.body.classList.add("english-style");
    } else if (lang === "ru") {
        document.body.classList.add("russian-style");
    }
});
```

Стили для классов `english-style` и `russian-style` можно определить в CSS.

### 3. Использование медиазапросов (необычный подход)

На самом деле, в стандартном CSS медиазапросы не поддерживают селекторы атрибутов, как `lang`. Однако, если вы хотите применять стили на основе языка в медиазапросах, вы можете обернуть ваши элементы в различные контейнеры с классами или атрибутами, соответствующими языку, и использовать их в медиазапросах.

### 4. Пример:

HTML:
```html
<html lang="en">
<head>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <h1>Hello</h1>
</body>
</html>
```

CSS:
```css
[lang="en"] {
    background-color: blue;
}

[lang="ru"] {
    background-color: red;
}
```

### Итог

Используйте первый метод, если хотите сделать это только с помощью CSS. Это простой и чистый способ. Если нужно больше логики или динамическое изменение стилей во время выполнения, используйте JavaScript. Динамическое изменение стилей в зависимости от языка может потребовать более сложной реализации, но вышеприведенные способы должны помочь вам начать.
Что если попробовать что-то такое 

Объявляем переменные, которые принимают значения в зависимости от языка на уровне root
:root {
    --main-color: blue;
}


На уровне html переопределяем их как нам нравится в связке с языком

html[lang="en"]
{
    --main-color: red;
}
html[lang="ru"]
{
    --main-color: green;
}


А затем в нужных местах используем эту переменную

h1 {
color:  var(--main-color);
}


Проверил, без всяких scss/less работает
https://developer.mozilla.org/en-US/docs/Web/CSS/:lang 
https://developer.mozilla.org/en-US/docs/Web/HTML/...
*:lang(en-US) {
  outline: 2px solid deeppink;
}
*:lang(ru) {
  color: red;
}
html:lang(en) body {
  background-color: lightblue;
}
Похожие вопросы