浅读 Media Query Level 4
目前主流浏览器对CSS3 Media Queries的支持度已经非常好,那么就展望看看Media Query Level 4~前段时间抽空看了一下,就挑选几条感兴趣的说下。由于目前文档并非标准而只是工作草案,所以本文所列内容随时可能过期,只作为一个向导。
更新频度 update-frequency
查询设备的实际更新能力,取值也比较直观:
- none: 一旦渲染无法更新(比如打印机)
- slow: 更新缓慢(比如电子墨水)
- normal: 正常更新(比如我们更为熟悉的电脑屏幕)
这个查询可以为一些带有交互类的内容提供更多的外观控制,因为我们不是指定设备,而是根据设备的实际能力,对最终内容的样式加以优化。比如最简单的例子:
a{text-decoration:none;}
a:hover{text-decoration:underline;}
@media(update-frequency:none){
a{text-decoration:underline;}
}
环境光 light-level
Level 4里添加了关于环境光的查询,这使得夜间模式变得可能。当然,现在已经有一些通过页面里的开关实现了类似开关灯的效果,效果其实也挺不错。甚至有一些浏览器单独实现了这样的一个模式,为夜间阅读注入特别的样式(主要是字体反白)。查询环境光需要光感传感器,由于现在手机上普遍已经搭载,所以light-level成为了一个很实际的功能。目前取值有三:dim(昏暗),normal(普通),washed(明亮环境,比如室外阳光下)。
这个查询看起来不错,不过实际操作起来是非常有难度的,因为很难界定。用户代理必须自己设定光亮的阀值,不同光感组件精度不同,而且手机自有的调亮功能也会影响到准确性,更不要说电子墨水在强光下的反而效果优秀了。所以,就目前而言这个特性显得比较空泛。
脚本能力 scripting
我们长期依赖noscript
标签完成脚本支持的提示,但如果能查询到浏览器的脚本情况而应用不同的样式,岂非更好?所以 scripting 用来查询当前文档对脚本的支持情况。取值同样有三:
- enabled: 支持脚本并且已启用
- initial-only: 仅支持页面初始化脚本
- none: 不支持脚本,或虽然支持但未启用
initial-only 比较少见,但却是有用的,比如对于打印机而言,我们有必要得到仅仅是初始化完成的页面,但可能并不需要其他后续的交互结果。另外,“none”代表了不支持和不启用两者,是否有必要对两者加以区分?个人认为,没什么必要。区别对待的话,也许我们可以提供更准确的提示语句,然而在这个脚本横行的时代,有点显得多余。
指针 pointer
pointer代表了指点的精度,是我看到目前为止,LV4最有用的一个查询。
目前,我们使用媒体查询往往只是通过宽度判断我们的设备大小,我们总是在默认越小的设备诸如平板和手机,其指点精度都不高,故而需要放大交互原件的尺寸,尽管大体事实上确实如此,但我们显然需要更为直观的确定方式——直接查询指点的精度。
指点精度影响可以影响整个交互,所以显得额外重要,尤其是当标准试图将所有设备囊括其中时。pointer取值同时有三:none(无指点),coarse(不精确,比如手指),fine(精确,比如鼠标),并且,缩放不影响值的判断。现在,我们就可以更为直观地加大我们的交互原件了:
@media (pointer:coarse) {
input[type="checkbox"]{
min-width:50px;
min-height:50px;
}
}
另一个重要的查询是 hover,即指点动作是否具有悬停能力。现代浏览器(特别是移动浏览器)对这个东西有各种特别处理,所以展开的话会超篇幅,放到下次单独写吧...
自定义查询 custom Media Queries
自定义查询,顾名思义,就是将定义好的某种查询命名,并可以在后续过程中组合使用。相对Level 3,Level 4添加了很多新的查询类型,这使得自定义查询变得有意义。只是即便如此,自定义查询的可用度还是太小了些。
结尾
还是学生时看Media Query还是遥不可及的梦,但几年一过,变化还真是很大。所以往前看一些总不会错的。虽然现在还用不上甚至显得鸡肋,但时间当真是转瞬,即逝。
BGM @ Don't Leave Me Now - Gregorian
BGM @ Believe ~instrumental~ - 梶浦由记