gpt4 book ai didi

使用 styled-components 进行 CSS 特征检测

转载 作者:行者123 更新时间:2023-12-04 16:06:44 24 4
gpt4 key购买 nike

我通常使用 Modernizr 来检测 CSS 特性,例如 flex-box 支持,如果不支持则回退到旧方法:

.mz-flexbox {
// use flex
}

.mz-noflexbox {
// use floats
}

如何用 styled-components 完成类似的事情?用类似 Modernizr 的东西将类添加到 <html> 的位置元素来指​​示功能支持?

此时我唯一的想法是在我的“App.js”中导入组件并使用 injectGlobal定位他们:

import MyComponent from './components/my-component';

injectGlobal`
.mz-flexbox {
${MyComponent} {
// use flex
}
}
`;

出现@supports将是一个不错的解决方案,但我确实关心 Internet Explorer,因此这不是该元素的解决方案。

最后,我不确定这是否是执行此操作的好方法,但是这样的方法是否适用于特征检测?我不是 100% 了解使用样式组件编译的内容以及可以在运行时计算的内容:

styled.div`
${window.Modernizr.flexbox && css`
display: flex;
align-items: center;
`}
`;

这对运行时检测有用吗?

最佳答案

你可以查询hmtl标签的classList。

const modern = document.querySelector('html').classList

然后只需检查您要查找的要素类是否在该列表中。例如:

if (modern.contains('noflexbox') {
// Adjust as per usual
}

这只是 JavaScript :D

但是,更好的方法是直接使用 Modernizr API,而不是依赖类的存在。所以你的代码看起来更像:

if(Modernizr.someFeature) { ... }

查看 modernizr docs

RE:你的最后一个例子 - 是的,这会起作用,假设你将 modernizr 作为依赖项与你的其余 javascript 捆绑在一起。文档中还有其他方法用于设置功能测试,这应该有助于减少样式化字符串中的条件重复

关于使用 styled-components 进行 CSS 特征检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48434176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com