移动端上的点击事件

刚接触手机的时候,前端工程师喜欢用click去处理点击/触摸事件。
渐渐地,通过体验和看过一些文章,我们知道手机上还有touch专用事件,于是我们开始专用touchstart或者touchend来处理触摸事件,然后我们就碰到了各种问题…

Click的延迟问题

click从功能上讲问题不大,但是响应有延迟,传说300毫秒,其实根据机能不同会有更长时间的延迟。

据说一些安卓机用click会出现其他的问题,我没碰到过所以不细说了。

各种touch先天不足

touch响应快,但是你碰到屏幕就是一个touchstart事件,离开屏幕就是一个touchend事件,就算你去拖动屏幕也会执行触发这两个事件,产生的问题我们叫误点击。

解决响应时间和误点击的几个方案

首先我这里不谈jqueryMobile。

那么我知道的几个解决方案为:

fastclick,https://github.com/ftlabs/fastclick;

MBP.fastButton,https://github.com/h5bp/mobile-boilerplate

zepto的tap和singleTap事件,http://zeptojs.com/

上面几个方案都可以很好的解决响应和误点击问题。

那么我们进入正题——“连点”问题

什么是“连点”?
当你点击一个层,而这个层因为事件控制而隐藏了,这时候恰巧这个层下面的区域点击的同一个位置也有点击事件被触发了,那么就是“连点”了。

这个问题发生在弹出层的情况比较多。

上面提到的三个方案在新的手机里面都不太容易(总有特殊情况)出现“连点”问题,但是在老的安卓里面,比如我手上的三星Note中fastclick就会出现连点。

而其他方案表现就很好,所以从这个角度fastclick基本被淘汰了。

还有一种“连点”!

连点还有一种情况,就是你可能在事件里面写了个window.location.href跳转,你这个跳转非常快的完成了,然后又恰巧你跳转的页面在你点击的位置也有个点击事件/链接,那么这个事件/链接也会被触发。
这个是点击问题中最丧心病狂的~
而且关键的是除了click和a标签本身,其他方案都无法避免这个问题。

所以请避免使用点击事件做跳转。

父子Dom的点击事件关系

如果我的一个大dom上有个点击事件,dom中的子dom也有个点击事件,那么点击子dom会执行谁的事件呢?

如果你用click和fastclick就都会执行,其他的方案是执行子dom的事件。

综上所述

如果你在项目中用了zepto,请优先用zepto的相关点击事件,来避免可能发生的问题。
当然了fastclick还有其他的响应功能,如果你需要的话可以在合适的时候去使用它。

iphone和其他平台载入页面时顺序问题

最近在用scrollTop的时候发现的一些问题。

在document.ready中使用scrollTop()获取当前滚屏的值。

假设页面有大于两屏的高度,先把页面拉到中间,然后刷新页面。

其他平台:

先将页面定位到刷新前的位置,然后获得滚动高度。

wap端(iPhone):

先获得滚动高度,再定位到刷新位置。

 

我在做lazyload的时候,因为这个问题iPhone的初始化出现了问题,在载入页面时无法正确的处理当前页面的图片加载。

 

暂时的解决方法有以下集中,

1、加个时间延迟,这样能保证页面跳转后执行初始化,但是要注意,如果你的时间延迟快过你页面构建的速度(ajax之类),还是无法读取到正确的滚屏高度。

2、价格window.scrollTop(0),因为获得高度默认为0,所以让设置他为0也可以达到相对正确的初始化。如果你要在页面加载的时候改变dom结构慎用。

浏览器缓存机制简介

这篇文章主要简单介绍浏览器缓存的机制,我们在做Server端响应时间优化的时候经常会接触到缓存的概念,例如经常会用到Memcached或Redis。我曾经使用缓存将原本一分钟才能获取的数据优化到了不到一秒的时间,当然,缓存也不是万能的,某些数据可以使用缓存或者必须使用缓存,有些数据则必须禁用掉缓存,确保每次请求返回的都是最新的数据,技术的运用方式是建立在业务的需求上的。

