Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

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-тег, о котором я рассказывал.

Прочитайте комментарий, там есть немаловажные подробности.

8 комментариев
besisland (besisland.name) 2010

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

Заголовок 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» />

Евгений Степанищев (bolknote.ru) 2010

Комментарий для besisland.name:

Заголовок Default-Style (о котором я тоже слышу впервые) относится к внешним таблицам стилей, подключаемым через <link />. К стилям, определяемым внутри <style />, он отношения не имеет

Это не совсем так: http://www.w3.org/TR/html-markup/meta.http-equiv.default-style.html

Евгений Степанищев (bolknote.ru) 2010

Комментарий для 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) 2010

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

Евгений Степанищев (bolknote.ru) 2010

Комментарий для dionys.myopenid.com:

А подробнее?

Denis Ibaev (dionys.myopenid.com) 2010

Комментарий для Евгения Степанищева:

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

besisland (besisland.name) 2010

Комментарий для dionys.myopenid.com:

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