Можете ли вы создать элемент noscript?

Можно ли использовать элемент noscript в селекторах CSS?

noscript p {
    font-weight: bold;
}

Ответ 1

Да! Вы можете это сделать.

Фактически, многие (all?) браузеры поддерживают таргетинг на любой произвольный тег с помощью CSS. "Официальные" теги в спецификации HTML определяют только то, что браузер должен делать с ними. Но CSS - это язык, который нацелен на любой вкус XML, поэтому вы можете сказать foo {font-weight:bold;}, и в большинстве браузеров <foo> hello world </foo> выделяется жирным шрифтом.

Как Darko Z разъясняет, что IE6/7 не добавляет к исходному файлу произвольные (нестандартные) элементы в DOM; они должны быть программно добавлены.

Ответ 2

У меня есть ошибка IE, чтобы иметь в виду. Если, например, OP, вы просто хотите стилизовать текст внутри тега noscript, а не сам тег noscript, пожалуйста, не обращайте на него внимания.

Предположим, что вы хотите, чтобы фон тега noscript был красным. В IE8 он будет отображаться с включенным JS. Только поле, а не текст внутри.

Итак, эта комбинация не очень хороша:

CSS

noscript {
    background-color: red;
}

HTML

<noscript>Turn on your damned JavaScript! What is this, 1999?</noscript>

Но это обходное решение отлично работает:

CSS

noscript div {
    background-color: red;
}

HTML

<noscript><div>Turn on your damned JavaScript! What is this, 1999?</div></noscript>

Как ни странно, я вижу это только в IE8, а не в IE7. И кто знает о 6..

Ответ 3

В дополнение к ответ Rex M - IE 6/7 (6 def, 7, может быть?) не будет создавать для вас произвольный тег. Но вам повезло, так как с all у многих проблем IE есть обходной путь.

Предположим, вы хотите стилизовать элемент с именем foo. Чтобы IE распознал его как стильный элемент, вам нужно включить эту строку где-нибудь в свой JS:

document.createElement('foo');

Вам не нужно добавлять его, просто создайте его.

Это приведет к тому, что IE будет стилизовать этот элемент для вас с помощью правила CSS:

foo { font-weight:bold; }