浏览器有一套自己的缓存机制,而在这个机制的基础上缓存规则的制定则主要依靠后端来实现,这属于一个合格的WEB开发者必须了解的内容。下文中提到的缓存概念,如果没有特殊说明都是指浏览器缓存,本文主要使用Chrome作为客户端,同时对Chrome开发者工具的一些细节进行了介绍。

什么是缓存?

引用Wikipedia上对Web cache的介绍,缓存就是:

A web cache is a mechanism for the temporary storage (caching) of web documents, such as HTML pages and images, to reduce bandwidth usage, server load, and perceived lag.

翻一下大意是:

WEB缓存就是临时存储WEB文档,例如HTML页面、图片等降低带宽使用、服务器负载、提升响应速度的一种机制。
我们使用的任何一个现代浏览器都支持缓存机制。

缓存在哪里?

IE浏览器:

我们可以通过IE的设置界面来查看缓存存放的位置:Internet选项->点击常规选项卡设置按钮->点击查看文件按钮即可自动打开缓存目录。如下图:

enter image description here

Firfox

查看Firefox浏览器缓存可以在Firefox地址栏输入about:cache来查看缓存详情,如图:

enter image description here

Chrome

Chrome并没有直接说明缓存目录、大小等具体信息,不过我们可以用Google查到,以Windows平台为例,Chrome的缓存目录在C:\Users\{{user name}}\AppData\Local\Google\Chrome\User Data\Default\Cache目录下。

Chrome Dev Tools NetWork简单介绍

首先我们对Chrome Dev Tools的NetWork功能做下简单的介绍。

当我们的浏览器向服务器发送请求时会携带一些基本的信息,如User-Agent、Cookie等,我们可以使用浏览器自带的开发者工具看到,如下:

// request header
GET /jquery.autocompleteV2.js HTTP/1.1
Host: 192.168.33.10
Connection: keep-alive
Cache-Control: max-age=0
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
DNT: 1
Referer: http://192.168.33.10/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2
Cookie: cmTPSet=Y; ylCookie=ylCookie; tma=86847064.57393759.1402022771631.1402022771631.1402022771631.1; tmd=6.86847064.57393759.1402022771631.
服务器根据请求返回响应(response),响应头信息,如下:

// response header
HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Sat, 07 Jun 2014 13:32:29 GMT
Content-Type: application/x-javascript
Last-Modified: Sat, 07 Jun 2014 07:21:44 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Content-Encoding: gzip
下图是Chrome Dev Tools下的网络请求的概览:

chrome_http_request_list

网络概览列表的Size Content栏,上边的数值Size表示响应大小,Size大小 = Content大小 + 响应头大小, Content表示响应内容实际大小,比如浏览器请求了一个实际尺寸为61093字节的文件,那么这里Content的值便为61093byte ÷ 1024 ≈ 59.7KB,Size值不一定大于Content的值,当我们在开启Gzip压缩的情况下Size的大小很可能小于Content的大小,开启Gzip后,尽管服务器没有直接告诉我们响应内容的Content-Length大小,但是浏览器拿到压缩后的响应内容是可以间接的反向计算出响应内容的原始大小的,还有一种情况是Content使用的是本地缓存,也就是服务器返回304状态码告诉浏览器继续使用缓存中的内容,Size的大小只是响应头的大小,Content大小为从缓存中读取的响应内容的大小。
当我们的光标移动到HTTP请求的timeline上时会显示网络请求时间花费的详细信息,如图:

http_timeline

这里涉及到几个名词,下面解释下Chrome NetWork Timeline状态名词的意义:

Blocking代表了等待当前已存在连接可用状态所花费的时间,相当于我们将请求A放入浏览器请求队列里面,浏览器依次处理队列里面的请求直到开始处理请求A所花费的等待时间。
Proxy代表了连接代理服务器所花费的时间。
DNSLookup代表了DNS查找花费的时间。
Connecting代表了创建连接所花费的时间,包括TCP连接建立、DNS查找、连接代理服务器与创建安全连接(SSL)所花费的时间总和。
Sending代表了发送请求数据所花费的时间。
Waiting代表了等待服务器响应所花费的时间。
Receiving代表了接收服务器响应内容花费的时间。
所以这里的Time Latency一栏Time代表了从我们创建请求到浏览器接收到服务器响应内容这个过程所花费的时间,Latency代表了从我们创建请求到服务器生成响应内容这段时间花费的时间。

