Кратко
Скопировано@charset задаёт кодировку текущего CSS‑файла. Должна быть самым первым байтом таблицы стилей (после необязательного BOM), иначе игнорируется. В совремённой практике с UTF‑8 почти не требуется: кодировку лучше указывать HTTP‑заголовком или через <meta charset> для HTML.
Пример
Скопировано
@charset "UTF-8";body { font-family: system-ui, sans-serif;}
@charset "UTF-8";
body {
font-family: system-ui, sans-serif;
}
Неверно — перед директивой есть комментарий, поэтому @charset будет проигнорирован:
/* ⚠️ так нельзя */@charset "UTF-8";
/* ⚠️ так нельзя */
@charset "UTF-8";
Как пишется
Скопировано- Записывается только на верхнем уровне и только первой строкой файла.
- Строковое значение в кавычках, обычно
".U T F - 8" - Допускается один раз на файл. Если встречается несколько, учитывается только первая.
- Должна предшествовать любым
@importи другим правилам. - Нельзя использовать внутри атрибута
styleи внутри тега<style>: для них кодировка берётся из документа.
Как понять
СкопированоПарсеру CSS нужна корректная кодировка, чтобы верно прочитать не ASCII‑символы (например, селекторы, комментарии, литералы). Исторически для этого использовали @charset. Сейчас повсеместно применяют UTF‑8 и задают кодировку уровнем выше:
- HTTP‑заголовком
Content;- Type : text / css; charset = utf - 8 - BOM (U+FEFF) в начале CSS‑файла;
<meta charsetдля HTML (влияет на встроенные стили).= "utf - 8">
Подсказки
Скопировано💡 Предпочитайте UTF‑8 и настройку кодировки на уровне сервера/сборки. @charset используйте только при необходимости и строго первой строкой.
💡 Перед @charset не должно быть ни пробелов, ни комментариев, ни пустых строк.
💡 Если файл импортируется через @import, его собственный @charset тоже обязан стоять самым первым в импортируемом файле.
💡 Никогда не смешивайте разные кодировки в одном проекте — это источник трудноуловимых ошибок.
- Chrome 2, поддерживается
- Edge 12, поддерживается
- Firefox 1.5, поддерживается
- Safari 4, поддерживается