2017-06-25 8 views
1

私はユーザーに、別のCSSファイルを追加することによって提供される「明るい」テーマ(デフォルト)と「暗い」テーマを選択できるようにします。JSにCSSリンクタグを挿入するときにページのレンダリングを防止する

ここにJavaScriptコードがあります。ご覧のように、私は将来、追加のテーマを提供しようとしました。

var themes = { 
    "dark": "HTML/css/dark-theme.css" 
}; 

var themeCssLink = document.createElement('link'); 
themeCssLink.setAttribute('rel', 'stylesheet'); 
document.getElementsByTagName('head')[0].appendChild(themeCssLink); 

var theme = localStorage.getItem('theme'); 
if (!(theme in themes)) 
    theme = null; 
if (theme !== null) 
    themeCssLink.setAttribute('href', themes[theme]) 

これに伴う問題は、ページは、私がないようにする方法を知りたいのですが、明るい白のフラッシュを引き起こし、暗いテーマのCSSがロードされる前にレンダリングすることです。

<link href='' rel='stylesheet' type='text/css' id='theme-css'> 

してからちょうどJavaScriptでのhrefを変更する:

私が試したもう一つは、HTML内のダミーLINK要素を入れていた

var themeCssLink = document.getElementById('theme-css'); 
var theme = localStorage.getItem('theme'); 
if (!(theme in themes)) 
    theme = null; 
if (theme !== null) 
    themeCssLink.setAttribute('href', themes[theme]); 

残念ながら、これは同じ効果があります。

テーマCSSファイルが読み込まれるまでブラウザでレンダリングをブロックするにはどうすればよいですか?

+0

インクルードの順番は?したがって、JavaScriptにページに含まれるのはいつですか?レンダリングは、javascriptに遭遇すると停止するはずです。そのため、時々ボディの最後にインクルードを入れることを推奨しました。 – puelo

+0

新しいCSSファイルを追加する前に、現在のCSSファイルを無効にしている可能性がありますか?少し古いが、いくつかのアイデア:https://stackoverflow.com/questions/3182840/removing-or-replacing-a-stylesheet-a-link-with-javascript-jquery – wazz

答えて

0

あなたのCSSの前にjavascriptスクリプトを置くだけで、メインCSSの前にテーマが読み込まれます。

これを行うと、前に読み込まれたテーマcssを上書きしないように、main.cssを気にする必要があります。

関連する問題