Respond.js
Respond.js让不支持css3 Media Query的浏览器包括IE6-IE8等其他浏览器支持媒体查询。
Respond.js 是一个快速、轻量的 polyfill,用于为 IE6-8 以及其它不支持 CSS3 Media Queries 的浏览器提供媒体查询的 min-width 和 max-width特性,实现响应式网页设计(Responsive Web Design)。
响应式布局,理想状态是,对PC/移动各种终端进行响应。媒体查询的支持程度是IE9+以及其他现代的浏览器,但是IE8在市场当中仍然占据了比较大量的市场份额,使我们不得不进行IE低端浏览器的考虑。那么如何在IE6~8浏览器中兼容响应式布局呢?
这里我们需要借助这样一个文件:respond.js.
文件下载地址:respond.js.
自己在阅读了官方文档之后,进行了一系列测试。友情提示各位朋友,关于respond.js的使用,有一些需要注意的地方,一旦不注意,在IE6-8中就无法显示出来。
插件原理
既然要实现响应式网页,那么就需要用到媒体查询,媒体查询的核心是min-width 和 max-width,而IE8以下以及一些其它的浏览器不支持这两个属性,respond.js是怎么做的呢?
将head中所有外部引入的CSS文件路径取出来存储到一个数组当中; 遍历数组,并一个个发送AJAX请求; AJAX回调后,分析response中的media query的min-width和max-width语法(注意,仅仅支持min-width和max-width),分析出viewport变化区间对应相应的css块; 页面初始化时和window.resize时,根据当前viewport使用相应的css块。使用方法
考虑到IE9是支持CSS3的,所以直接在HTML页面的head标签中添加脚本引入即可:
<script src="/path/to/respond.proxy.js"></script>
其他的支持响应式布局的插件-css3-dediaqueries.js
css3-mediaqueries.js支持几乎所有的media query的语法。会出现闪屏。并不是很推荐使用,虽然能够支持全部的mediaqueries,但min-width和max-width其实就可以满足我们对响应式布局的需要。
补充一点
if CSS files are encoded in UTF-8 with Byte-Order-Mark,they will not work with Repond.js in IE7 or IE8.
也就是说保存格式应该是utf-8无BOM格式,BOM会影响程序对文档的处理,正常的utf-8文档应该没事。
Tips
always link stylesheets or write inline CSS before js scripts.
Respond.js on Github: https://github.com/scottjehl/Respond.