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-тег, о котором я рассказывал.
Прочитайте комментарий, там есть немаловажные подробности.
Ваш пример неверен.
Заголовок 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» />
Действующие модели:
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
Комментарий для besisland.name:
Это не совсем так: http://www.w3.org/TR/html-markup/meta.http-equiv.default-style.html
Комментарий для besisland.name:
А вот это важно, спасибо! Я не разобрался до конца.
В дополнение: Firefox ещё со времён Seamonkey позволяет пользователю переключаться между альтернативными стилями.
Комментарий для dionys.myopenid.com:
А подробнее?
Комментарий для Евгения Степанищева:
Главное меню → «Вид» → «Стиль страницы».
Комментарий для dionys.myopenid.com:
И Opera давно позволяет; правда, и там, и там выбор стиля запрятан довольно глубоко в интерфейс (хотя в Firefox всё же глубже), а надо бы какой-то очевидной плашкой вверху страницы.