この記事では、ブラウザが特定のCSSプロパティをサポートしているかどうかを確認する方法を説明します。
サポートのCSSチェック
長い間、CSSだけでサポートをテストすることはできませんでした。 しかし、2013年、Firefox、Chrome、Operaは@supportsと呼ばれる特別なディレクティブと、それに対応する
CSS.supports()
関数のサポートを「発表」しました。これについては以下で説明します。 このディレクティブを使用すると、指定されたCSSプロパティのサポートについてブラウザーを確認できます。
ディレクティブの一般的なビュー
@supports (property: value) { /* */ }
使用例
ブラウザが
display: flex
プロパティをサポートしている場合、ディレクティブからプロパティを起動します。
@supports (display: flex) { /* */ }
キーワードnot
notキーワードを使用すると、プロパティがサポートされていないことを確認できます。
ブラウザが
display: flex
サポートしていない場合、ディレクティブからプロパティを起動します
@supports not (display: flex) { /* */ }
またはキーワード
キーワードを使用して、次のプロパティの少なくとも1つのサポートを確認できます。
ブラウザが
display: flex
または
display: -webkit-flex
サポートしている場合、ディレクティブからプロパティを起動します
@supports (display: flex) or (display: -webkit-flex) { /* */ }
キーワードと
andキーワードを指定すると、2つ以上のプロパティのブラウザサポートを一度に確認できます。
ブラウザが
display: flex
および
display: -webkit-flex
サポートしている場合、ディレクティブからプロパティを起動します
@supports (display: flex) and (display: -webkit-flex) { /* */ }
複数のチェックと条件
ブラウザが
display: flex
または
display: -webkit-flex
、および
flex-wrap: wrap
サポートしている場合、ディレクティブからプロパティを起動します
@supports ((display: flex) or (display: -webkit-flex)) and (flex-wrap: wrap) { /* */ }
注:@supports
ディレクティブ@supports
かなり新しく、IEはサポートしていません。
JavaScriptサポートチェック
JavaScriptを使用したCSSプロパティのブラウザーサポートには4つのオプションがありますが、これについては知っています。
- 上記の
CSS.supports()
関数を使用します。
関数のテクノロジーは、ディレクティブとほぼ同じです。 違いは、プロパティがサポートされている場合はCSS.supports()
関数がtrue
返し、サポートされていない場合はfalse
です。
関数を使用するための2つのオプションがあります。 1つ目は、プロパティとその値の2つの引数を渡すことです 。
ブラウザがdisplay: flex
サポートしている場合、スクリプトはtrue
を返しtrue
。
CSS.supports("display", "flex"); /* true / false */
2番目のオプションでは、文字列全体を引数として渡す必要があります 。
ブラウザがdisplay: flex
またはdisplay: -webkit-flex
およびflex-wrap: wrap
サポートしている場合、スクリプトはtrue
を返しtrue
。
CSS.supports("((display: flex) or (display: -webkit-flex)) and (flex-wrap: wrap)"); /* true / false */
注:
@supports
ディレクティブと同じですが、この関数は新しく、IEはサポートしていません。 - JavaScriptを介して要素に新しいプロパティを適用する。
ブラウザが要素プロパティをサポートしていない値に設定できないことに気づきました。 したがって、JavaScriptを介してプロパティに新しい値を適用した後、値が変更されていない場合、ブラウザはこの値をサポートしていません。
その結果、次の機能があります。
var SupportsCSS = function (property, value) { try { // var element = document.createElement('span'); // , if (element.style[property] !== undefined) element.style[property] = value; // , else return false; // , false // , return element.style[property] === value; } catch (e) { // IE, , , return false; } };
または、try...catch
ことなく行うことができますtry...catch
cssText
を介してプロパティを記述する場合はtry...catch
しcssText
:
var SupportsCSS = function (property, value) { // var element = document.createElement('span'); // , if (element.style[property] !== undefined) element.style.cssText = property + ':' + value; // style else return false; // , false // , return element.style[property] === value; };
この関数を使用した検証は次のとおりです。
SupportsCSS('display', 'flex'); /* true / false */ SupportsCSS('display', '-webkit-flex'); /* true / false */ SupportsCSS('display', '-ms-flexbox'); /* true / false */
この機能の利点は、古いブラウザを含む多くのブラウザで機能することです。 IE、Edge、古いSafari、Chrome、Operaのブラウザで機能をテストしました。
注:古いブラウザーで、最新のエミュレーターを使用してプロパティのサポートを確認すると、このメソッドはサポートされていない値で
true
を示しtrue
。
これは、古いバージョンをエミュレートしているにもかかわらず、これを実行するブラウザーがこのCSSプロパティ値を認識し、適用できるためです。
- 他のJavaScript「プラグイン」を使用します。
CSSプロパティのブラウザサポートを確認するには、既製のJSプラグインを使用できます。 たとえば、 Modernizr 。
- 解析User-Agentを使用します。
このメソッドを使用して、ユーザーのブラウザを特定し、目的の値を表示できます。
特定のCSSプロパティに対するブラウザーサポートの定義により、さまざまなブラウザーとそのバージョンに合わせてサイトを微調整できます。 また、覚えておく必要があります。プロジェクトで使用するCSSコードが少ないほど、調整に伴うトラブルが少なくなります。
これで記事は終わりです。 私は知っているすべての検証オプションについて話しました。 他のオプションを知っている場合は、コメントにそれらについて書いてください。