Какой метод является правильным / рекомендуемым?
Либо одинаково хороши.
Второй также подходит для встроенного CSS?
Да.
Однако вам нужно беспокоиться о размещении блоков скриптов и стилей в разделе <![CDATA[
только тогда, когда вы хотите включить символы <
или &
в блок. Вы почти никогда не будете использовать их в CSS.
Вы можете использовать их в JavaScript, но, как правило, лучше избегать этой проблемы, помещая любое значительное количество кода во внешние сценарии, к которым оно относится. Встроенные блоки скриптов, как правило, лучше подходят для ввода вызовов данных и вызовов скриптов, которые редко требуют использования <
или &
(за исключением строковых литеральных значений, в этом случае есть аргумент для их кодирования, например. \x3C
вместо).
И возможно ли / имеет смысл добавить сюда какое-нибудь объявление кодировки
Нет. Атрибут charset="..."
имеет какое-либо значение только для внешних файлов (и не существует в <style>
, поскольку он никогда не является внешним файлом). Внутреннее содержимое уже было декодировано из байтов в символы одновременно с остальной частью содержащего документ, поэтому charset
не имеет смысла в этом пункте.
В любом случае, не все браузеры обращают внимание на атрибут <script charset>
, поэтому необходимо, чтобы кодировка сценариев соответствовала кодировке страницы, которая их включает. Что делает charset="..."
довольно избыточным.
@charset "utf-8";
нормально во внешних таблицах стилей, но вам почти никогда не нужны символы не-ASCII в таблицах стилей, так что это необычно видеть. @charset
недопустимо в JavaScript.