缓存是如何工作的

更改Nginx配置,对所有js和css文件设置一套有效期为30天的缓存规则,Nginx站点配置添加代码:

location ~* \.(css|js)$ {
expires 30d;
}
重启Nginx服务使配置生效,清空浏览器缓存,模拟首次访问页面,刷新(请点击浏览器工具栏刷新按钮或使用右键菜单刷新功能刷新)页面。这时响应头会多出两个字段的数据:Cache-Control:和Expires,响应头变为了:

// response header
HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Sat, 07 Jun 2014 13:47:27 GMT
Content-Type: application/x-javascript
Last-Modified: Sat, 07 Jun 2014 07:21:44 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Expires: Mon, 07 Jul 2014 13:47:27 GMT
Cache-Control: max-age=2592000
Content-Encoding: gzip
Cache-Control: max-age=259200表示缓存将在该页面请求后的259200秒后过期。
Expires: Mon, 07 Jul 2014 13:47:27 GMT表示缓存将在2014年7月7号 13:47:27后过期,注意:使用Expires指定过期时间,如果服务器时间和客户端时间不一致(这个问题很常见,在写这篇博客时,我的Ubuntu服务器时间比标准时间慢了4分钟),这时候通过Expires指定过期时间将达不到我们预期的效果,幸运的是绝大多数浏览器(IE6.0都支持HTTP1.1,还用怕什么?)和HTTP Server都已经支持HTTP/1.1,所以当响应头同时有Expires和Cache-Control时浏览器会优先考虑Cache-Control。

那在缓存期有效的这段时间刷新页面浏览器是如何使用已缓存的内容的呢?好,再次刷新(刷新方式同上)浏览器,服务器返回了304的status code,请求头变为了:

// request header
GET /jquery.autocompleteV2.js HTTP/1.1
Host: 192.168.33.10
Connection: keep-alive
Cache-Control: max-age=0
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
DNT: 1
Referer: http://192.168.33.10/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2
Cookie: cmTPSet=Y; ylCookie=ylCookie; tma=86847064.57393759.1402022771631.1402022771631.1402022771631.1; tmd=6.86847064.57393759.1402022771631.
If-Modified-Since: Sat, 07 Jun 2014 07:21:44 GMT
注意这里多了个If-Modified-Since字段,该值就是第一次响应头返回的Last-Modified字段,当服务器收到浏览器发送来的请求头时根据该字段判断是否让浏览器使用缓存内容,若在Last-Modified指定的时间后文件发生了变化服务器返回的status code变为200,同时会将最新的响应内容发送给浏览器,就像我们首次请求一样。如果在Last-Modified指定的时间后文件没有发生变化,服务器将返回status code变为304告诉浏览器:“你可以继续使用之前缓存的内容”,响应头变为:

// response header
HTTP/1.1 304 Not Modified
Server: nginx/1.1.19
Date: Sat, 07 Jun 2014 14:01:50 GMT
Last-Modified: Sat, 07 Jun 2014 07:21:44 GMT
Connection: keep-alive
Expires: Mon, 07 Jul 2014 14:01:50 GMT
Cache-Control: max-age=2592000
如果这段时间请求的文件内容发生了变化,服务器返回的status code变为200,同时响应内容为请求资源的最新副本,响应头内容变为:

HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Sat, 07 Jun 2014 14:03:00 GMT
Content-Type: application/x-javascript
Last-Modified: Sat, 07 Jun 2014 14:02:56 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Expires: Mon, 07 Jul 2014 14:03:00 GMT
Cache-Control: max-age=2592000
Content-Encoding: gzip
当超出缓存有效期时,再次刷新页面,浏览器与服务器之间请求的协商过程也会验证请求资源是否被修改过,如果没有被修改缓存还是继续有效的,如果请求资源被修改过服务器将重新将请求资源的最新副本发送给浏览器。

页面刷新方式的区别

前面在演示时我们说到用指定的方式去刷新页面,那不同的刷新方式对于缓存会有什么效果呢?

