CSS3过渡属性的特征检测
Feature detection for CSS3 transition property
我只是在搞乱这个modernizr来找出,他们如何检查某个CSS属性是否在用户的浏览器中被支持,基本上我只是想有一个小脚本,告诉我用户的浏览器是否支持CSS过渡。我将modernizr代码抽象为如下所示:
Elem = document.createElement('Alx');
eStyle = Elem.style;
var cssProp = (function check(){
props = ["transition", "WebkitTransition", "MozTransition", "OTransition", "msTransition"];
for(var i in props) {
var prop = props[i];
console.log(prop);
if (!contains('-' , prop) && eStyle[prop] !== undefined ) {
return prop;
}
}
})();
/* The contains function */
function contains( str, substr ) {
return !!~('' + str).indexOf(substr);
}
modernizr几乎做了同样的事情,我只是做了一些改变并硬编码了数组值以简化事情。脚本的工作方式如下。
创建一个html元素(不一定是合法的html元素)
执行一个IIFE,该IIFE基本上检查了css属性的所有可能的浏览器版本以及标准的W3C变体。检查thing属性是否可以应用于我们创建的html元素,如果不能应用,则
if
条件失败并返回undefined如果if条件通过,则返回正确的css-3支持属性并存储在cssProps中。
我只是想知道,这是检查用户浏览器中支持的过渡的防弹方法吗?或者它是否被支持?
这是我第一次尝试浏览器功能检测,所以我想知道。
对于你更大的问题"这是一种检查用户浏览器支持哪种过渡的万无一有的方法吗",答案是否定的。虽然这几乎肯定会让你99.99%的浏览器都支持它,但不可避免地会有一些奇怪的事情组合(在中档三星安卓设备上使用自定义版本的webkit/chrome是一个常见的罪魁),这将使你无法真正"防弹"。
话虽这么说,虽然你在提炼Modernizr的逻辑方面做得很好,但我怀疑你是否需要这样做。
正如其他评论者所提到的,您总是可以创建一个包含您想要的内容的自定义构建。话虽如此,如果您想要尽可能精简的javascript构建,那么做您所做的事情是有意义的(因为Modernizr几乎肯定会为与您正在做的事情完全无关的事情提供支持/代码)。如果是这样的话,那么我建议您查看转换的canuse结果。除了老版本的android,基本上都是所有没有前缀。
这意味着你的检测可以是一个非常非常小的
var supportsTransitions = function() {
var style = document.documentElement.style;
return 'transition' in style || 'webkitTransition' in style
}
这将给你几乎相同的结果(不可否认忽略了旧的浏览器-这取决于你是否重要),在更小的占用空间。
无论哪种方式-在特征检测方面的精彩开始,我希望看到你很快为Modernizr贡献你自己的!
- Angularjs指令如何检测属性中的更改
- 使用特征检测通过点表示法检查对保留字的支持
- 什么's特征检测、特征推断和使用UA字符串之间的区别
- 视差/背景位置的特征检测
- 角度2 - 检测属性@Input的变化
- Chrome 中的突变对象无法检测属性和 CSS 更改
- Ruby - Selenium Webdriver , AngularJS 单选按钮无法检测属性
- 使用 change() 检测属性值的变化
- 如何特征检测XMLHttpRequest是否支持responseType=“”;阵列缓冲器”;
- HTML5拖放的setDragImage特征检测
- 特征检测是否需要用户手势
- 检测属性没有值的元素
- 特征检测-狮子滚动条
- SVG中矢量效果属性的特征检测
- 如何动态更新ol.特征几何属性(坐标)在OpenLayers 3
- 特征检测与Modernizr不工作
- 带有换行符的文本区域maxlength的特征检测
- CSS3过渡属性的特征检测
- 如何为Web推送做特征检测
- 检测属性显示从无显示到显示块