title | slug | l10n | ||
---|---|---|---|---|
CSSStyleSheet: insertRule() メソッド |
Web/API/CSSStyleSheet/insertRule |
|
{{APIRef("CSSOM")}}
CSSStyleSheet.insertRule() メソッドは、新しい CSS ルールを現在のスタイルシートに挿入します。
メモ:
insertRule()
は {{domxref("CSSStyleSheet")}} 専用のメソッドですが、実際にはルールを{{domxref("CSSStyleSheet", "", "", "1")}}.cssRules
に、内部的には {{domxref("CSSRuleList")}} に挿入します。
insertRule(rule)
insertRule(rule, index)
-
rule
-
index
{{optional_inline}}- :
stylesheet.cssRules.length
以下の正の数で、{{domxref("CSSStyleSheet", "", "", "1")}}.cssRules
の中で新しく挿入されるルールの位置を示します。既定値は0
です。(古い実装では、これは必須でした。詳しくはブラウザーの互換性を参照してください。)
- :
スタイルシートのルールリスト内の、新たに挿入されたルールの位置です。
IndexSizeError
{{domxref("DOMException")}}- :
index
>{{domxref("CSSRuleList", "", "", "1")}}.length
の場合に発生します。
- :
HierarchyRequestError
{{domxref("DOMException")}}- : CSS の制約上、
rule
がindex
0
に挿入できない場合に発生します。
- : CSS の制約上、
SyntaxError
{{domxref("DOMException")}}- :
rule
引数に 2 つ以上のルールが与えられた場合に発生します。
- :
HierarchyRequestError
{{domxref("DOMException")}}- : スタイルルールの後に {{cssxref("@import")}} アットルールを挿入しようとした場合に発生します。
InvalidStateError
{{domxref("DOMException")}}- :
rule
が {{cssxref("@namespace")}} であり、ルールリストに@import
アットルールや@namespace
アットルール以外のものがあった場合に発生します。
- :
このスニペットは、新しいルールをスタイルシートの先頭に追加します。
myStyle.insertRule("#blanc { color: white }", 0);
/**
* Add a stylesheet rule to the document (it may be better practice
* to dynamically change classes, so style information can be kept in
* genuine stylesheets and avoid adding extra elements to the DOM).
* Note that an array is needed for declarations and rules since ECMAScript does
* not guarantee a predictable object iteration order, and since CSS is
* order-dependent.
* @param {Array} rules Accepts an array of JSON-encoded declarations
* @example
addStylesheetRules([
['h2', // Also accepts a second argument as an array of arrays instead
['color', 'red'],
['background-color', 'green', true] // 'true' for !important rules
],
['.myClass',
['background-color', 'yellow']
]
]);
*/
function addStylesheetRules(rules) {
const styleEl = document.createElement("style");
// Append <style> element to <head>
document.head.appendChild(styleEl);
// Grab style element's sheet
const styleSheet = styleEl.sheet;
for (let i = 0; i < rules.length; i++) {
let j = 1,
rule = rules[i],
selector = rule[0],
propStr = "";
// If the second argument of a rule is an array of arrays, correct our variables.
if (Array.isArray(rule[1][0])) {
rule = rule[1];
j = 0;
}
for (let pl = rule.length; j < pl; j++) {
const prop = rule[j];
propStr += `${prop[0]}: ${prop[1]}${prop[2] ? " !important" : ""};\n`;
}
// Insert CSS Rule
styleSheet.insertRule(
`${selector}{${propStr}}`,
styleSheet.cssRules.length,
);
}
}
{{Specifications}}
{{Compat}}
- {{domxref("CSSStyleSheet.deleteRule")}}
- Constructable Stylesheets (web.dev)