一般常用有四种方式加载页面:

第一次请求时

首次请求初始化缓存机制,无特殊情况。

强制请求

强制请求一般是按下Ctrl + F5组合键来实现,强制刷新时浏览器会忽略一切缓存机制,告诉服务器“把最新的内容给我”,就像我们第一次打开这个页面一样。

一般刷新

常用的一般刷新方法有按下F5键或者在浏览器右键弹出菜单中刷新页面,这时浏览器与服务器之间将按照之前协商好的缓存协议进行对话。

点击浏览器转到按钮

通过浏览器地址栏转到一个已经打开过的页面浏览器将根据已缓存的请求资源是否已经过期来判断是否和服务器进行对话,如果缓存没有过期浏览器直接从缓存中读取数据作为响应内容,浏览器不会与服务器进行对话,不会发送任何的HTTP请求。

更详细的请参考下面的链接:

What requests do browsers’ “F5” and “Ctrl + F5” refreshes generate?
Behind Refresh Button
如何有效的控制缓存?

前面我们说过,当通过地址栏跳转到一个已经访问过的页面时,如果在之前设置的缓存有效期之内浏览器将不会与服务器进行任何协商直接读取本地缓存内容作为响应内容,那即使我更新了一段css代码,那么老访客看到的可能还是从本地读取的老旧的样式表文件,那怎么样才能让我更新的内容强制让客户端与服务器进行对话确认呢?简单:最常见的办法是在文件路径后面添加指定版本号,例如:

每次对文件的修改都要更新版本号,通过这种方式强制让浏览器与服务器进行对话,解决缓存的负面问题。

缓存的意义

合理的设置客户端端缓存可以最大限度的节省服务器网络流量开销、减轻服务器负载、提升用户体验等。

 

原文地址>>

Speed Up Your Website

原文地址:http://www.codeproject.com/Articles/26376/Speed-Up-Your-Website-By-Example

说在前面的:这个文章是08年的,比较老了,带着批判和找不同的心态去研究一下,会有收益的。

 

部分翻译:(翻译来自CSDN)

为什么减少请求数量
请求执行顺序:
e.g.: index.htm and then global.css, spring.css, logo.jpg, menu1.jpg, menu2.jpg, menu3.jpg, 1×1.gif, corner1.gif, common.js, validation.js etc…)
在加载页面时,浏览器从URL中(src)中提取头链接href={url},css文件链接和发送每个请求的资源。
大体上,浏览器在每台客户机提出页面请求时只并发下载2-4个资源请求,(取决于http和浏览器版本),一般来说,Firefox要比IE略好一些.
结论:请求与连接越少,则响应越快.
怎样减少请求数量?
减少文件数目(css,js,image)
合并文件(尽可能的)所有的CSS文件尽量合并归一,所有的JS文件尽量合并归一,

使用浏览器缓存
当第一次请求时,减少资源,之后将依靠cache机制,不必再请求资源。
使用”expires”头。

优化html
为什么优化它?
大体来说html只耗20%的时间而其它(CSS,Javascript,images)要消耗80%的时间
html包裹所有的对象(标签控件)和styles,这些都提供与浏览器进行解析,解包和render(生成).
由于浏览器之争(竞争)和x/html/css的兼容问题.浏览器被设计为两种模式:普通(快模式,信任模式),quirk模式(必须要验证HTML/CSS,找到和”原谅错误”)
怎么优化它?
1.减少下载时间
将冗长的一页尽量载减为多页
2.快速生成render
使用非常简单的设计
standard vs quirk mode两种模式的选择.
建立信任的standard模式(前提,设计者达到专业水平遵循标准)以使得浏览器使用最优化的解析
切换模式为标准模式

移除inline CSS改为外部CSS引用(减少内部脚本书写,如document.write())
如果遵循以上原则:浏览器会在生成内容与应用CSS和脚本改变布局之间踌躇,这种情况下会暂停内容的生成,所以要引用外部CSS,JS。
如果不遵循这条原则:外部文件意味着多了一个外部资源请求,如果主页CSS,JS很少,则用内联,减少请求数,加快响应速度。

减裁内容

