最近一段时间学习到的几个知识点总结
三月 25th, 2010IE7下图片缩小失真的解决办法
微软提供的私有属性 -ms-interpolation-mode,请参看:msInterpolationMode Property
img { -ms-interpolation-mode: bicubic; /* Internet Explorer 7.0+ */ }
| 浏览器 | 版本号 | 提供CSS属性 |
| Internet Explorer | 7.0 | -ms-interpolation-mode: bicubic | nearest-neighbor 仅支持非透明图像格式 (如JPG, GIF, PNG); 无继承属性 |
| Firefox (Gecko) | 3.6(1.9.2) | image-rendering: auto | inherit | optimizeSpeed | optimizeQuality | -moz-crisp-edges |
其他浏览器没有相关的样式
外部引入CSS 的两种方式link和@import的区别
本质上,这两种方式都是为了加载CSS文件,但还是存在着细微的差别。
- 老祖宗的差别。link属于XHTML标签,而@import完全是CSS提供的一种方式。link标签除了可以加载CSS外,还可以做很多其它的事情,比如定义RSS,定义rel连接属性等,@import就只能加载CSS了。
- 加载顺序的差别。当一个页面被加载的时候(就是被浏览者浏览的时候),link引用的CSS会同时被加载,而@import引用的CSS 会等到页面全部被下载完再被加载。所以有时候浏览@import加载CSS的页面时开始会没有样式,然后突然样式会出现,网速慢的时候还挺明显。
- 兼容性的差别。由于@import是CSS2.1提出的所以老的浏览器不支持,@import只有在IE5以上的才能识别,而link标签无此问题。
- 使用dom控制样式时的差别。当使用javascript控制dom去改变样式的时候,只能使用link标签,因为@import不是dom可以控制的。
所以,无特殊情况推荐使用link来引入样式,尽量避免使用@import
DTD相关总结
以前一直认为DTD的声明会影响浏览器对页面的渲染模式,直到发现淘宝的新版首页DTD的声明为<!doctype html>,才开始仔细思考和验证这个问题。
声明为Strict.dtd还是Transitional.dtd,在目前的浏览器(请注意发布这篇文章的时间,不保证你看到的时候已经有了新的变化)看来是没有什么区别的。理论上Strict.dtd比Transitional.dtd或者loose.dtd要严格多了,很多元素在strict.dtd里面都不能使用。然而事实上浏览器的兼容以前的版本,通常那些不支持的元素都能正确的展现。
例如iframe这个TAG在strict.dtd里面并不存在,但即使你的DOCTYPE里面声明了strict.dtd,然后使用了iframe这个TAG,浏览器(包括IE7,IE8,FF3.0,Safari 3.0)都能够正确地显示你的文档。目前能够保证你的文档是符合strict.dtd还是Transitional.dtd的,只能通过一些网上的Validator,如W3C Validator来分析。当然,实际上如果你能够严格按照你声明的DTD来书写你的文档,那是最好的,这样保证了以后浏览器对DTD严格遵守的时候,你的文档不会产生错误。
而DTD里面声明是xhtml 还是html其实起不了什么作用,起决定作用的是服务器端提供这个文档的格式。如果服务器端是以”text/html”来提供这个文档的,那么浏览器就会一html来解析,如果是以”application/xhtml+xml“来提供的,那么浏览器会已xhtml的方式来解析。当然,绝大多数时候,服务器端都是以”text/html”来提供的。
总结:
- 浏览器如何解析文档取决于服务器以什么格式来提供这个文档。如果你的文档是以”text/html”的方式来提供的,那么你就应该声明为HTML。假如你想要让IE7能够正确地显示,那么你就更应该这么做了。(事实上绝大多数服务器端程序都是以这种方式提供的。)
- 如果你的文档声明为XHTML,那么服务器端提供文档时就应该以”application/html+xml”的方式来提供。
- 尽量在你的文档前面声明DOCTYPE和DTD,这样能够保证你不是以Quirks Mode的方式来渲染文档的,并且保证向后的兼容性。
- 如果你声明了DTD,那么就要严格按照DTD的要求来书写你的文档。特别是如果你声明了Strict.dtd,那么你应该注意哪些元素是不能够使用的,当然你也可以为了节省服务器资源像淘宝那样只声明一个<!doctype html>,甚至和google一样连结束的</body></html>标签都不写,但我通常不建议这么干。

