2016-06-24 13 views
4

ブラウザがCSS custom properties(例:color: var(--primary))をサポートしているかどうかを検出する方法はありますか?CSSのカスタムプロパティを検出する方法を教えてください。

カスタムプロパティをサポートしていないブラウザでは少し違った動作をするスクリプトを書く必要がありますが、ドキュメント化されたModernizrテストやカスタムプロパティにアクセスするためのJavascriptインターフェイスに関する情報は見つかりません。

ご意見ありがとうございます。

+0

この質問は非常によく似ているようです。重複に答えるための私のポックス? – BoltClock

+0

ああ、私は重複を検索しましたが、私は "CSS変数"ではなく "カスタムプロパティ"(正式名称、私は信じています)を探していました。 –

+0

ええ、人々がCSS変数と呼んでいます。なぜなら、モジュールは「カスケード変数のカスタムプロパティ」と呼ばれているからです。 – BoltClock

答えて

11

カスタムプロパティのサポートを検出します。 custom propertiesをサポートするすべてのブラウザのすべてのバージョンもthis method of feature detectionをサポートしています。

if (window.CSS && CSS.supports('color', 'var(--primary)')) { 
 
    document.body.innerHTML = 'Supported'; 
 
}
@supports (color: var(--primary)) { 
 
    body { 
 
    background-color: green; 
 
    } 
 
}

これは、プロパティ宣言を解析する目的のために定義every property whose name begins with -- is considered validなどによって、--primaryカスタムプロパティを宣言するためにあなたを必要としないことに注意してください。

+0

どのように素晴らしい素晴らしい! –

+0

呼び出す前にCSS.supportsが定義されているかどうかを確認することができます。 – jcubic

+0

@jcubic:ありがとう、固定。 – BoltClock

1

これは、代替品がないときにこのようなことにアプローチする方法の例として残しておきますが、BoltClock's answerはこの場合の方法です。


1つを定義し、その値がgetComputedStyleに到達するかどうかを確認することができます。例えば、これはSupports custom props? true(カスタムCSSプロパティをサポートしています)クロームではなく(ない)IE11のSupports custom props? falseを示しています

あなたは確実にCSSでJavaScriptで CSS.supports()または @supportsを使用することができます

function areCSSVarsSupported() { 
 
    var d = document.createElement('div'); 
 
    d.id = "test"; 
 
    document.body.appendChild(d); 
 
    var pos = getComputedStyle(d).position; 
 
    document.body.removeChild(d); 
 
    return pos === "fixed"; 
 
} 
 
console.log("Supports custom props? " + areCSSVarsSupported());
:root{ 
 
    --test-vars: fixed; 
 
} 
 

 
#test { 
 
    position: var(--test-vars); 
 
}

関連する問題