少用table,转用div.为什么呢?浏览器不能生成实体控件对象(标签对应)直到捕捉到标签尾ie.</table>

若布局用bigger outer,(超多标签)

 

优化image
为什么要优化?
image消耗大量下载时间及带宽,在这方面节省时间会得到卓著的功效。
怎样优化?
1.减少图片的使用频率
2.使用css rollovers代替图片链接。
3.设置恰当的宽度与高度(尽量小)
4.仔细地选择图片的颜色与格式;
GIF: works best for solid colors and sharp-edged transitions from one color to other, Maximum colors: 256.
JPEG: works best for continuous gradations of many colors or grey tones.

 

5.避免动画与flash
6.背景尽量用颜色而不用图片
7.不要把图片放在服务器的多个目录上,(避免在两个请求中,得不到最优从第一次缓存图片)
8.在下载大图片时用进度条掩饰,这是个小把戏,但不会引起用户的反感.
9.尽量使用小于10kb的一张图片,尽量不要把大图裁成小图,因为这样会增加request的次数。
使用CSS Sprites或image maps代替
可以把零碎的一些小图拼成一张大图,然后使用css sprites或image maps。

 

注意细节 提高CSS的网页渲染效率

CSS学习越深入,我们需要关注的细节之处就越多,今天我们通过11个注意点来提高CSS的网页渲染效率

1、十六进制的颜色值对位数与大小写

编写十六进制颜色值时你可能会用小写字母或省略成3位数,关于这写法没找到确实的数据证明对浏览器的渲染效率是否有影响,但十六进制的颜色值默认标准是大写及6位数标注。在未知情况下不希望冒险而降低了渲染的效率。
* 不赞成 – color:#f3a;
* 建议用 – color:#FF33AA;

2、display与visibility的差异

他们用于设置或检索是否显示对象。display隐藏对象不保留物理空间,visibility为隐藏对象保留占据的物理空间。当浏览器渲染被占据的物理空间时,会有所消耗资源。
* 不赞成 – visibility:hidden;
* 建议用 – display:none;

3、border:none;与border:0;的区别

和display与visibility的关系类似,分别不保留与保留空间。更多的是border:0;尽管可以隐藏掉边框,但它会为你保留border-color/border-style的使用权。
* 不赞成 – border:0;
* 建议用 – border:none;

4、不宜用过小的背景图片平铺

一张宽高1px的背景图片,虽然文件体积非常之小,但渲染宽高500px的板块需要重复平铺2500次。提高背景图片渲染效率跟图片尺寸及体积有关,最大的图片文件体积保持约70KB。
* 不赞成 – 宽高8px以下的平铺背景图片
* 建议用 – 衡量适中体积及尺寸的背景图片

5、慎用IE滤镜

IE的滤镜除了比较消耗资源外也有兼容性问题。当中有让PNG透明的滤镜,可采用GIF或JPG似透非透的办法来避免使用此滤镜。建议只在IE6应用GIF透明,因为IE7以上已经支持了PNG透明。
* 不赞成,滥用IE滤镜因为消耗资源外也有兼容性问题。
* 建议用,最好选择其它方法能避免使用滤镜。

6、*{ margin:0; padding:0;}避免浏览器样式差异

*号通配符把所有标签都初始化一遍,浏览器的渲染消耗一定的资源。有部分在标签在不同浏览器上几乎无差异,或是某些已经不推荐使用的标签(因为你不会去用它),它们不需通配符要重新初始化一遍这样做能节省一点资源。
* 不赞成,使用*号通配符
* 不赞成,div span button b table等标签纳入通配符控制内外填充样式
* 建议用,有选择性地使用通配符控制内外填充样式。

7、不要添加额外的标签来描述class或id

如果你有一个选择器是以id作为关键选择符,请不要添加多余标签名上去。因为ID是唯一的,你不要为了一个不存在的理由而降低了匹配的效率。
* 不赞成 – button#backButton { }
* 不赞成 – .menu-left #newMenuIcon { }
* 建议用 – #backButton { }
* 建议用 – #newMenuIcon { }

8、尽量选择最特殊的类来存放选择器

