Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

При работе с самими таблицами стилей вам придется столкнуться с двумя типами объектов. Первый тип - это объекты

Element
, представляющие элементы
<style>
и
<link>,
которые содержат или ссылаются на таблицы стилей. Это обычные элементы документа, и если в них определить атрибут
id
, вы сможете выбирать их с помощью метода
document.getElementByld.
Второй тип объектов - объекты
CSSStyleSheet
, представляющие сами таблицы стилей. Свойство
document.styleSheets
возвращает доступный только для чтения объект, подобный массиву, содержащий
объекты
CSSStyleSheet
, представляющие таблицы стилей документа. Если в элементе
<style>
или
<link>,
определяющем или ссылающемся на таблицу стилей, определить атрибут
title
, этот объект будет доступен как свойство объекта
CSSStyleSheet
с именем, указанным в атрибуте
title
.

Следующие разделы описывают, какие операции могут выполняться с этими элементами

<style>
и
<link>
и объектами таблиц стилей.

16.6.1. Включение и выключение таблиц стилей

Простейший прием работы с таблицами стилей является к тому же самым переносимым и надежным. Элементы

<style>
и
<link>
и объекты
CSSStyleSheet
определяют свойство
disabled
, доступное сценариям на языке JavaScript для чтения и записи. Как следует из его имени, если свойство
disabled
принимает значение true, таблица стилей оказывается отключенной и будет игнорироваться броузером.

Это наглядно демонстрирует функция

disableStylesheet,
представленная ниже. Если передать ей число, она будет интерпретировать его как индекс в массиве
document.styleSheets
. Если передать ей строку, она будет интерпретировать ее как селектор CSS, передаст ее методу
document.querySelectorAll
(раздел 15.2.5) и установит в значение true свойство
disabled
всех полученных элементов:

function disableStylesheet(ss) {

if (typeof ss === "number")

document.styleSheets[ss].disabled = true;

else {

var sheets = document.querySelectorAll(ss);

for(var і = 0; і < sheets.length; i++) sheets[i].disabled = true;

}

}

16.6.2. Получение, вставка и удаление правил из таблиц стилей

В дополнение к возможности включения и отключения таблиц стилей объект

CSSStyleSheet
также определяет API для получения, вставки и удаления правил стиля из таблиц стилей. IE8 и более ранние версии реализуют несколько иной API, отличный от стандартного, реализуемого другими броузерами.

Как правило, непосредственное манипулирование таблицами стилей редко бывает полезным. Вместо того чтобы добавлять новые правила в таблицы стилей, обычно лучше оставить их статичными и работать со свойством

className
элемента. В то же время, если необходимо предоставить пользователю возможность полного управления таблицами стилей веб-страницы, может потребоваться организовать динамическое манипулирование таблицами.

Объекты

CSSStyleSheet
хранятся в массиве
document.styleSheets[].
Объект
CSSStyleSheet
имеет свойство
cssRules[],
хранящее массив правил стилей:

var firstRule = document.styleSheets[0].cssRules[0];

В IE это свойство носит имя

rules
, а не
cssRules
.

Элементами массива

cssRules[]
или
rules[]
являются объекты
CSSRule
. В стандартном API объект
CSSRule
может представлять CSS-правила любого типа, включая @-правила, такие как директивы @import и @page. Однако в IE массив
rules[]
может содержать только фактические правила таблицы стилей.

Объект

CSSRule
имеет два свойства, которые могут использоваться переносимым способом. (В стандартном API правила, не относящиеся к правилам стилей, не имеют этих свойств, и потому, возможно, вам потребуется пропускать их при обходе таблицы стилей.) Свойство
selectorText
– это CSS-селектор для данного правила, а свойство
style
– это ссылка на доступный для записи объект
CSSStyleDeclaration
, который описывает стили, связанные с этим селектором. Напомню, что
CSSStyleDeclaration
– это тот же самый тип, который используется для представления встроенных и вычисленных стилей. Объект
CSSStyleDeclaration
может применяться для чтения существующих или создания новых стилей в правилах. Нередко при обходе таблицы стилей интерес представляет сам текст правила, а не, разобранное его представление. В этом случае можно использовать свойство
cssText
объекта
CSSStyleDeclaration
, в котором содержатся правила в текстовом представлении.

В дополнение к возможности получения и изменения существующих правил таблиц стилей имеется возможность добавлять правила в таблицу стилей и удалять их из таблицы. Стандартный прикладной интерфейс определяет методы

insert-Rule
и
deleteRule,
позволяющие добавлять и удалять правила:

document.styleSheets[0].insertRule("H1 { text-weight: bold; }", 0);

Броузер IE не поддерживает методы

insertRule
и
deleteRule,
но определяет практически эквивалентные им функции
addRule
и
removeRule.
Единственное существенное отличие (помимо имен функций) состоит в том, что
addRule
ожидает получить селектор и стиль в текстовом виде в двух отдельных аргументах.

Следующий пример реализует обход правил в таблице стилей и демонстрирует API, внося несколько сомнительных изменений в таблицу:

var ss = document.styleSheets[0]; // Извлечь первую таблицу стилей

var rules = ss.cssRules?ss.cssRules:ss.rules; // Извлечь правила

for(var і = 0; і < rules.length; і++) { // Цикл по этим правилам

var rule = rules[і];

if (!rule.selectorText) continue; // Пропустить @import и др. директивы

var selector = rule.selectorText; // Селектор

var ruleText = rule.style.cssText; // Стили в текстовом виде

// Если правило применяется к элементам h1, применить его к элементам h2

// Учтите, что этот прием сработает, только если селектор

Поделиться:
Популярные книги

Первый среди равных. Книга III

Бор Жорж
3. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
6.00
рейтинг книги
Первый среди равных. Книга III

Сын счастья

Вассму Хербьёрг
2. Книга Дины
Проза:
современная проза
5.00
рейтинг книги
Сын счастья

Я – Легенда

Гарцевич Евгений Александрович
1. Я - Легенда!
Фантастика:
боевая фантастика
попаданцы
рпг
фантастика: прочее
5.00
рейтинг книги
Я – Легенда

На границе империй. Том 10. Часть 8

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 8

Поход

Валериев Игорь
4. Ермак
Фантастика:
боевая фантастика
альтернативная история
6.25
рейтинг книги
Поход

Второгодка. Книга 3. Ученье свет

Ромов Дмитрий
3. Второгодка
Фантастика:
городское фэнтези
сказочная фантастика
альтернативная история
5.00
рейтинг книги
Второгодка. Книга 3. Ученье свет

Дракон

Бубела Олег Николаевич
5. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.31
рейтинг книги
Дракон

Печать мастера

Лисина Александра
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Печать мастера

На границе империй. Том 7. Часть 5

INDIGO
11. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 7. Часть 5

Барон нарушает правила

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

Древесный маг Орловского княжества 6

Павлов Игорь Васильевич
6. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 6

Лейб-хирург

Дроздов Анатолий Федорович
2. Зауряд-врач
Фантастика:
альтернативная история
7.34
рейтинг книги
Лейб-хирург

Мастер порталов

Лисина Александра
8. Гибрид
Фантастика:
боевая фантастика
попаданцы
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Мастер порталов