2015-10-14 50 views

回答

13

我們如何檢測到支持css flex-box和flex-wrap的腳本是 JavaScript。

創建一個元素並檢查樣式屬性。如果支持,它將不會返回,即'',否則返回undefined

例如,如果您在Chrome中運行以下代碼段,則對於flex-wrap,您將得到undefined,columns''

片段

snippet.log('flex = ' + document.createElement("p").style.flex); 
 
snippet.log('columns = ' + document.createElement("p").style.columns); 
 
snippet.log('flex-wrap = ' + document.createElement("p").style.flexWrap);
<script src="https://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>


雖然你已經在你的問題中提到只有JavaScript,但有特徵檢測的CSS的方式爲好。

The @supports rule, also called CSS Feature Queries

您提供了CSS聲明作爲條件,瀏覽器將執行它以返回它是否支持。例如,如果支持flex,以下CSS將應用綠色背景顏色。

@supports (display: flex) { 
    div { background-color: #0f0; } 
} 

瀏覽器支持在所有現代瀏覽器中都不錯,除了IE(像往常一樣)。對於IE和(Safari < 9),當@supports規則失敗時,您需要保留後備選項。


結合上述兩個there is an API around that以及您可以在JavaScript中使用做特徵檢測。

var isColumnSupported = CSS.supports('columns', ''); 
 
snippet.log(isColumnSupported); 
 

 
var isFlexWrapSupported = CSS.supports('flex-wrap', 'wrap'); 
 
snippet.log(isFlexWrapSupported);
<script src="https://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

+0

沒錯,IE11-和SAF根據[caniuse](http://caniuse.com/#feat=css-featurequeries)(TIL邊緣和Safari 9會) – FelipeAls

+0

8-你提到的JS方法在IE10支持時返回undefined,所以這似乎不是一個正確的方法來檢測這 –

+0

現在我用你的方法,結合IE10檢查,這似乎很好。 –