HTTP-заголовок Default-Style

Если бы я сейчас на ночь глядя не решил почитать по диагонали спецификацию тега LINK, то так, наверное, никогда в жизни бы и не узнал о существовании мета-тега «Default-Style», между тем, этот трюк описан ещё в HTML 4.01.

Если у вас подключены несколько таблиц стилей к одному документу, вы можете дать им имя, прописав его в атрибуте «title», и выбрать его через мета-тег или HTTP-заголовок. Например:
<head>
<style type="text/css" title="right">
body {
  background: blue;
}
</style>

<style type="text/css" title="wrong">
body {
  background: red;
}
</style>

<meta http-equiv="Default-Style" content="right" />
</head>
Работать должен только стиль с именем «right» (можно дать и русские имена). Слово должен я выделил, потому что это стандарт. Жизнь, как всегда, богаче.

Я проверил на браузерах, которые у меня есть, в «Опере» 11 RC3 и Internet Explorer 9 beta это не работает, работает в Firefox 3.6.12, Safari 5 и Chrome 9.0.597.19, можете проверить свой браузер, фон должен быть синим.

Можно из этого сделать своеобразный CSS-хак.

Добавлено: во встроенном браузере на моём «Нексусе» работает («Андроид» 2.2.1), в Firefox 2.0 и Chrome 5.0.375.125 — тоже.

Добавлено ещё позже: в комментарях меня поправляет Денис Попов: по стандарту если заданы несколько тегов LINK, задающих стили с title, то выбирается первый («Опера» и «IE» нарушают стандарт уже в этом месте, я проверил), если не задан специальный META-тег, о котором я рассказывал.

Прочитайте комментарий, там есть немаловажные подробности.
15 декабря 2010 00:49

besisland (besisland.name)
15 декабря 2010, 03:16

Ваш пример неверен.

Заголовок Default-Style (о котором я тоже слышу впервые) относится к внешним таблицам стилей, подключаемым через <link />. К стилям, определяемым внутри <style />, он отношения не имеет. Вообще, понятия persistent, preferred and alternate style sheets относятся только к external style sheets. См. 14.3.1.

Далее, допустим, мы исправили эту оплошность и вместо двух <style /> у нас теперь два <link />:
    <link type="text/css" href="blue.css" rel="stylesheet" title="blue" />

    <link type="text/css" href="red.css" rel="stylesheet" title="red" />


Что мы имеем в этом варианте? Согласно 14.3.2, link с rel=stylesheet и с заданным title указывает на preferred style sheet. Preferred style sheet следует указывать один; если их указано два, то the first one takes precedence, то есть blue.

Но если теперь добавить <meta http-equiv="Default-Style" content="red" />, то действует следующее правило: Preferred style sheets specified with META or HTTP headers have precedence over those specified with the LINK element. Таким образом, в этом варианте фон будет красным:
    <link type="text/css" href="blue.css" rel="stylesheet" title="blue" />

    <link type="text/css" href="red.css" rel="stylesheet" title="red" />

    <meta http-equiv="Default-Style" content="red" />


Но правильнее было бы не прибегать к Default-Style вовсе и указать, какие стили являются persistent, preferred или alternate, первоочередным образом:
— rel=stylesheet без title — persistent, применяется всегда;
— rel=stylesheet с title — preferred, применяется по умолчанию в дополнение к persistent;
— rel='alternate stylesheet' — alternate, по умолчанию не применяется, а будучи выбранным, применяется взамен preferred и в дополнение к persistent.

Кроме того, если указать у нескольких линков одинаковые title, эти стили образуют группу и будут применяться всегда вместе.

Пример:
    <link type="text/css" href="common.css" rel="stylesheet" />

    <link type="text/css" href="blue.css" rel="stylesheet" title="blue" />

    <link type="text/css" href="red.css" rel="alternate stylesheet" title="red" />

    <link type="text/css" href="red2.css" rel="alternate stylesheet" title="red" />

besisland (besisland.name)
15 декабря 2010, 03:31

Действующие модели:
http://besisland.name/trash/css-preferred-alternated-persistent/1.html
http://besisland.name/trash/css-preferred-alternated-persistent/2.html
http://besisland.name/trash/css-preferred-alternated-persistent/3.html
http://besisland.name/trash/css-preferred-alternated-persistent/4.html
http://besisland.name/trash/css-preferred-alternated-persistent/5.html

bolk (bolknote.ru)
15 декабря 2010, 09:12, ответ предназначен besisland (besisland.name):

Заголовок Default-Style (о котором я тоже слышу впервые) относится к внешним таблицам стилей, подключаемым через <link />. К стилям, определяемым внутри <style />, он отношения не имеет
Это не совсем так: http://www.w3.org/TR/html-markup/meta.http-equiv.default-style.html

bolk (bolknote.ru)
15 декабря 2010, 09:15, ответ предназначен besisland (besisland.name):

Что мы имеем в этом варианте? Согласно 14.3.2, link с rel=stylesheet и с заданным title указывает на preferred style sheet. Preferred style sheet следует указывать один; если их указано два, то the first one takes precedence, то есть blue.
А вот это важно, спасибо! Я не разобрался до конца.

Denis Ibaev (dionys.myopenid.com)
15 декабря 2010, 11:18

В дополнение: Firefox ещё со времён Seamonkey позволяет пользователю переключаться между альтернативными стилями.

bolk (bolknote.ru)
15 декабря 2010, 11:48, ответ предназначен Denis Ibaev (dionys.myopenid.com):

А подробнее?

Denis Ibaev (dionys.myopenid.com)
15 декабря 2010, 16:49, ответ предназначен bolk (bolknote.ru):

Главное меню → «Вид» → «Стиль страницы».

besisland (besisland.name)
15 декабря 2010, 17:00, ответ предназначен Denis Ibaev (dionys.myopenid.com):

И Opera давно позволяет; правда, и там, и там выбор стиля запрятан довольно глубоко в интерфейс (хотя в Firefox всё же глубже), а надо бы какой-то очевидной плашкой вверху страницы.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)