`
liudong19870227
  • 浏览: 32071 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Modernizr学习笔记

阅读更多

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的特性检测

2.1 CSS检测 http://modernizr.com/docs/#features-css

2.2 HTML5检测 http://modernizr.com/docs/#features-html5

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. 扩展 http://modernizr.com/docs/#s3

4.1 addTest plugin

4.2 testStyles()

4.3 testProp()

4.4 testAllProps()

4.5 hasEvent()

4.6_prefixes&_domPrefixes


2
0
分享到:
评论

相关推荐

    jQuery和CSS3鼠标滑过3D卡片翻转特效

    **jQuery和CSS3鼠标滑过3D卡片翻转特效详解** 在现代网页设计中,动态交互效果已经成为提升用户体验的重要手段。...对于希望提升网页互动性和用户体验的开发者来说,这是一个值得学习和借鉴的实例。

    jQuery罗盘旋转图片切换特效.zip

    同时,为了适应不同设备和浏览器,可能还需要考虑响应式设计和兼容性问题,比如使用autoprefixer处理CSS的浏览器前缀,以及用Modernizr检测浏览器特性。 总的来说,"jQuery罗盘旋转图片切换特效"是一个综合运用了...

    HTML5宇航员走进飞船动画特效.zip

    HTML5是一种先进的网页标记语言,它在Web开发领域中扮演着重要的角色,特别是在创建动态、交互性和视觉上吸引人的...通过深入学习和实践这类特效,开发者能够提升自己的技能,创造出更多富有创意和吸引力的网页内容。

    HTML5钢丝缠绕动画特效.zip

    HTML5钢丝缠绕动画特效是一种在网页...通过解压"HTML5钢丝缠绕动画特效.zip",并研究"jiaoben7606"文件中的代码,开发者可以学习如何创建类似的动画效果,并将其应用于自己的项目中,提升网站的视觉吸引力和用户体验。

    HTML5旋涡星空旋转背景特效.zip

    总的来说,"HTML5旋涡星空旋转背景特效.zip"文件包含的代码是一个很好的学习资源,可以帮助开发者了解如何利用HTML5、CSS3和jQuery来创建互动的网页背景效果。通过分析和修改这些代码,开发者可以进一步提高自己的...

    jQuery Audio音乐播放代码.zip

    例如,Modernizr可以帮助检测浏览器特性,而Fallback机制则可以确保在不支持Web Audio API的浏览器中提供替代方案。 总的来说,"jQuery Audio音乐播放代码.zip"是一个涵盖了前端开发多个方面知识的项目,包括...

    CSS3立体咖啡杯图形特效.zip

    通过学习和理解这个特效的实现方式,开发者不仅可以提升自身的技能,还能在实际项目中创造出更多富有创意和吸引力的网页元素。无论你是初学者还是经验丰富的开发者,这个特效都值得你深入研究和借鉴。

    jQuery立方体打开合并旋转特效.zip

    通过查看和分析这个文件,我们可以学习到具体的实现细节,例如如何组织DOM结构,如何编写jQuery代码来控制元素的旋转和显示,以及如何利用CSS3的动画和过渡效果。 总结来说,“jQuery立方体打开合并旋转特效”是...

    jQuery+css图标库制作滑块拖动动态图标变化特效.zip

    总结,通过这个"jQuery+CSS图标库制作滑块拖动动态图标变化特效"的实践,我们可以学习到如何利用jQuery处理用户交互,以及如何用CSS创建动态效果。这不仅可以提高我们的技术水平,也能为用户提供更加生动有趣的网页...

    html5超炫魔术扑克牌动画特效.zip

    总的来说,这个"html5超炫魔术扑克牌动画特效.zip"项目是一个很好的学习和实践HTML5动画的实例,它涉及到HTML5的`<canvas>`元素、CSS3动画、JavaScript事件处理和DOM操作等多个重要知识点。对于开发者来说,不仅可以...

    JS+CSS3圆形时钟走动特效.zip

    2. **兼容性**:由于CSS3和JavaScript的新特性在旧版本浏览器中可能不支持,因此需要考虑代码的兼容性,可能需要引入如Modernizr这样的库来检测浏览器特性,或者使用polyfill提供回退方案。 这个"JS+CSS3圆形时钟...

    jQuery响应式3D旋转图片切换代码.zip

    通过学习和应用这个《jQuery响应式3D旋转图片切换代码》,开发者不仅可以掌握创建动态网页特效的技术,还能了解到如何将这些技术与响应式设计相结合,以提升网页的交互性和吸引力。无论是为了个人项目还是商业用途,...

    CSS3公园里单车动画场景特效.zip

    8. **浏览器兼容性**:考虑到不同的浏览器对CSS3支持程度不一,开发者可能使用了前缀(如 `-webkit-`、`-moz-`、`-ms-`、`-o-`)来确保在各个浏览器中都能正常工作,或者使用Modernizr这样的库检测浏览器特性,实现...

    jQuery CSS3云朵飘动动画特效.zip

    5. **优化与兼容性**:最后,考虑到浏览器兼容性问题,可能需要使用Modernizr等库检测CSS3动画支持,或者为不支持CSS3动画的浏览器提供备选方案,如JavaScript的逐帧动画。 在压缩包中,`index.html`是主页面文件,...

    jquery图片分组幻灯片.rar

    8. **兼容性和适应性**:考虑到不同浏览器和设备的差异,开发时需要确保代码在主流浏览器上都能正常工作,可能需要使用jQuery的`.browser`属性或Modernizr等工具检测浏览器特性。此外,为了适应各种屏幕尺寸,幻灯片...

    Shahzebs-Sida

    6. 文档和笔记:可能有一些.md或.txt文件,包含项目说明、开发过程记录或代码注释。 要深入理解"Shahzebs-Sida"项目,你需要解压文件并查看源代码,了解HTML是如何与其他技术(如CSS和JavaScript)协同工作的,以及...

Global site tag (gtag.js) - Google Analytics