display:inline-blockのブラウザサポートを検出
-
03-07-2019 - |
質問
ブラウザがCSS属性display:inline-blockをサポートしているかどうかを検出するにはどうすればよいですか
解決
Javascriptは、JavaScriptのオブジェクトや機能に関連しない純粋なCSS属性であるため、Javascriptでそれを検出する方法はありません。最も良いことは、こちらで互換性を確認することですCSSをリストして使用し、回避策を作成します。
他のヒント
さて、ユーザーエージェントのスニッフィングの代わりにjavascriptを使用してブラウザのバフィアを調べることで、純粋にそれを実行したい場合は、次のようにします。
テストシナリオと制御シナリオを設定します。たとえば、次の構造を使用します。
- div
- div w / content" test"
- コンテンツを含むdiv" test2"
2つの内部divをインラインブロックに設定して1つのコピーをドキュメントに挿入し、2つの内部divをブロックに設定して別のコピーをドキュメントに挿入します。ブラウザがインラインブロックをサポートしている場合、含まれるdivの高さは異なります。
別の答え:
getComputedStyleを使用して、ブラウザーが特定の要素のcssをどのように処理しているかを確認することもできます。そのため、理論的には、「display:inline-block、」という要素を追加できます。そしてcomputeStyleをチェックして、生き残ったかどうかを確認します。唯一の問題:IEはgetComputedStyleをサポートしていません。代わりに、currentStyleがあります。 currentStyleが同じように機能するかどうかはわかりません(おそらく、「無効な」値を無視して、必要な動作と同じように機能します)。
QuirksModeチャートによると、 inline-block
はIE6および7です(まあ、それらはそれをサポートしますが、ネイティブの display
タイプが inline
である要素に対してのみです)。 dサポートされていると想定し、条件付きコメントでIE6 / 7の回避策を適用します。
(注:Firefox 2の inline-block
のサポートの欠如を無視し、大多数のユーザーがFF3にアップグレードしたと仮定していますが、短いグーグルはそれを裏付ける数字を発掘しませんでしたYMMV。)
ただし、JavaScriptからのサポートを決定することが唯一の選択肢である場合は、ユーザーエージェントスニッフィングにフォールバックする必要があります。
ところで:端正なIE6 +、FF2 +、Opera、WebKitでCSSのみでクロスブラウザインラインブロックを実装する方法。 (有効なCSSではなく、CSSのみです。)
Christopher Swasey は非常に正しい。
>http://ajh.us/test-で彼のテクニックのjsFiddleデモを設定しました。インラインブロック。
コードは基本的に:
var div = document.createElement('div');
div.style.cssText = 'display:inline-block';
// need to do this or else document.defaultView doesn't know about it
$('body').append(div);
// that was jQuery. It’s possible to do without, naturally
var results = false;
if (div.currentStyle) {
results = (div.currentStyle['display'] === 'inline-block');
} else if (window.getComputedStyle) {
results = document.defaultView.getComputedStyle(div,null).getPropertyValue('display')=== 'inline-block';
}
//clean up
$(div).remove();
alert('display: inline-block support: '+results);
このまったく同じ手法が、 display:run-in
サポートの検出にも機能することに注意してください。