Маленькие хитрости JavaScript
Достигший высокой степени просветления гуру веб-мастеринга может заслуженно почивать на лаврах, занимаясь исключительно архитектурными вопросами проектирования сайтов, и, может быть, иногда давать консультации за очень большие деньги. Но для того чтобы стать таким гуру, требуются годы духовного совершенствования. И кто знает, что сложнее для неофита – постичь, как звучит хлопок одной ладони, или разобраться в особенностях функционирования объекта StyleSheet в объектной модели JavaScript...
Акт первый. Форма и содержание
Как известно, каскадные таблицы стилей CSS являются одним из наиболее прогрессивных изобретений человечества (после анальгина). Полезность их заключается в том, что теперь нет необходимости встраивать различные оформительские ухищрения непосредственно в HTML-код, засоряя таким образом природное изящество его конструкций разномастными атрибутами цвета, размера и месторасположения. Есть способ лучше – свести все описание стиля в одну таблицу стилей и подключать ее по мере необходимости. Напомним, что делается это помещением в заголовок HTML-документа строки приблизительно следующего содержания:
Поскольку веб-мастера – это существа, страдающие хроническим избытком оптимизма, они часто полагают, что стилевая разметка, указанная в файле default.css, в состоянии удовлетворить всех посетителей их замечательного сайта. Однако мир куда более жесток, чем предполагает человек любой профессии, хоть как-то связанной с творчеством. Не проходит и одной тысячи посещений, как в почтовый ящик веб-мастера начинают сваливаться многочисленные просьбы «чуть-чуть изменить дизайн». Когда вежливые, а когда и чрезмерно злобные и с угрозами физической расправы. Причем любые изменения в дизайне не только не исправят, но даже ухудшат положение, потому как всегда найдутся люди, которым раньше нравилось больше.
Что же делать? Многие последуют совету упоминавшихся в начале статьи гуру и эти просьбы проигнорируют. Но, не постигнув Тень, нельзя увидеть Света – и мы покажем, как все-таки дать пользователю возможность легким движением мышки получить устраивающий его дизайн.
Итак, предположим, что вы, как и автор этой статьи, предпочитаете видеть черный текст на белом фоне. И, соответственно, прописываете в default.css следующее определение:
body {background-color: white; color: black}
Но пару дней назад к вам поступила гневная нота от посетителя сайта В.В. Пупкина, который желает видеть на сайте белый текст на черном фоне. Поскольку Пупкин – человек известный и уважаемый, вы не можете отказать ему в этой маленькой просьбе, для чего создаете альтернативную таблицу стилей pupkin.css:
body {background-color: black; color: white}
Теперь осталось сделать так, чтобы Пупкин и его сторонники видели сайт таким, как нравится им, а прочие посетители – таким, как нравится вам. Для этого необходимо реализовать JavaScript-функцию динамической замены таблицы стилей:
Осталось добавить в код страницы элементы управления, которые будут позволять менять таблицу стилей. Допустим, это будут кнопки «Стандартная версия» и «Версия для В. Пупкина»: