测试(x)的CSS属性值以查看特定媒体查询是否对JS等条件加载有效...

时间:2013-12-19 17:29:44

标签: javascript html5 css3 mobile media-queries

想知道人们可能会看到这样做的问题。这是在一个简单的POC中发生的事情:

某些媒体查询所有适当的样式:

@media screen and (max-device-width : 640px) {
  body:after {
    display: none;
    content: 'mobile';
  }
  etc ...
}

然后测试:

var isMobile = window.getComputedStyle(document.body, ':after').content === 'mobile' ? true : false;

然后从那里显然:

if ( isMobile ) doMobileAndLoadStuff();

对我而言,这似乎比一堆JS更清晰,可以检测屏幕大小或用户代理字符串。我知道IE8不支持getComputedStyle,但可以轻松解决。有人认为这是好事还是坏事?有没有我看不到的东西?是否有更简洁的解决方案?

1 个答案:

答案 0 :(得分:0)

这正是Modernizr的用途。


什么是Modernizr?

  

Modernizr是一个小型JavaScript库,检测可用性   用于下一代Web技术的本机实现,即   源自HTML5和CSS3规范的功能。很多   这些功能已经在至少一个主要浏览器中实现   (他们中的大多数在两个或更多),而Modernizr所做的是,非常   简单地说,告诉您当前浏览器本机是否具有此功能   是否实施。

     

与传统但非常不可靠的“UA”方法不同   嗅探,“通过它检测浏览器(用户可配置)   navigator.userAgent属性,Modernizr执行实际的特征检测   可靠地辨别各种浏览器可以做什么和不能做什么。后   所有,相同的渲染引擎可能不一定支持相同的渲染引擎   事情,一些用户改变他们的userAgent字符串来绕过   发展不良的网站,不会让他们通过其他方式。

     

Modernizr旨在结束UA嗅探练习。运用   特征检测是一种更可靠的机制来建立你的东西   在当前的浏览器中可以做也可以做不到,而且Modernizr可以做到   以各种方式方便您:

     
      
  • 它测试了40多个下一代功能,所有功能都在几毫秒内完成

  •   
  • 它创建一个JavaScript对象(名为Modernizr),其中包含这些测试的结果作为布尔属性

  •   
  • 它向html元素添加了类,这些类可以准确地解释哪些特性是本机支持的?

  •   
  • 它提供了一个脚本加载器,因此您可以在旧浏览器中提取polyfills以回填功能

  •   
     

凭借Modernizr为您提供的这些知识,您可以充分利用   浏览器中可以渲染或利用它们的这些新功能,   并且仍然有简单的和可靠的控制情况的手段   对于不能的浏览器。

为什么要使用Modernizr?

  

利用酷炫的新网络技术   很有趣,直到你必须支持落后的浏览器。   Modernizr使您可以轻松编写条件JavaScript   用于处理每种情况的CSS,无论浏览器是否支持某项功能   不。它非常适合轻松进行渐进式增强。

如何运作

  

对于很多测试,Modernizr通过创建一个“魔术”来实现它的“魔力”   元素,然后设置该元素的特定样式指令   立即检索它。理解指令的浏览器   会回报一些明智的东西;浏览器不理解它   没有返回或“未定义”。

     

文档中的许多测试都带有一个小代码示例   说明如何在Web中使用该特定测试   开发流程。实际使用案例有很多种,   虽然。 Modernizr的可能用途仅限于您的   想象。

     

如果您真的对Modernizr的工作原理感兴趣,   看看modernizr.js的source code和各种功能   检测到,dig into the project on GitHub

支持的浏览器

  

我们支持IE6 +,Firefox 3.5 +,Opera 9.6 +,Safari 2 +,Chrome。上   移动,我们支持iOS的移动Safari,Android的WebKit浏览器,   Opera Mobile,Firefox Mobile,我们还在进行更多测试   我们相信我们支持Blackberry 6 +。

查看Modernizr检测到的full list of features,或详细了解conditional resource loading with Modernizr