降低系统效率的一个最大原因是我们在标签类中用了过多的选择符。通过添加 class 到元素,我们可以将类别进行再细分为class 类,这样就不用为了一个标签浪费时间去匹配过多的选择符了。
* 不赞成 – treeitem[mailfolder=”true”] > treerow> treecell { }
* 建议用 – .treecell-mailfolder { }

 9、避免子孙选择符

子孙选择符是CSS中最耗资源的选择

 

【转】网站默认图标shortcut icon和icon的区别

<link rel="shortcut icon" href="http://example.com/favicon.ico" type="image/vnd.microsoft.icon"><
link rel="icon" href="http://example.com/favicon.ico" type="image/vnd.microsoft.icon">

建议包含上面两行HTML代码,可以支持ico格式的图标

然而,只有第一行是必须的,因为“shortcut icon”字符串将被多数遵守标准的浏览器识别为列出可能的关键词(“shortcut”将被忽略,而仅适用“icon”);而Internet Explorer将会把它作为一个单独的名称(“shortcut icon”)。这样做的结果是所有浏览器都可以理解此代码。只有当希望为新浏览器提供另一种备用图像(例如动画GIF)时,才有必要添加第二行。

在HTML中,link元件必须在head元件里(在<head>和</head>之间)。

对于XHTML,link必须使用“ />”结束(或“></link>”),而不可以使用“>”结束。

href可以,但不必,指向/favicon.ico的位置。它可以指向任何URL。

图像通常可以使用任何被浏览器支持的图像格式。

.ico文件格式通常可以被所有可以显示favicon的浏览器读取。

设置服务器,以发送正确的MIME标识:
ICO 文件 image/vnd.microsoft.icon(或者亦可出于兼容性原因使用image/x-icon。然而最好使用IANA注册的MIME类型,因为多数主流浏览器现在支持它)
GIF 文件 image/gif
PNG 文件 image/png

使用适当的分辨率和色深。
ICO:包括多种分辨率(最常使用的是16×16和32×32,Mac OS X有时使用64×64和128×128)以及位深(比特每像素)(多数使用4、8、24 bpp,即16、256和1600万色)。
GIF: 使用16×16,256色。
PNG: 使用16×16,256色或24位。

注意:当favicon.ico被置于文档根目录时,将会被一些不处理link元件的浏览器找到,即使没有您的站点上没有指向它的链接。

标准化

Favicon 功能最早由微软创设,而微软公司的Internet Explorer网页浏览器会对每一个网站都请求favicon。微软支持的link标签不遵从World Wide Web Consortium(W3C,万维网联盟)的HTML建议[1],因为:

rel属性必须包含一个用空格作分隔符的link类型的列表,所以一个包含两词的link类型不能被遵守标准的浏览器理解。
“.ico”文件类型(一种用于Microsoft Windows上图标的光栅格式)没有一个注册的MIME类型,而且似乎在当时也不能被多数浏览器理解。然而2003年,这一格式在IANA获得注册,其 MIME类型是image/vnd.microsoft.icon,进而消除了此问题的第一部分。
在网站上使用保留地址(reserved location)与Architecture of the World Wide Web(互联网的结构)矛盾,同时被认为是link squatting(链接劫持)或URI squatting(URI劫持)。

Mozilla 浏览器通过一种遵从Web标准的方法添加了对favicon的支持。它采用rel=”icon”并允许网络设计人员添加任何支持的图像格式的 favicon。例如<link rel=”icon” type=”image/png” href=”/path/image.png”>。后来鉴于此功能将被用于所有新内容,多数浏览器都对此功能增加了支持。

关于页面加载后执行js的一点说道

之前做过一个页面图片处理的页面碰到过这个问题,今天回顾一下。

需求是页面会加载很多图片,加载图片后要对图片的位置、尺寸记录,然后缩放到指定大小,还要根据位置设置相应的弹出框。

那问题就是用一般的jquery{$(function(){})}无力解决这个问题,因为各个浏览器对处理顺序的解释不同。

chrom会在图片解析之前就执行函数,那么就判断不到图片正确的尺寸,页面就会错位。

js里面有个window.onload事件可以解决这个问题。

