1.General
1.1 什么是Modernizr?
Modernizr是用来检测下一代web技术本地实现的JavaScript类库,例如HTML5和CSS3的特性检测,这些特性在浏览器上的实现并不统一,而Modernizr就是告诉你,该浏览器是否实现某一特性。
它有区别于利用UA来检测,UA检测并不可信,因为UA是浏览器厂商自己定义的,它和特性并不能一一对应起来。而特性检测相对就比较可信,如果浏览器实现了该特性那自然是好的,否则要去做降级处理。Modernizr使这种特性检测变得很方便,它支持:
1)可以检测40多种特性
2)Modernizr这个对象就包括一个布尔值,来反应是否支持某一特性。
3)添加在html中的样式能很直观的表示是否支持某一特性。
4)它提供一个资源加载器,因此可以通过它来加载降级处理的资源文件。
1.2 Modernizr的安装
如果要考虑IE8之前版本的HTML5实现,建议将Modernizr的引入放在body标签前。
1.3 Polyfills 和 Modernizr
Modernizr目的是使开发变得统一,即使浏览器不支持该特性,也可以使用标准的API,例如针对JSON特性的json.js。json.js就是polyfill(替代品)。
好的消息是,现在已经有各种HTML5特性的替代品。
1.4 Modernizr.load()
Modernizr.load 是一个资源加载器,可以加载js和css。它的语法很容易理解:
Modernizr.load({
test: Modernizr.geolocation,
yep : 'geo.js',
nope: 'geo-polyfill.js'
});
在这个例子中,我们通过运行设备是否支持geolocation来加载不同的js文件。
Modernizr.load不会影响性能。
下面的例子是检测更多的特性,加载更多的文件,尽量将各种替代品压缩成一个文件,这样可以节省下载时间:
// Give Modernizr.load a string, an object, or an array of strings and objects
Modernizr.load([
// Presentational polyfills
{
// Logical list of things we would normally need
test : Modernizr.fontface && Modernizr.canvas && Modernizr.cssgradients,
// Modernizr.load loads css and javascript by default
nope : ['presentational-polyfill.js', 'presentational.css']
},
// Functional polyfills
{
// This just has to be truthy
test : Modernizr.websockets && window.JSON,
// socket-io.js and json2.js
nope : 'functional-polyfills.js',
// You can also give arrays of resources to load.
both : [ 'app.js', 'extra.js' ],
complete : function () {
// Run this after everything in this group has downloaded
// and executed, as well everything in all previous groups
myApp.init();
}
},
// Run your analytics after you've already kicked off all the rest
// of your app.
'post-analytics.js'
]);
通过Modernizr.load我们可以做很多事情,单独的讲解在 yepnope.js。
1.5 Modernizr的工作原理
大部分的实现原理都一样的:先创建该元素,然后设置特殊的样式,再获取该元素,最后根据浏览器是否可以理解其中的属性来决定是否支持该特性。
1.6 IE中的HTML5元素
在IE中可以使用HTML5的元素,例如section、header、footer,Modernizr是通过额外的样式来控制它们显示的行为的。详情可参见HTML5 Boilerplate CSS。
1.7 支持的浏览器
支持IE6+,Firefox3.5+,Opera9.6+,Chrome,Safari2+,在手机上支持,ios的safari,Android的Webkit内核的浏览器,Opera Mobile,Firefox Mobile。
2.Modernizr的特性检测
3.Modernizr Methods
Modernizr.prefixed(str); //检测Css前缀,例如:Modernizr.prefixed('boxSizing');将返回MozBoxSizing。参数的形式必须为驼峰命名法,而不是带连接符的形式。
如果想得到带连接符的结果,可以通过如下代码进行转换:
str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');
如果想匹配各个浏览器,我们可以进行如下做法:
var transEndEventNames = {
'WebkitTransition' : 'webkitTransitionEnd',
'MozTransition' : 'transitionend',
'OTransition' : 'oTransitionEnd',
'msTransition' : 'MSTransitionEnd',
'transition' : 'transitionend'
},
transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
检测Dom前缀:Modernizr.prefixed(str,obj[,scope]);例如:Modernizr.prefixed('requestAnimationFrame',window);//fn
如果只想得到名字,可以用Modernizr.prefixed(str,window,false);//webkitRequestAnimationFrame
mq() media query testing
Modernizr.mq(str);
1.如果不支持media query,则返回false
2.Modernizr.mq('only all and (max-width: 400px)'),尽量要指定特殊的media type
3.max-width和orientation query会根据现在的状态进行重新衡量,这个或许稍等一会才会改变。
4.Modernizr.mq('(min-width: 0px)')可以通过它来检测是否支持min-width。
4.1 addTest plugin
4.2 testStyles()
4.3 testProp()
4.4 testAllProps()
4.5 hasEvent()
4.6_prefixes&_domPrefixes
分享到:
相关推荐
**jQuery和CSS3鼠标滑过3D卡片翻转特效详解** 在现代网页设计中,动态交互效果已经成为提升用户体验的重要手段。...对于希望提升网页互动性和用户体验的开发者来说,这是一个值得学习和借鉴的实例。
同时,为了适应不同设备和浏览器,可能还需要考虑响应式设计和兼容性问题,比如使用autoprefixer处理CSS的浏览器前缀,以及用Modernizr检测浏览器特性。 总的来说,"jQuery罗盘旋转图片切换特效"是一个综合运用了...
HTML5是一种先进的网页标记语言,它在Web开发领域中扮演着重要的角色,特别是在创建动态、交互性和视觉上吸引人的...通过深入学习和实践这类特效,开发者能够提升自己的技能,创造出更多富有创意和吸引力的网页内容。
HTML5钢丝缠绕动画特效是一种在网页...通过解压"HTML5钢丝缠绕动画特效.zip",并研究"jiaoben7606"文件中的代码,开发者可以学习如何创建类似的动画效果,并将其应用于自己的项目中,提升网站的视觉吸引力和用户体验。
总的来说,"HTML5旋涡星空旋转背景特效.zip"文件包含的代码是一个很好的学习资源,可以帮助开发者了解如何利用HTML5、CSS3和jQuery来创建互动的网页背景效果。通过分析和修改这些代码,开发者可以进一步提高自己的...
例如,Modernizr可以帮助检测浏览器特性,而Fallback机制则可以确保在不支持Web Audio API的浏览器中提供替代方案。 总的来说,"jQuery Audio音乐播放代码.zip"是一个涵盖了前端开发多个方面知识的项目,包括...
通过学习和理解这个特效的实现方式,开发者不仅可以提升自身的技能,还能在实际项目中创造出更多富有创意和吸引力的网页元素。无论你是初学者还是经验丰富的开发者,这个特效都值得你深入研究和借鉴。
通过查看和分析这个文件,我们可以学习到具体的实现细节,例如如何组织DOM结构,如何编写jQuery代码来控制元素的旋转和显示,以及如何利用CSS3的动画和过渡效果。 总结来说,“jQuery立方体打开合并旋转特效”是...
总结,通过这个"jQuery+CSS图标库制作滑块拖动动态图标变化特效"的实践,我们可以学习到如何利用jQuery处理用户交互,以及如何用CSS创建动态效果。这不仅可以提高我们的技术水平,也能为用户提供更加生动有趣的网页...
总的来说,这个"html5超炫魔术扑克牌动画特效.zip"项目是一个很好的学习和实践HTML5动画的实例,它涉及到HTML5的`<canvas>`元素、CSS3动画、JavaScript事件处理和DOM操作等多个重要知识点。对于开发者来说,不仅可以...
2. **兼容性**:由于CSS3和JavaScript的新特性在旧版本浏览器中可能不支持,因此需要考虑代码的兼容性,可能需要引入如Modernizr这样的库来检测浏览器特性,或者使用polyfill提供回退方案。 这个"JS+CSS3圆形时钟...
通过学习和应用这个《jQuery响应式3D旋转图片切换代码》,开发者不仅可以掌握创建动态网页特效的技术,还能了解到如何将这些技术与响应式设计相结合,以提升网页的交互性和吸引力。无论是为了个人项目还是商业用途,...
8. **浏览器兼容性**:考虑到不同的浏览器对CSS3支持程度不一,开发者可能使用了前缀(如 `-webkit-`、`-moz-`、`-ms-`、`-o-`)来确保在各个浏览器中都能正常工作,或者使用Modernizr这样的库检测浏览器特性,实现...
5. **优化与兼容性**:最后,考虑到浏览器兼容性问题,可能需要使用Modernizr等库检测CSS3动画支持,或者为不支持CSS3动画的浏览器提供备选方案,如JavaScript的逐帧动画。 在压缩包中,`index.html`是主页面文件,...
8. **兼容性和适应性**:考虑到不同浏览器和设备的差异,开发时需要确保代码在主流浏览器上都能正常工作,可能需要使用jQuery的`.browser`属性或Modernizr等工具检测浏览器特性。此外,为了适应各种屏幕尺寸,幻灯片...
6. 文档和笔记:可能有一些.md或.txt文件,包含项目说明、开发过程记录或代码注释。 要深入理解"Shahzebs-Sida"项目,你需要解压文件并查看源代码,了解HTML是如何与其他技术(如CSS和JavaScript)协同工作的,以及...