Работа с каскадными таблицами стилей

Доступ к каскадным таблицам стилей в сценариях осуществляется через специальные объекты:

Несмотря на то, что <style> содержит строки правил таблицы стилей, объект элемента стиля не предназначен для получения доступа к отдельным правилам. Для этого служит объект styleSheet, являющейся элементом коллекции докемента styleSheets. С помощью этого объекта можно подключить или отключить всю таблицу, получить доступ к отдельным правилам, добавить или удалить правила. Доступ к отдельным правилам производится посредством подобъектов rules и cssRules, являющиихся коллекциями правил. Указанные выше коллекции представляют собой массивы и, следовательно, к их элементам можно обращаться с помощью индексов.

Для получения доступа к конкретному правилу можно воспользоваться одним из следующих выражений:

document.styleSheets[i].rules[j] //IE4+

document.styleSheets[i].cssRules[j] //для IE5+, NN6+

Каждому тегу <style> можно задать атрибут ID, чтобы вместо styleSheets использовать обращение идентификатора. Объект элемента стиля обладает логическим свойством disabled. Значение true этого свойства деактивирует(отключает) таблицу стилей, а значение false – активирует (подключает).

Рассмотрим пример.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Работа с каскадными таблицами стилей</title>
<style id="mystyle">
h1 {font-size: 36px; color:#FF3300}
p { font-family:"Times New Roman", Times, serif;color:#0000FF}
</style>

</head>

<body>
<h1>Работа с каскадными таблицами стилей</h1>
<p>С помощью этого объекта можно подключить или отключить всю таблицу, получить доступ к отдельным правилам, добавить или удалить правила. </p>
<button onClick="document.all.mystyle.disabled=true">
Отключить стиль
</button>&nbsp;&nbsp;&nbsp;
<button onClick="document.all.mystyle.disabled=false">
Подключить стиль
</button>
</body>
</html>

   

В окне веб-браузера это будет выглядеть ТАК.

Объект style(не путать с объектом элемента стиля) является основным. Он определен для любого HTML-элемента и обычно применяется для изменения стилевых параметров элементов документа. Для этого можно использовать следующий синтаксис:

document. all.id_элемента.style.параметр = значение

Например:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Работа с каскадными таблицами стилей</title>
<style id="mystyle">
h1 {font-size: 36px; color:#FF3300}
p { font-family:"Times New Roman", Times, serif;color:#0000FF}
</style>

</head>
<body>
<h1 id="myh">Работа с каскадными таблицами стилей</h1>
<p id="myp">С помощью этого объекта можно подключить или отключить всю таблицу, получить доступ к отдельным правилам, добавить или удалить правила. </p>
<button onClick="document.all.mystyle.disabled=true">
Отключить стиль
</button>&nbsp;&nbsp;&nbsp;
<button id="mybut"onClick="document.all.mystyle.disabled=false">
Подключить стиль
</button>
<script language="JavaScript">
document.all.myh.style.color="green"
document.all.myp.style.color="red"
document.all.mybut.style.color="green"
</script>

</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Кроме того, что объект style является свойством объектов, представляющих HTML-элементы документа, он еще является и свойством объектов rules и cssRules. Поэтому к конкретному стилевому параметру элемента документа, находящемуся под действием определенного правила таблицы стилей, можно обратиться и так:

document.styleSheets[i].rules[j].style.color = "green"  //IE4+

document.styleSheets[i].cssRules[j].style.color = "green //для IE5+, NN6+

Рассмотрим пример.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Работа с каскадными таблицами стилей</title>
<style id="mystyle">
h1 {font-size: 36px; color:red}
p { font-family:"Times New Roman", Times, serif;color:blue}
</style>

</head>
<body>
<h1 id="myh">Работа с каскадными таблицами стилей</h1>
<p id="myp">С помощью этого объекта можно подключить или отключить всю таблицу, получить доступ к отдельным правилам, добавить или удалить правила. </p>
<button onClick="document.all.mystyle.disabled=true">
Отключить стиль
</button>&nbsp;&nbsp;&nbsp;
<button id="mybut"onClick="document.all.mystyle.disabled=false">
Подключить стиль
</button>
<script language="JavaScript">
a=document.styleSheets[0].rules[0].style.color
a1=document.styleSheets[0].rules[1].style.color
alert("Цвет в первом правиле: "+a+"\n Цвет во втором правиле: " +a1)
document.write("<br>"+"<br>"+"Цвет в первом правиле: "+a+ "<br>"+" Цвет во втором правиле: " +a1)

</script>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Таблицы стилей, вставленные в HTML-докуменент посредством тега <style>, могут быть импортированы из внешних css-файлов с помощью оператора @import. В этих случаях для доступа к конкретному правилу импортированной таблицы используют такое выражение:

document.styleSheets[i].imports[k].rules[j]

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

Рассмотрим пример.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Использование стилевого параметра без таблицы стилей</title>
</head>
<body>
<h1 id="myh">Работа с каскадными таблицами стилей</h1>
<script language="JavaScript">
document.all.myh.style.color="red"
</script>

</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

В этом HTML-коде таблица стилей нигде не определена, хотя сценарий устанавливает красный цвет для стилевого параметра color заголовка h1.

Если таблица стилей для элемента документа не определена, то в объекте style для этого элемента все свойства имеют пустые значения, а не значения стилевых параметров, принятых по умолчанию.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Установка шрифта</title>
</head>
<body>
<h1 id="myh">Работа с каскадными таблицами стилей</h1>
<script language="JavaScript">
a=document.all.myh.style.fontSize
//пустая строка
document.all.myh.style.fontSize=a+10
alert(document.all.myh.style.fontSize )
//10рх
</script>

</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

В приведенном примере размер шрифта заголовка не увеличился на 10рх, а установлен равным 10рх.

Значения стилевых параметров(свойства объекта style) являются строковыми. Поэтому при их задании следует использовать кавычки. Выражение

document.all.myh.style.color=red

приведет к ошибке. Для параметров, связанных с размерами и координатами(width, heigth, top, left, fontSize и т.д.), значения можно задавать в виде чисел без кавычек. Вместе с тем этим параметрам будут присвоены соответствующие строковые значения с указанием рх(пикселы) как единицы измерения. Это обстоятельство нужно иметь в виду особенно при использовании арифметических выражений для вычисления значений.

В следующем примере используется функция parseInt() для преобразования строки "10рх" в целое число 10. Это необходимо для корректности арифметической операции.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Использование арифметического выражения для вычисления значений</title>
</head>
<body>
<h1 id="myh">Работа с каскадными таблицами стилей</h1>
<script language="JavaScript">
a=document.all.myh.style.fontSize =10
//10
a1=document.all.myh.style.fontSize=
parseInt(document.all.myh.style.fontSize)+10
//20
alert(a+"\n"+a1)
</script>

</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Если потребуется задать размер шрифта не в пикселах, а пунктах (pt), то HTML-код будет такой:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Установка размера шрифта в пунктах</title>
</head>
<body>
<h1 id="myh">Работа с каскадными таблицами стилей</h1>
<script language="JavaScript">
a=document.all.myh.style.fontSize ="10pt
//10pt
a1=document.all.myh.style.fontSize= String(parseInt(document.all.myh.style.fontSize)+10 )+"pt"
//20pt
alert(a+"\n"+a1)
</script>

</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Если таблица стилей вставлена в документ с помощью тега <style> или <link> и задает параметры для некоторого HTML-элемента, то даже в этом случае, используя объект style, не удастся прочитать значения стилевых параметров.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Попытка чтения стилевых параметров</title>
<style>
h1{color:red}
</style>

</head>
<body>
<h1 id="myh">Работа с каскадными таблицами стилей</h1>
<script language="JavaScript">
a= document.all.myh.style.color
//выводится пустая строка
alert(a)
</script>

</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Если таблица стилей задана как значение атрибута STYLE, то с помощью объекта style можно прочитать значения определенных стилевых параметров.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Попытка чтения стилевых параметров</title>
</head>
<body>
<h1 id="myh" style="color:red">Работа с каскадными таблицами стилей</h1>
<script language="JavaScript">
a= document.all.myh.style.color
//выводится строка red
alert(a)
</script>

</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Чтобы прочитать значение стилевых параметров, заданных в таблицах с помощью тега <style> или <link>, не используя styleSheets и rules, в браузере IE5+ можно применять объект currentStyle(текущий стиль). Этот объект доступен только для чтения, т.е. с его помощью нельзя изменить значения стилевых параметров. Он возвращает таблицу стилей, примененную к HTML-документу.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Использование объекта currentStyle</title>
<style>
h1{color:red}
</style>

</head>
<body>
<h1 id="myh" >Работа с каскадными таблицами стилей</h1>
<script language="JavaScript">
a= document.all.myh.currentStyle.color
//выводится строка red
alert(a)
</script>

</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Для браузера IE5.5+ имеется еще один объект runtimeStyle(стиль времени исполнения), который позволяет отменить любое свойство стиля, заданное с помощью атрибута STYLE. Новое значение свойства стиля отразится на внешнем виде элемента, но при этом не изменится значение этого же параметра в таблице стилей.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Использование объекта runtimeStyle</title>
</head>
<body>
<h1 id="myh" style="color:red">Работа с каскадными таблицами стилей</h1>
<script language="JavaScript">
a= document.all.myh.currentStyle.color //выводится строка red
alert(a)
a1=document.all.myh.runtimeStyle.color="blue"
//выводится строка blue
alert(a1)
a2=document.all.myh.currentStyle.color
//выводится строка blue
alert(a2)
a3=document.all.myh.style.color
//выводится строка red
alert(a3)
</script>

</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Внимание! Свойства соответствующие стилевым параметрам, в сценариях записываются не так, как в правилах каскадных таблиц стилей. Названия свойств, как и имена переменных, в сценариях не должны содержать дефисов, широко используемых в таблицах стилей. Поэтому названия стилевых параметров в сценариях образуются из имен соответствующих параметров таблиц стилей путем перезаписи последних в стиле inerCap. Это означает, что составных именах опускаются дефисы, а второе и последующие слова записываются с прописной буквы.

Соответствие между именами параметров CSS и в сценариях

Имя параметра в таблице стилей Свойство стиля
width width
height heigth
z-index zIndex
font-size fontSize
border-color borderColor
border-top-color borderTopColor
list-style-image listStyleImage



  • Другие |
назадвверхвперед
Rambler's Top100