DOM Level 2 CSS


概要


DOM 2はスタイルモジュールを導入し,言語に依存しないAPI標準設計を提供した.これらのAPIでは、プログラムとスクリプトがドキュメントのスタイルに動的にアクセスし、変更できます.DOM 2このモジュールはDocument Object Model Level 2 CoreおよびDocument Object Model Level 2 Viewsに依存する.
モジュールには、このブログで共有されているコンテンツとDOM Level 2 Style Sheetsの2つのサブモジュールが含まれています.スタイルシートの抽象インタフェースが定義されています.

きほんインタフェース


CSSStyleDeclaration


CSSStyleDeclarationは、CSSスタイル宣言コードブロックを表します.CSSStyleDeclarationはクラス配列です.このクラス配列の各項目はCSS属性名(e.g.'background-color')である.この配列の値には、下付き文字でアクセスできます.
// Introduced in DOM Level 2:
interface CSSStyleDeclaration {
           attribute DOMString        cssText;
                                        // raises(DOMException) on setting

  DOMString          getPropertyValue(in DOMString propertyName);
  CSSValue           getPropertyCSSValue(in DOMString propertyName);
  DOMString          removeProperty(in DOMString propertyName);
  DOMString          getPropertyPriority(in DOMString propertyName);
  void               setProperty(in DOMString propertyName, 
                                 in DOMString value, 
                                 in DOMString priority);
  readonly attribute unsigned long    length;
  DOMString          item(in unsigned long index);
  readonly attribute CSSRule          parentRule;
};

サンプルコード:
var desc = document.defaultView.getComputedStyle( document.getElementById( 'navbar' ) );
//  273
console.log( desc.length );
//  "background-attachment"
console.log( desc[0] );
//      CSSPrimitiveValue    : {primitiveType: 25, cssValueType: 1, cssText: "rgb(0, 0, 0)", setFloatValue: function, getFloatValue: function…}
desc.getPropertyCSSValue( 'color' );
//  "rgb(0, 0, 0)",      ?        cssText   
desc['color']

CSSStyleSheet


CSSStyleSheetインタフェースはDOM Level 2 Style Sheets定義のStyleSheetインタフェースを拡張した.
insertRule
unsigned long      insertRule(in DOMString rule, in unsigned long index)

スタイルシート・ルール・セットの指定された場所に新しいCSSルールを挿入し、新しく追加されたルールのインデックス番号を返します.
var sheets = document.styleSheets;
var s = sheets[0];
//       CSS  
console.log( s.cssRules );
//      DOM            CSS  
s.insertRule( '#t { color : red; }' );
//       CSS  
console.log( s.cssRules );

deleteRule
void               deleteRule(in unsigned long index)

スタイルシート規則セットからCSS規則を除去する
var sheets = document.styleSheets;
var s = sheets[0];
//       CSS  
console.log( s.cssRules );
//      DOM            CSS  
s.deleteRule( 0 );
//       CSS  
console.log( s.cssRules );

CSSRule


CSSRuleは、すべてのCSSルールオブジェクトの親です.この親は、いくつかのルール・タイプの列挙と、共通の読み取り専用属性を規定します.
interface CSSRule {
    readonly attribute unsigned short   type;
    readonly attribute DOMString        cssText;
    readonly attribute CSSStyleSheet    parentStyleSheet;
    readonly attribute CSSRule          parentRule;
}

RuleType
UNKNOWN_RULE                   = 0
STYLE_RULE                     = 1
CHARSET_RULE                   = 2
IMPORT_RULE                    = 3
MEDIA_RULE                     = 4
FONT_FACE_RULE                 = 5
PAGE_RULE                      = 6

cssText
CSSルールのテキスト表示.
var sheets = document.styleSheets;
var s = sheets[0];
//    CSS   cssText
//  example : h4 { text-align: left; font-family: sans-serif; font-weight: normal; color: rgb(0, 80, 178); }
console.log( s.cssRules[0].cssText );

parentStyleSheet
CSSルールを含むスタイルシートオブジェクトを指します.
var sheets = document.styleSheets;
var s = sheets[0];
//  true
console.log( s.cssRules[0].parentStyleSheet == s );

parentRule
CSSルールが@mediaブロックで定義されたルールなどの埋め込みルールである場合、parentRuleはこのルールを埋め込むCSSルールを指します.
var sheets = document.styleSheets;
//  s URL  http://www.w3.org/StyleSheets/TR/W3C-REC.css
var s = sheets[1];
//  @media
var mediaRule = s.cssRules[6];
var subRule = mediaRule.cssRules[0];
//  true
console.log( subRule.parentRule == mediaRule );

CSSStyleRule

interface CSSStyleRule : CSSRule {
    attribute DOMString        selectorText;
    readonly attribute CSSStyleDeclaration  style;
};

selectorText
CSSセレクタ.
var sheets = document.styleSheets;
//  s URL  http://www.w3.org/StyleSheets/TR/W3C-REC.css
var s = sheets[1];
//  @media
var mediaRule = s.cssRules[6];
var subRule = mediaRule.cssRules[0];
//  "a img"
console.log( subRule.selectorText );

style
読み取り専用プロパティ.このプロパティはCSSStyleDeclarationオブジェクトのインスタンスです.
var sheets = document.styleSheets;
//  s URL  http://www.w3.org/StyleSheets/TR/W3C-REC.css
var s = sheets[1];
//  @media
var mediaRule = s.cssRules[6];
var subRule = mediaRule.cssRules[0];
//  1
console.log( subRule.style.length );
//  "inherit"
console.log( subRule.style.color );
//  "inherit"
console.log( subRule.style['color'] );

Elementインラインスタイル


インラインスタイルは何も言うことはありませんが、簡単に言えばHTMLラベルで指定したスタイル構成です.
var navbar = document.getElementById( 'navbar' );
//  CSSStyleDeclaration    
console.log( navbar.style );

CSSスタイル最終適用結果値


W 3 C規格では、次のように定義されたViewCSSというインタフェースが定義されています.
//  var style = document.defaultView.getComputedStyle("  ", "  ");
//  e.g. var style = document.defaultView.getComputedStyle( document.getElementById("test") , ":after");
interface ViewCSS : views::AbstractView {
    CSSStyleDeclaration getComputedStyle(in Element elt,in DOMString pseudoElt);
};

dom elementオブジェクトのstyleプロパティとは異なり、このgetComputedStyleメソッドは、最終的に要素に適用されるすべてのCSSプロパティオブジェクトを読み込むだけで、要素オブジェクトのスタイルを設定することはできません.styleプロパティは読み書き可能です.
var desc = document.defaultView.getComputedStyle( document.getElementById( 'navbar' ) );
//  273
console.log( desc.length );
//  "background-attachment"
console.log( desc[0] );
//      CSSPrimitiveValue    : {primitiveType: 25, cssValueType: 1, cssText: "rgb(0, 0, 0)", setFloatValue: function, getFloatValue: function…}
desc.getPropertyCSSValue( 'color' );
//  "rgb(0, 0, 0)",      ?        cssText   
desc['color']