【问题标题】:Best way to feature detect :focus-within pseudo-class特征检测的最佳方法:focus-within 伪类
【发布时间】:2019-10-08 00:06:15
【问题描述】:

我找不到任何使用@supports 的语法与伪类一起使用,除了not,它非常特定于该伪类。

检测浏览器是否支持focus-within的最佳方法是什么,因为我不想编写很多浏览器技巧,这些技巧会在几个版本中改变?我正在使用 Node 和 npm,但不想为它导入整个包(通常不是处理事情的最佳方式)。

尝试读取浏览器版本字符串或使用当今的浏览器解析黑客不是一个好主意,因为当浏览器开始支持某个功能时将很难维护,所以我正在寻找除 @supports 之外的功能检测方法.有没有办法在 javascript 中确定这一点?

【问题讨论】:

    标签: javascript css node.js


    【解决方案1】:

    因为它是一个伪类并且是选择器的一部分,所以你需要在这里使用@supports selector (…) 语法——但是browser support 还不是很好。 (目前基本上只有 Firefox。)

    通过一些快速的研究,我遇到了https://github.com/Modernizr/Modernizr/issues/2270 - 关于在 Modernizr 库中实现测试的讨论的一部分。用户 patrickkettner 建议以下 JavaScript 解决方案:

    其实!有一个更简单的方法。

    document.querySelector 抛出无效的选择器。您可以在 try-catch 中调用 document.querySelector(':focus-within'),如果它不抛出它应该得到支持。我们可能会找到一个给出错误结果的浏览器,在这种情况下,我们需要实际测试样式。然而,与此同时,由于它是一个现代功能,我们现在应该很好地进行嗅探测试

    由于这个基本测试似乎仍然是 Modernizer 目前在这方面所做的全部 (https://github.com/Modernizr/Modernizr/blob/master/feature-detects/css/focuswithin.js),我想这应该可以安全使用。

    【讨论】:

    • 嗯,很高兴知道。我一直在对 navigator.userAgent 使用一些正则表达式(浏览器检测而不是特征检测:/),但从表面上看,这看起来是一个更好的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2013-06-09
    • 2011-02-17
    相关资源
    最近更新 更多