请在主流浏览器中打开测试页面,在fiddler里查看http请求.# h$ z% ~8 L1 N& c
1. 隐藏图片
6 H, q+ m, a% q6 }& h9 X- z<img src=1.jpg style=display: none />测试:test_1.html
" }7 ^/ G7 R+ `* O结论:只有opera不产生请求.
" T" ~( U% G0 Z" E' c2 b, g+ L注意:用visibility: hidden隐藏图片时,在opera下也会产生请求.
8 c$ C. k+ z& Y7 y2. 重复图片
' }1 a4 m; g- e<img src=1.jpg /><img src=1.jpg />测试:test_2.html2 A" K1 E6 q' I# v! K
结论:所有浏览器都只产生一次请求 .
0 }5 b2 G4 D4 z3. 重复背景' W4 X4 y% F B7 e8 _
<style type=text/css> .test1 { background: url(1.jpg) } .test2 { background: url(1.jpg) }</style><div class=test1>test1</div><div class=test2>test2</div>测试:test_3.html
w0 Q2 }4 j+ G3 D% r& z9 {; o4 m$ r结论:所有浏览器都只产生一次请求.9 y6 [& k9 t ^% R* E
4. 不存在地元素地背景
t0 Q$ K& q- W* i. k0 h7 P; o<style type=text/css> .test1 { background: url(1.jpg) } .test2 { background: url(2.jpg) } /* 页面中没有class为test2地元素 */</style><div class=test1>test1</div>测试:test_4.html
' m% o# U7 I2 E* f u结论:背景仅在应用地元素在页面中存在时,才会产生请求.这对css框架来说,很有意义.
( ?! N4 }9 T% b2 p5. 隐藏元素地背景
7 `, I. ^; u8 r3 U4 q<style type=text/css> .test1 { background: url(1.jpg); display: none; } .test2 { background: url(2.jpg); visibility: hidden; }</style><div class=test1>test1</div>测试:test_5.html3 }/ j6 t9 Q% {8 e% N' Y1 V
结论:opera和firefox对于用display: none隐藏地元素背景,不会产生http请求.仅当这些元素非display: none时,才会请求背景图片.- Q$ e+ U. g W3 W
6. 多重背景
9 C- z# z! l3 V, e7 a<style type=text/css> .test1 { background: url(1.jpg); } .test1 { background: url(2.jpg); }</style><div class=test1>test1</div>测试:test_6.html
% r2 R% t" K6 r; |; P- F结论:除了基于webkit渲染引擎地safari和chrome,其它浏览器只会请求一张背景图.
" r) E) e! O0 v% O注意:webkit引擎浏览器对背景图都请求,是因为支持css3中地多背景图.
0 v! \( c2 B3 S1 G7. hover地背景加载
6 w; W4 `6 \( ]<style type=text/css> a.test1 { background: url(1.jpg); } a.test1:hover { background: url(2.jpg); }</style><a href=# class=test1>test1</a>测试:test_7.html& E- `1 E" B1 ~9 @ J' q2 U6 D
结论:触发hover时,才会请求hover状态下地背景.这会造成闪烁,因此经常放在同一张背景图里通过翻转来实现. y+ X I# \8 f1 u7 v& n
注意:在图片no-cache地情况下,ie每次hover状态改变时,都会产生一次新请求.很糟糕.
4 D' A5 I+ X& a2009-05-13晚补充:上面地解释有误,更详细地解释请参考续篇.翻转技巧指地是sprite技术,例子:test_7b.html, 在ie6下不会产生闪烁.6 S2 N* Y9 Z, r" ^ a, e& K* I; r
8. js里innerhtml中地图片
" I9 |% a0 D( |<script type=text/javascript> var el = document.createelement('div'); el.innerhtml = '<img src=1.jpg />'; //document.body.appendchild(el);</script>测试:test_8.html
: {0 R. ~% T6 M4 o. e结论:只有opera不会马上请求图片.7 b9 z7 {8 ?0 A/ v2 y8 |, s, m
注意:当添加到dom树上时,opera才会发送请求.
* l0 [; ?" k3 e0 M3 K. ^+ b7 C2 @2 u/ V
更多网页制作信息请查看: 网页制作 |