3

所以我很清楚,一般来说,应该在 JS 和浏览器检测中使用特征检测。被推动的一个很好的例子是jQuery 1.9'drop of $.browser

此外,在我阅读的每篇文章中,都说永远不要使用浏览器检测。

但是我有一个条件,我需要动态计算JS 布局#中可用的 ,并且它是通过 来完成的,可用的插槽在哪里。"slots"calc(100%/{0}){0}#

当然,在 iPad 中,.css("height", "calc(100%/3)")会失败,因为它必须以 . 为前缀-webkit-

那么,谁能告诉我应该如何使用特征检测(而不是旧的$.browser.webkit)来检测它需要这个?

4

1 回答 1

8

创建一个虚拟元素,将其插入到文档中,使用.cssText.height = 'calc(100px - 50px);'并检查元素是否具有预期的高度。对每个供应商前缀重复此操作。

旁注:对于此类问题,您应该查看 Modernizr 的源代码。其他人通常贡献了这样的特征检测脚本,例如calc.js.


Modernizr 检测该功能是否存在,它不告诉必须使用哪个前缀。下面的代码显示了如何获得正确的前缀:

var calc = (function(){
    var dummy = document.createElement('div');
    var props = ['calc', '-webkit-calc', '-moz-calc', '-o-calc'];
    for (var i=0; i<props.length; ++i) {
        var prop = props[i];
        dummy.style.cssText = 'width:' + prop + '(1px);';
        if (dummy.style.length)
            return prop;
    }
})();

// Usage example:
$('selector').css('height', calc + '(100% / 3)');

(我没有添加-ms-前缀,因为 IE 开始支持它没有前缀 - 请参阅http://caniuse.com/calc。)

于 2013-05-18T14:06:07.777 回答