Чому слід вказати @charset “UTF-8”; у вашому CSS-файлі?


173

Я бачив цю інструкцію як найперший рядок із численних файлів CSS, які мені передали:

@charset "UTF-8";

Що це робить, і чи потрібне це правило?

Крім того, якщо я включу цей метатег у свій елемент "head", чи не усуне це необхідність його наявності у моїх CSS-файлах?

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

Відповіді:


123

Він повідомляє браузеру читати файл css як UTF-8. Це зручно, якщо ваш CSS містить символи Unicode, а не тільки ASCII.

Використовувати його в метатезі добре, але лише для сторінок, які містять цей метатег.

Про правила для роздільної здатності наборів символів CSS-файлів читайте на специфікації w3c для CSS 2.


7
Також важливо, якщо ви зв’яжете ці файли з сайтів, що не належать до UTF-8, наприклад, скажімо: японський веб-сайт, кодований як UTF-16, намагаючись завантажити CSS з CDN, отримає нечитабельний вміст, якщо файл CSS не оголошує його кодування.
Парацетамол

147

Це корисно в контекстах, коли кодування не повідомляється за заголовком HTTP або іншими метаданими, наприклад, локальною файловою системою.

Уявіть таку таблицю стилів:

[rel="external"]::after
{
    content: ' ↗';
}

Якщо зчитувач зберігає файл на жорсткому диску, а ви пропускаєте це @charsetправило, більшість браузерів прочитає його в кодуванні локальної локальної системи ОС, наприклад, Windows-1252, а замість стрілки вставить â †.

На жаль, ви не можете покластися на цей механізм, оскільки підтримка досить… рідкісна. І пам’ятайте, що в мережі заголовок HTTP завжди буде заміняти @charsetправило.

Правильні правила визначення набору символів таблиці стилів є в порядку пріоритетності:

  1. Заголовок HTTP Charset.
  2. Позначка порядку байтів.
  3. Перше @charsetправило.
  4. UTF-8.

Останнє правило є найслабшим, воно вийде з ладу в деяких браузерах. Атрибут є застарілим в HTML 5 . Слідкуйте за конфліктом між різними деклараціями. Налагодити їх непросто.
charset<link rel='stylesheet' charset='utf-8'>

Рекомендоване читання


Ви маєте на увазі, що файли css потрібно подавати із content-type:text/css;charset=utf-8заголовком?
Pacerier

1
@Pacerier Так, якщо це кодування HTML-файлу (воно повинно бути).
fuxia

Я маю на увазі, чи не мається на увазі, що без набору шаблону файл css слід інтерпретувати так само, як і вбудований HTML-файл?
Pacerier

1
@Pacerier Я помітив, що це не завжди так.
MatTheCat

3

Однією з причин завжди містити специфікацію набору символів на кожній сторінці, що містить текст, є уникнення вразливих сценаріїв міжсайтового сценарію. У більшості випадків набір символів UTF-8 є найкращим вибором тексту, включаючи HTML-сторінки.


2

Якщо ви поміщаєте тег <meta> у свої файли css, ви робите щось не так. Тег <meta> належить до ваших html- файлів і повідомляє браузеру, як кодується html, він нічого не говорить про css, який є окремим файлом. Можливо, у вас можуть бути зовсім інші кодування для ваших html та css, хоча я не можу уявити, що це було б гарною ідеєю.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.