スタイル宣言について(CSSStyleDeclaration)
スタイル宣言について
■スタイル宣言について
スタイル宣言は、スタイルシートの宣言ブロックの1つ分に相当します。
宣言ブロックは、"{" から "}" までの間です。
CSSStyleDeclaration は、宣言ブロック1つ分に相当する
.test1 {
color: #f22;
background: #fcc;
width: 400px;
height: 300px;
}
.test2 {
font-size: 14px;
line-height: 1.4em;
}
■CSSStyleDeclaration インターフェースについて
スタイルを管理するための機能がまとまっています。
このページでは、CSSStyleDeclaration インターフェースで供給される機能について解説しています。
■エレメントのインラインスタイルについて
エレメントは、スタイル属性(インラインスタイル)を保有しています。
スタイル属性を使用すると、エレメントごとに、個別にスタイルを設定することができます。
エレメントのスタイル属性
<div style="color: #f22; background-color: #fcc; width: 400px; height: 300px;">
あいうえお
</div>
■エレメントから CSSStyleDeclaration オブジェクトを取得する
エレメントから、CSSStyleDeclaration オブジェクトを取得するには、style プロパティを使用します。
このオブジェクトは、スタイル属性に相当します。
エレメントから、CSSStyleDeclaration オブジェクトを取得する
<html>
<body>
<div id="aaa" style="color: #f22; background-color: #fcc; width: 400px; height: 300px;"></div>
<script type="text/javascript">
<!--
// "aaa" という ID 属性のエレメントを取得する
var element = document.getElementById("aaa");
// CSSStyleDeclaration オブジェクトを取得
var style = element.style;
// 出力テスト
console.log(style);
//-->
</script>
</body>
</html>
■スタイルシート内のスタイル宣言について
スタイルシートが保有している、スタイル宣言にアクセスする事ができます。
スタイルシートについては、こちらで解説しています。
ドキュメント内のすべてのスタイルシートから、スタイル宣言を取得する
<html>
<head>
<style type="text/css">
<!--
#aaa { color: #822; font-size: 32px; }
-->
</style>
<style type="text/css">
<!--
.bbb { border: 10px #4c4 solid; }
[name="ccc"] { width:400px; height:300px; }
-->
</style>
</head>
<body>
<script type="text/javascript">
<!--
// --------------------------------------------------------------------------------
// スタイルシートから CSSRuleList オブジェクトを取得する関数
// --------------------------------------------------------------------------------
function CSSStyleSheetGetCSSRuleList(style_sheet){
try{
if(style_sheet.cssRules !== undefined){
return style_sheet.cssRules;
}else if(style_sheet.rules !== undefined){
return style_sheet.rules;
}
}catch(e){
}
return null;
}
// ------------------------------------------------------------
// スタイルシートを取得する
// ------------------------------------------------------------
// CSSStyleSheetList オブジェクトを取得する
var sheet_list = document.styleSheets;
// スタイルシートの総数を取得
var style_sheet_num = sheet_list.length;
var i;
for(i=0;i < style_sheet_num;i++){
// CSSStyleSheet オブジェクトを取得する
var style_sheet = sheet_list[i];
// ------------------------------------------------------------
// スタイルルールを取得する
// ------------------------------------------------------------
var rule_list = CSSStyleSheetGetCSSRuleList(style_sheet);
if(rule_list){
// スタイルルールの総数を取得
var rule_num = rule_list.length;
var j;
for(j=0;j < rule_num;j++){
// CSSStyleRule オブジェクトを取得する
var style_rule = rule_list[j];
// CSSStyleDeclaration オブジェクトを取得
var style = style_rule.style;
// 出力テスト
console.log(style);
}
}
}
//-->
</script>
</body>
</html>
■CSS2Properties インターフェースについて
プロパティを使って、スタイルにアクセスする事ができます。
CSSStyleDeclaration であれば、CSS2Properties インターフェースが実装されています。
■プロパティ名の規則について
「CSS プロパティ名」を、そのまま「プロパティ名」として使うことはできません。
以下のような規則があるようです。
『ハイフン "-"』の次の1字は、大文字となります。それ以外はすべて小文字となります。
『ハイフン "-"』を省略します。
■CSS2Properties のプロパティ名の一覧(一部抜粋)
CSS プロパティ | プロパティ名 |
azimuth | azimuth |
background | background |
background-attachment | backgroundAttachment |
background-color | backgroundColor |
background-image | backgroundImage |
background-position | backgroundPosition |
background-repeat | backgroundRepeat |
border | border |
border-collapse | borderCollapse |
border-color | borderColor |
border-spacing | borderSpacing |
border-style | borderStyle |
border-top | borderTop |
border-right | borderRight |
border-bottom | borderBottom |
border-left | borderLeft |
border-top-color | borderTopColor |
border-right-color | borderRightColor |
border-bottom-color | borderBottomColor |
border-left-color | borderLeftColor |
border-top-style | borderTopStyle |
border-right-style | borderRightStyle |
border-bottom-style | borderBottomStyle |
border-left-style | borderLeftStyle |
border-top-width | borderTopWidth |
border-right-width | borderRightWidth |
border-bottom-width | borderBottomWidth |
border-left-width | borderLeftWidth |
border-width | borderWidth |
bottom | bottom |
caption-side | captionSide |
clear | clear |
clip | clip |
color | color |
content | content |
counter-increment | counterIncrement |
counter-reset | counterReset |
cue | cue |
cue-after | cueAfter |
cue-before | cueBefore |
cursor | cursor |
direction | direction |
display | display |
elevation | elevation |
empty-cells | emptyCells |
float | cssFloat (標準仕様) float (非標準、IE8以前専用) |
font | font |
font-family | fontFamily |
font-size | fontSize |
font-size-adjust | fontSizeAdjust |
font-stretch | fontStretch |
font-style | fontStyle |
font-variant | fontVariant |
font-weight | fontWeight |
height | height |
left | left |
letter-spacing | letterSpacing |
line-height | lineHeight |
list-style | listStyle |
list-style-image | listStyleImage |
list-style-position | listStylePosition |
list-style-type | listStyleType |
margin | margin |
margin-top | marginTop |
margin-right | marginRight |
margin-bottom | marginBottom |
margin-left | marginLeft |
marker-offset | markerOffset |
marks | marks |
max-height | maxHeight |
max-width | maxWidth |
min-height | minHeight |
min-width | minWidth |
orphans | orphans |
outline | outline |
outline-color | outlineColor |
outline-style | outlineStyle |
outline-width | outlineWidth |
overflow | overflow |
padding | padding |
padding-top | paddingTop |
padding-right | paddingRight |
padding-bottom | paddingBottom |
padding-left | paddingLeft |
page | page |
page-break-after | pageBreakAfter |
page-break-before | pageBreakBefore |
page-break-inside | pageBreakInside |
pause | pause |
pause-after | pauseAfter |
pause-before | pauseBefore |
pitch | pitch |
pitch-range | pitchRange |
play-during | playDuring |
position | position |
quotes | quotes |
richness | richness |
right | right |
size | size |
speak | speak |
speak-header | speakHeader |
speak-numeral | speakNumeral |
speak-punctuation | speakPunctuation |
speech-rate | speechRate |
stress | stress |
table-layout | tableLayout |
text-align | textAlign |
text-decoration | textDecoration |
text-indent | textIndent |
text-shadow | textShadow |
text-transform | textTransform |
top | top |
unicode-bidi | unicodeBidi |
vertical-align | verticalAlign |
visibility | visibility |
voice-family | voiceFamily |
volume | volume |
white-space | whiteSpace |
widows | widows |
width | width |
word-spacing | wordSpacing |
z-index | zIndex |
■アクセス例
プロパティを使って、スタイルにアクセスする
<html>
<body>
<div id="aaa" style="color: #f22; font-size :14px; border: 10px #c44 solid; width: 400px; height: 300px;"></div>
<script type="text/javascript">
<!--
// ------------------------------------------------------------
// "aaa" という ID 属性のエレメントを取得する
// ------------------------------------------------------------
var element = document.getElementById("aaa");
// ------------------------------------------------------------
// CSSStyleDeclaration オブジェクトを取得
// ------------------------------------------------------------
var style = element.style;
// ------------------------------------------------------------
// スタイルを設定する
// ------------------------------------------------------------
style.borderColor = "#44c";
style.backgroundColor = "#ccf";
style.margin = "20px";
// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
console.log(style.color);
console.log(style.fontSize);
console.log(style.borderTop);
console.log(style.borderBottomColor);
console.log(style.borderLeftWidth);
console.log(style.borderRightStyle);
console.log(style.backgroundColor);
console.log(style.width);
console.log(style.height);
//-->
</script>
</body>
</html>
スタイルを追加する
■プロパティを使ってスタイルを追加する
プロパティを使って、スタイルを追加することができます。
プロパティ名の規則については、こちらで解説しています。
プロパティを使って、エレメントにスタイルを設定する
// エレメントを作成する
var element = document.createElement("div");
// BODY のノードリストに登録する
document.body.appendChild(element);
// CSSStyleDeclaration オブジェクトを取得
var style = element.style;
// スタイルを設定する
style.color = "#282";
style.fontSize = "32px";
style.border = "10px #4c4 solid";
style.backgroundColor = "#cfc";
style.width = "400px";
style.height = "300px";
■配列アクセス演算子を使ってスタイルを追加する
この方法は、非標準です。
CSS プロパティ名を使って、スタイルを追加することができます。
Internet Explorer 6 以前では、動作しません。
Firefox 34 以前では動作しません。
Opera(Presto 版) では、動作しません。
配列アクセス演算子を使って、エレメントにスタイルを設定する
// エレメントを作成する
var element = document.createElement("div");
// BODY のノードリストに登録する
document.body.appendChild(element);
// CSSStyleDeclaration オブジェクトを取得
var style = element.style;
// スタイルを設定する
style["color"] = "#282";
style["font-size"] = "32px";
style["border"] = "10px #4c4 solid";
style["background-color"] = "#cfc";
style["width"] = "400px";
style["height"] = "300px";
■メソッドを使ってスタイルを追加する
スタイルを追加するには、setProperty() メソッドを使用します。
CSSStyleDeclaration.setProperty( "CSSプロパティ名" , "値" , "優先度名" ) :Void
第01引数 | String | CSS プロパティ名を指定する |
第02引数 | String | 値を指定する |
第03引数(略可) | String | 優先度名を指定する。例えば "important"。 |
戻り値 | Void | なし |
■ InternetExplorer 8 以前の場合
setProperty() メソッドは、InternetExplorer 8 以前では未対応です。
かわりに、プロパティからアクセスします。
スタイルを追加する関数
// --------------------------------------------------------------------------------
// スタイルを追加する関数
// --------------------------------------------------------------------------------
function CSSStyleDeclarationSetProperty(style,property_name,value){
if(style.setProperty !== undefined){
style.setProperty(property_name,value);
}else{
style[property_name.replace(/([a-z]+)-([a-z])/g , function (str,p1,p2){ return p1 + p2.toUpperCase(); })] = value;
}
}
■設定例
メソッドを使って、エレメントにスタイルを設定する
// --------------------------------------------------------------------------------
// スタイルを追加する関数
// --------------------------------------------------------------------------------
function CSSStyleDeclarationSetProperty(style,property_name,value){
if(style.setProperty !== undefined){
style.setProperty(property_name,value);
}else{
style[property_name.replace(/([a-z]+)-([a-z])/g , function (str,p1,p2){ return p1 + p2.toUpperCase(); })] = value;
}
}
// --------------------------------------------------------------------------------
// エレメントを作成
// --------------------------------------------------------------------------------
// エレメントを作成する
var element = document.createElement("div");
// BODY のノードリストに登録する
document.body.appendChild(element);
// --------------------------------------------------------------------------------
// CSSStyleDeclaration オブジェクトを取得
// --------------------------------------------------------------------------------
var style = element.style;
// --------------------------------------------------------------------------------
// スタイルを設定する
// --------------------------------------------------------------------------------
CSSStyleDeclarationSetProperty(style,"color", "#282");
CSSStyleDeclarationSetProperty(style,"font-size", "32px");
CSSStyleDeclarationSetProperty(style,"border", "10px #4c4 solid");
CSSStyleDeclarationSetProperty(style,"background-color", "#cfc");
CSSStyleDeclarationSetProperty(style,"width", "400px");
CSSStyleDeclarationSetProperty(style,"height", "300px");
スタイルを取得する
■プロパティを使ってスタイルの値を取得する
プロパティを使って、スタイルの値を取得することができます。
プロパティ名の規則については、こちらで解説しています。
エレメントのスタイルの値を取得する
<html>
<body>
<div id="aaa" style="color: #282; font-size: 32px; border: 10px #4c4 solid; background-color: #cfc; width: 400px; height: 300px;"></div>
<script type="text/javascript">
<!--
// "aaa" という ID 属性のエレメントを取得する
var element = document.getElementById("aaa");
// CSSStyleDeclaration オブジェクトを取得
var style = element.style;
// 出力テスト
console.log(style.color);
console.log(style.fontSize);
console.log(style.border);
console.log(style.backgroundColor);
console.log(style.width);
console.log(style.height);
//-->
</script>
</body>
</html>
■配列アクセス演算子を使ってスタイルの値を取得する
この方法は、非標準です。
CSS プロパティ名を使って、スタイルの値を取得することができます。
Internet Explorer 6 以前では、動作しません。
Firefox 34 以前では動作しません。
Opera(Presto 版) では、動作しません。
配列アクセス演算子を使って、エレメントのスタイルの値を取得する
<html>
<body>
<div id="aaa" style="color: #282; font-size: 32px; border: 10px #4c4 solid; background-color: #cfc; width: 400px; height: 300px;"></div>
<script type="text/javascript">
<!--
// "aaa" という ID 属性のエレメントを取得する
var element = document.getElementById("aaa");
// CSSStyleDeclaration オブジェクトを取得
var style = element.style;
// 出力テスト
console.log(style["color"]);
console.log(style["font-size"]);
console.log(style["border"]);
console.log(style["background-color"]);
console.log(style["width"]);
console.log(style["height"]);
//-->
</script>
</body>
</html>
■メソッドを使ってスタイルの値を取得する
スタイルの値を取得するには、getPropertyValue() メソッドを使用します。
CSSStyleDeclaration.getPropertyValue( "CSSプロパティ名" ) :String
第01引数 | String | CSS プロパティ名を指定する |
戻り値 | String | スタイルの値が得られる。CSS プロパティが存在しない場合は null が得られる。 |
■ InternetExplorer 8 以前の場合
getPropertyValue() メソッドは、InternetExplorer 8 以前では未対応です。
かわりに、プロパティからアクセスします。
スタイルの値を取得する関数
// --------------------------------------------------------------------------------
// スタイルの値を取得する関数
// --------------------------------------------------------------------------------
function CSSStyleDeclarationGetPropertyValue(style,property_name){
if(style.getPropertyValue !== undefined){
return style.getPropertyValue(property_name);
}
return style[property_name.replace(/([a-z]+)-([a-z])/g , function (str,p1,p2){ return p1 + p2.toUpperCase(); })];
}
■取得例
エレメントのスタイルの値を取得する
<html>
<body>
<div id="aaa" style="color: #282; font-size: 32px; border: 10px #4c4 solid; background-color: #cfc; width: 400px; height: 300px;"></div>
<script type="text/javascript">
<!--
// --------------------------------------------------------------------------------
// スタイルの値を取得する関数
// --------------------------------------------------------------------------------
function CSSStyleDeclarationGetPropertyValue(style,property_name){
if(style.getPropertyValue !== undefined){
return style.getPropertyValue(property_name);
}
return style[property_name.replace(/([a-z]+)-([a-z])/g , function (str,p1,p2){ return p1 + p2.toUpperCase(); })];
}
// --------------------------------------------------------------------------------
// "aaa" という ID 属性のエレメントを取得する
// --------------------------------------------------------------------------------
var element = document.getElementById("aaa");
// --------------------------------------------------------------------------------
// CSSStyleDeclaration オブジェクトを取得
// --------------------------------------------------------------------------------
var style = element.style;
// --------------------------------------------------------------------------------
// 出力テスト
// --------------------------------------------------------------------------------
console.log(CSSStyleDeclarationGetPropertyValue(style,"color"));
console.log(CSSStyleDeclarationGetPropertyValue(style,"font-size"));
console.log(CSSStyleDeclarationGetPropertyValue(style,"border"));
console.log(CSSStyleDeclarationGetPropertyValue(style,"background-color"));
console.log(CSSStyleDeclarationGetPropertyValue(style,"width"));
console.log(CSSStyleDeclarationGetPropertyValue(style,"height"));
//-->
</script>
</body>
</html>
■スタイルの優先度を取得する
スタイルの優先度名を取得するには、getPropertyPriority() メソッドを使用します。
このメソッドは、InternetExplorer 8 以前では未対応です。
CSSStyleDeclaration.getPropertyPriority( "CSSプロパティ名" ) :String
第01引数 | String | CSS プロパティ名を指定する |
戻り値 | String | スタイルの優先度名が得られる。CSS プロパティが存在しない場合は null が得られる。 |
■すべてのスタイルを順番に取得する
InternetExplorer 8 以前では未対応です。
CSSStyleDeclaration オブジェクトは、配列のように中身を取り出せます。
中身は、登録済みである、CSS プロパティ名が格納されています。
スタイルの総数を取得するには、length プロパティを使用します。
エレメントのスタイルをすべて取得する
<html>
<body>
<div id="aaa" style="color: #282; font-size: 32px; border: 10px #4c4 solid; background-color: #cfc; width: 400px; height: 300px;"></div>
<script type="text/javascript">
<!--
// ------------------------------------------------------------
// "aaa" という ID 属性のエレメントを取得する
// ------------------------------------------------------------
var element = document.getElementById("aaa");
// ------------------------------------------------------------
// CSSStyleDeclaration オブジェクトを取得
// ------------------------------------------------------------
var style = element.style;
// ------------------------------------------------------------
// 登録されているスタイルをすべて取得する
// ------------------------------------------------------------
var i;
// 登録されているスタイルの総数を取得
var num = style.length;
for(i=0;i < num;i++){
// CSS プロパティ名を取得
var property_name = style[i];
// 値を取得
var value = style.getPropertyValue(property_name);
// 優先度名を取得
var prio = style.getPropertyPriority(property_name);
// 出力テスト
console.log("id:" + i + " name:" + property_name + " value:" + value + " prio:" + prio);
}
//-->
</script>
</body>
</html>
■すべてのスタイルを CSS 文字列として取得する
すべてのスタイルを、1つの CSS 文字列として取得するには、cssText プロパティを使用します。
CSS 文字列を取得する
// エレメントを作成する
var element = document.createElement("div");
// BODY のノードリストに登録する
document.body.appendChild(element);
// CSSStyleDeclaration オブジェクトを取得
var style = element.style;
// スタイルを設定する
style.color = "#282";
style.fontSize = "32px";
style.border = "10px #4c4 solid";
style.backgroundColor = "#cfc";
style.width = "400px";
style.height = "300px";
// CSS 文字列を取得する
console.log(style.cssText);
スタイルを除去する
■スタイルを除去する
スタイルを除去するには、removeProperty()メソッドを使用します。
CSSStyleDeclaration.removeProperty( "CSSプロパティ名" ) :String
第01引数 | String | 除去したい CSS プロパティ名を指定する |
戻り値 | String | 除去したスタイルの値が得られる。CSS プロパティが存在しない場合は null が得られる。 |
■ InternetExplorer 8 以前の場合
removeProperty() メソッドは、InternetExplorer 8 以前では未対応です。
かわりに、removeAttribute() メソッドを使用します。
CSSStyleDeclaration.removeAttribute( "CSSプロパティ名" , 大文字小文字を区別するか? ) :Boolean
第01引数 | String | 除去したい CSS プロパティ名を指定する。IE6 では、プロパティ名の表記にする必要がある。 "margin" のように、まとめてプロパティ名を指定する事はできない。この場合、"marginTop" , "marginBottom" , "marginLeft" , "marginRight" と分けて指定する。 |
第02引数(略可) | Boolean | 大文字小文字を区別したい場合 true を指定。デフォルトは true。 |
戻り値 | Boolean | 成功した場合 true。失敗した場合 false が得られる。 |
スタイルを除去する関数
// --------------------------------------------------------------------------------
// スタイルを除去する関数
// --------------------------------------------------------------------------------
function CSSStyleDeclarationRemoveProperty(style,property_name){
if(style.removeProperty !== undefined){
style.removeProperty(property_name);
}else if(style.removeAttribute !== undefined){
property_name = property_name.replace(/([a-z]+)-([a-z])/g , function (str,p1,p2){ return p1 + p2.toUpperCase(); });
if(!style.removeAttribute(property_name,false)){
var re = new RegExp("^" + property_name + "[A-Z]");
var key;
for(key in style){
if(key.match(re)){
style.removeAttribute(key,false);
}
}
}
}
}
■使用例
エレメントのスタイルを除去する
<html>
<body>
<div id="aaa" style="color: #282; font-size: 32px; border: 10px #4c4 solid; background-color: #cfc; width: 400px; height: 300px;"></div>
<script type="text/javascript">
<!--
// --------------------------------------------------------------------------------
// スタイルを除去する関数
// --------------------------------------------------------------------------------
function CSSStyleDeclarationRemoveProperty(style,property_name){
if(style.removeProperty !== undefined){
style.removeProperty(property_name);
}else if(style.removeAttribute !== undefined){
property_name = property_name.replace(/([a-z]+)-([a-z])/g , function (str,p1,p2){ return p1 + p2.toUpperCase(); });
if(!style.removeAttribute(property_name,false)){
var re = new RegExp("^" + property_name + "[A-Z]");
var key;
for(key in style){
if(key.match(re)){
style.removeAttribute(key,false);
}
}
}
}
}
// --------------------------------------------------------------------------------
// "aaa" という ID 属性のエレメントを取得する
// --------------------------------------------------------------------------------
var element = document.getElementById("aaa");
// --------------------------------------------------------------------------------
// CSSStyleDeclaration オブジェクトを取得
// --------------------------------------------------------------------------------
var style = element.style;
// --------------------------------------------------------------------------------
// スタイルを除去する
// --------------------------------------------------------------------------------
CSSStyleDeclarationRemoveProperty(style,"color");
CSSStyleDeclarationRemoveProperty(style,"font-size");
CSSStyleDeclarationRemoveProperty(style,"border");
CSSStyleDeclarationRemoveProperty(style,"background-color");
CSSStyleDeclarationRemoveProperty(style,"width");
CSSStyleDeclarationRemoveProperty(style,"height");
//-->
</script>
</body>
</html>
CSS 文字列を使ってスタイルを構築する
■CSS 文字列を使ってスタイルを構築する
CSS 文字列を使ってスタイルを構築するには、cssText プロパティを使用します。
このプロパティに書き込みを行うと、登録済みのスタイルはすべてクリアされます。
CSS 文字列を使ってスタイルを構築する
// エレメントを作成する
var element = document.createElement("div");
// BODY のノードリストに登録する
document.body.appendChild(element);
// CSSStyleDeclaration オブジェクトを取得
var style = element.style;
// CSS 文字列を使ってスタイルを構築する
style.cssText = "color: #282; font-size: 32px; border: 10px #4c4 solid; background-color: #cfc; width: 400px; height: 300px;";