knowledge base

マークアップ/フロントエンドエンジニアのWEB制作における備忘録です。平日はWEB屋、休日は社会人劇団の主宰・劇作家をしています。

CSSを動的に追加する

要素を動的に生成し、headの子要素として追加する

head内にCSSを記述するのと同じ結果になります。

jQuerycssメソッドとは異なり、要素そのものにスタイルは直書きされません。

パフォーマンス向上のため、ページ読込み後に意図的に特定のスタイルシートを適用する場合などに使われるようです(個人的には、CSSをいじれないけれどどうしてもスタイルを追加したいときに使っていました)。

考え方はいたってシンプルで、style要素を生成して、headに追加するという方法です。

ポイントは、テキストノードを生成して、styleの子要素として追加する点です(4行目) 。

文字列にメディアクエリを含めても問題なく動作します。

var head = document.getElementsByTagName('head').item(0);
var style = document.createElement('style');
var text = 'body{background-color:#000;} p{color:#fff;}';
var rule = document.createTextNode(text);
style.media = 'screen';
style.type = 'text/css';
style.appendChild(rule);
head.appendChild(style);

外部ファイルを読ませたいならば、同じ要領でlink要素を生成してからhrefプロパティにパスを代入すればよいそうです。

var head = document.getElementsByTagName('head').item(0);
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = '../../hoge.css';
link.type = 'text/css';
head.appendChild(link);