window.onload需要当页面完全加载完成的时候才会触发,包括图片、flash等富媒体。

DOMReady只判断页面内所有的DOM节点是否已经全部完成,至于节点中的内容是否加载完成并不关心。

(*摘自曹刘阳的《编写高质量代码——Web前端开发修炼之道》)

关于div遮盖flash的问题总结

首先说ff和chrom,这两个浏览器实际上是可以根据正常逻辑解决遮盖问题,所以一般来说正常操作就好。

兼容上主要是ie产生的问题。当flash的wmode属性为Transparent 问题并不是很大,一般逻辑仍然能解决。

但是如果你引用的flash没写参数,或者参数不是Transparent的时候,ie就会认为flash在最上面。

ps:一些flash的wmode必须使用window属性,以保证输入法和flash的速度。

解决方法:

iframe>flash一句话解决问题。

只要在flash和div中间再加一个iframe就可以解决覆盖的问题。

但是有个问题需要注意,iframe遮在flash上面的效果是,iframe与flash交叉的部分会透明掉。

也就是说你的div必须是个矩形,如果是个不规则图形,flash上会有透明的地方。

情况就是这样,希望对你有帮助。

HTML5 Pack for Dreamweaver CS5——HTML5开发工具

下载地址:http://www.xyhtml5.com/html5-development-tools.html

出了5.5这个补丁不建议再用,会影响自动排版的规则!

Dreamweaver CS5和HTML5 Pack

安装 HTML5 Pack 之后,可以在 Dreamweaver CS5 中使用以下特性和支持:

HTML5 代码提示

HTML5 代码提示与 Dreamweaver 中的其他代码提示相似。在 Code 视图中,开始输入感兴趣的标记,Dreamweaver 会提供代码提示。

除了提示新的 HTML5 标记之外,Dreamweaver 还为现有标记提供新属性和值代码提示(例如,input 标记的新属性和值)。

CSS3 支持和代码提示

除了 HTML5 代码提示之外,HTML5 Pack 还在 Dreamweaver CS5 中添加 CSS3 代码提示。新的代码提示并不支持每个 CSS3 选择器和属性,而是只支持 W3C 规范中当前完成的选择器和属性。

另外,这个扩展包含对 –moz、-webkit 和 -o CSS 属性的基本支持。

多屏幕预览和媒体查询支持

Multiscreen Preview (File > Multiscreen Preview) 可以按三种不同的屏幕大小预览正在编辑的页面:手机大小、书写板大小和桌面。

预览所用的手机、书写板和桌面尺寸设置为默认大小,但是可以通过单击 Multiscreen Preview 面板中的 Viewport Sizes 按钮方便地调整这些大小。

确定目标设备的尺寸之后,可以通过在 HTML 页面中添加媒体查询为不同大小的设备指定不同的样式。通过单击 Multiscreen Preview 对话框中的 Add Media Queries 按钮添加媒体查询。通过图形化界面添加和读取媒体查询的功能是对 Dreamweaver CS5 的重大改进。通过使用不同的媒体查询,可以让页面在手机、书写板设备和标准桌面浏览器中显示不同的外观。

Live 视图中的 video audio 标记支持

video 和 audio 标记是新的 HTML5 标记,可以用它们在浏览器中直接播放视频和音频文件,而不需要外部插件或播放器。从本质上说,有了 HTML5,浏览器就变成了播放器。这个功能需要安装 QuickTime。

Webkit(Live 视图的显示引擎)已经更新了,如果有适当的标记,就可以在 Live 视图中播放视频和音频。另外,Live 视图中会显示一些(并非所有)CSS3 属性。

HTML5 初学者布局

这个扩展安装两个使用 HTML5 语法的新布局,让开发人员更容易开始使用 HTML5 布局。

可以通过 New Document 对话框 (File > New) 使用这些布局和其他 CSS 布局。

Design 视图中更好的显示

在过去,当 Dreamweaver 无法识别某个标记时,会简单地忽略它,这导致 Design 视图无法准确地反映设计的最终效果。对于 HTML5 标记,Design 视图已经改进了,它会留出相关内容占据的区域,让您能够更好地了解此内容如何影响页面布局的其余部分。