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

<b>// Значение factor &gt; 1 осветляет цвет элемента, a factor &lt; 1 затемняет его.</b>

<b>function scaleColor(e, factor) {</b>

<b>  var color = window.getComputedStyle(e, &quot;&quot;).backgroundColor; // Получить </b>

<b>  var components = color.match(/[\d\.]+/g); // Выбрать компоненты r.g.b и a</b>

<b>  for(var і = 0; і &lt; 3; i++) { // Цикл по r, g и b</b>

<b>    var х = Number(components[i]) * factor;// Умножить каждый из них </b>

<b>    х = Math.round(Math.min(Math.max(x, 0). 255)); // Округлить и установить границы </b>

<b>    components[i] = String(x);</b>

<b>  }</b>

<b>  if (components.length == 3) // Цвет rgb()</b>

<b>    e.style.backgroundColor = &quot;rgb(&quot; + components.join() + &quot;)&quot;;</b>

<b>  else // Цвет rgba()</b>

<b>    e. style. backgroundColor = ''rgba(&quot; + components. join() + ')&quot;:</b>

<b>}</b>

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

<b>font-family</b>
: оно принимает список разделенных запятыми имен семейств шрифтов для совместимости. При чтении свойства
<b>fontFamily</b>
вычисленного стиля вы ждете значение наиболее конкретного стиля
<b>font-fami</b>
ly, применяемого к элементу. А в этом случае может вернуться такое значение, как «arial,helvetica,sans-serif», которое ничего не говорит о гарнитуре фактически используемого шрифта. Аналогично, если элемент не является абсолютно позиционируемым, при попытке определить его размеры или положение через свойства
<b>top</b>
и
<b>left</b>
вычисленного стиля часто возвращается значение «auto». Это вполне допустимое в CSS значение, но наверняка совсем не то, что вы ожидали бы получить.

Метод

<b>getComputedStyle()</b>
не поддерживается в IE8 и в более ранних версиях, но, как ожидается, он будет реализован в IE9. В IE все HTML-элементы имеют свойство
<b>currentStyle</b>
, значением которого является объект
<b>CSSStyleDeclaration</b>
. Свойство
<b>currentStyle</b>
в IE объединяет встроенные стили с таблицами стилей, но оно не является по-настоящему вычисленным стилем, потому что не преобразует относительные значения в абсолютные. При чтении свойств текущего стиля в IE могут возвращаться размеры в относительных единицах измерения, таких как «%» или «еm», а цвета в виде неточных названий, таких как «red».

Стили CSS можно использовать, чтобы точно задать позицию и размер элемента документа, но чтение вычисленного стиля элемента является не самым лучшим способом узнать его размер и положение в документе. Более простые, переносимые решения приводятся в разделе 15.8.2.

16.5. CSS-классы

Альтернативой использованию отдельных CSS-стилей через свойство

<b>style</b>
является управление значением HTML-атрибута class. Изменение класса элемента изменяет набор селекторов стилей, применяемых к элементу, что может приводить к изменениям значений сразу нескольких CSS-свойств. Предположим, например, что вам требуется привлечь внимание пользователя к отдельным абзацам (или другим элементам) в документе. В этом случае можно было бы сначала определить особый стиль оформления для любых элементов с классом «attention»:

<b>.attention { /* Стили для элементов, требующих внимания пользователя */</b>

<b>  background-color: yellow; /* Желтый фон */</b>

<b>  font-weight: bold; /* Полужирный шрифт */</b>

<b>  border: solid black 2рх; /* Черная рамка */</b>

<b>}</b>

Идентификатор

<b>class</b>
в языке JavaScript является зарезервированным словом, поэтому HTML-атрибут
<b>class</b>
в JavaScript-сценариях доступен в виде свойства с именем
<b>className</b>
. Ниже приводится пример, который устанавливает и очищает свойство
<b>className</b>
элемента, добавляя и убирая класс «attention»:

<b>function grabAttention(e) { е.className = &quot;attention&quot;; }</b>

<b>function releaseAttention(e) { e.className = &quot;&quot;; }</b>

HTML-элементы могут быть членами более чем одного CSS-класса - атрибут

<b>class</b>
может содержать целый список имен классов, разделенных пробелами. Имя
<b>className</b>
не совсем точно отражает смысл свойства: правильнее было бы дать ему имя
<b>classNames</b>
. Функции выше предполагают, что свойство
<b>className</b>
будет определять ноль или одно имя класса, и они непригодны в случаях, когда может использоваться более одного имени класса. Если элемент уже принадлежит некоторому классу, вызов функции
<b>grabAttention()</b>
для этого элемента затрет имя класса, присутствующее в свойстве
<b>className</b>
.

Стандарт HTML5 решает эту проблему, определяя свойство

<b>classList</b>
во всех элементах. Значением этого свойства является объект
<b>DOMTokenList</b>
: подобный массиву объект (раздел 7.11), доступный только для чтения, элементы которого содержат отдельные имена классов, присвоенных элементу. Однако самыми важными в нем являются не элементы массива, а методы
<b>add()</b>
и
<b>remove(),</b>
добавляющие и удаляющие отдельные имена классов из атрибута class элемента. Метод
<b>toggle()</b>
добавляет имя класса, если оно отсутствует, и удаляет в противном случае. Наконец, метод
<b>contains()</b>
проверяет присутствие указанного имени класса в атрибуте class.