《Socket性能测试指导精品资料.doc》由会员分享,可在线阅读,更多相关《Socket性能测试指导精品资料.doc(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 kylinPET实现Socket性能测试网络通信协议类型包括文本协议(如HTTP)或二进制协议(如IGMP)、混合协议(二进制与文本混合,如DNS)。kylinPET提供了HTTP协议用于WEB/WebService业务、SIP协议用于IMS业务、RTSP、IGMP、MLD协议用于IPTV业务。但为了支持更多的协议(使用TCP或UDP连接的业务),工具提供了二进制协议(包括混合协议)、文本协议,这两种协议基本包括了大部分的网络协议。通过它们可以实现下面协议的测试:WAP、GTP、RMI等等,可通过抓包录制,然后修改里面可变部分为参数,要求熟悉这些协议。1.1 kylinPET性能测试工具下
2、载链接可到kylinPET的官方网站:下载1.2 高效创建脚本通过抓包工具录制协议交互过程的文件创建业务交互流程图,大大减少手工操作脚本,高效、精确创建业务模拟脚本。1.3 图形化表示业务流程图形化直观表示协议交互流程,直观描述状态机。并提供第二状态机“Unexpected”流程图实现心跳、错误流程处理。1.4 虚拟IP 每个用户一个虚拟IP,支持系统虚拟IP(需要在操作系统配置多IP)或工具虚拟IP(不需要在操作系统配置IP)。配置路由方法参照kylinPET 三种典型组网介绍IP欺骗与路由设置文档。1.5 详细日志,方便问题定位业务运行错误,将输出详细的日志信息,方便用户定位业务错误或失败
3、原因。如输出业务运行的轨迹及最后失败时发送与收到的报文。1.6 支持TLS/SSL(HTTPS)支持TLS/SSL,支持单向与双向认证。1.7 支持调用外部JAVA类通过调用外部JAVA类,实现私有算法(加密、解密)或工具无法完成的功能。需要用户自己实现处理逻辑的JAVA代码,实现参照kylinPET 调用外部java类实现扩展文档。2 文本协议交互流程通过该例子,介绍如何使用工具完成文本业务测试,及介绍工具的界面使用方法。操作步骤:2.1 使用抓包工具录制业务使用wireshark或ethereal工具通过抓包方式(嗅探)录制业务交互流程,然后保存为以cap或pcap后缀的文件名。Scrip
4、ter通过读取抓包文件创建业务交互流程,发送节点内容为抓包文件发送报文的应用层部分。注意:1、 手工编辑业务流程工作量大,因此使用抓包方式录制业务交互流程再生成业务脚本,提高效率。2、 保存文件名及目录只能为英文,而不能为其他语言,如中文3、 kylinPET工具提供过滤功能,因此不需要对抓包进行过滤,但如果过滤时需要注意过滤时不能把分片过滤。2.2 Scripter创建流程脚本2.2.1 新建业务脚本点击“文件” - “新建”或者“工具栏”的“新建” 按钮。2.2.2 录制设置点击“工具” - “录制”或者“工具栏”的“录制” 按钮,然后,在弹出的录制配置窗口选择录制方式为“Cap File
5、”(抓包文件方式),输入过滤规则。注意:1、承载在TCP上时,抓包文件保存时不能只过滤协议报文,需要把整个TCP交互过程都保存到文件(SYN - SYN_ACK - ACK) 。可通过IP与端口过滤保存业务交互过程2.2.3 产生业务脚本流程双击“ Request” 查看消息:双击“Response” 查看消息:说明:录制产生的脚本,发送消息为发送报文的内容,工具不会自动关联参数,如果需要关联参数,需手工进行配置;接收消息只设置超时值,默认超时时间内接收到报文,则认为报文正确,如果需要判断报文是否正确,可以通过“文本检查”方式,或者通过“外部调用”方式判断。2.2.4 编辑脚本1) 设置参数列
6、表参数列表值用于业务模拟时替换对应的参数,实现不同用户不同的参数值。创建“index”参数,初始值为1,递增步值为1,用于替换发送消息的参数index。2) 替换字符串为参数修改发送消息的1为参数值“index”,运行时将使用参数值替换index。3) 判断响应消息是否正确A. 文本检查方式如响应消息包括abc文本则认为正确B. 外部调用方式使用指导参照调用外部java类实现扩展,如果通过外部类判断响应消息 是否错误,需在KylinPETImpl的receive方法实现处理逻辑,设置该接收节点(通过节点名称判断是哪个节点)的result值为“error” 。说明:result为父类Abstra
7、ctKylinPET的成员变量4) 提取响应消息的内容为参数值A. 关联参数界面设置如通过“左右方式”得到参数值,点击接收界面的“添加”按钮:当响应消息包含abcd,则abcd为参数name的值。B. 外部调用方式使用指导参照调用外部java类实现扩展。2.2.5 Scripter保存脚本点击“文件” - “保存”或者“工具栏”的按钮。2.3 Scripter调试(回放)脚本点击 “工具栏”的按钮运行脚本,通过日志调试脚本是否正确。虚拟IP的脚本调试可通过Controller的“调试脚本”实现场景调试。1) 按钮介绍 为运行按钮,点击运行脚本进行调试 为停止按钮,点击停止运行脚本 为导出日志按
8、钮,如果日志太多,需要查找或过滤(如过滤Error或Excepiton关键字找出错误日志),可导出到文件,然后通过UE或NotePad+等软件分享。2) 红色代表错误或异常日志内容包含:“Error:”或“Exception:”关键字3) 黑色为业务消息日志如发送日志或响应日志4) 蓝色为分隔信息或统计信息 runTime:表示整个脚本运行时间 requests:请求(发送)消息个数 responses:响应(接收)消息个数 throughput:吞吐量 Transaction:脚本中事务统计2.4 Controller与Analysis使用介绍详细参照RTSP(VoD IPTV)业务使用指导
9、的Controller与Analysis使用介绍。3 文本协议多分支流程 业务流程如果需要支持多分支流程,编辑如上图,在处理branch节点时,将调用外部类KylinPETImpl的receive方法,设置result值为下一个节点的名称;如设置result值为200 ,则表示业务流程下一个节点为200节点,后面将执行发送a节点;如设置为“error”则表示处理失败,业务流程下一个节点为other(包括错误流程或其他值) 文本协议如果需要支持多分支流程,需实现外部类KylinPETImpl的receive方法,实现处理branch节点时设置result值为下一个节点的名称。如设置result值
10、为A ,则表示业务流程下一个节点为A节点;如设置为“error”则表示处理失败,业务流程下一个节点为other(包括错误流程或其他值)使用指导参照调用外部java类实现扩展。注意:1、 文本协议与二进制协议的branch节点不需要勾选“外部调用”,只要存在branch节点则一定调用KylinPETImpl的receive方法4 二进制协议交互流程4.1 使用抓包工具录制业务参照“2.1 使用抓包工具录制业务”4.2 Scripter创建流程脚本4.2.1 新建业务脚本点击“文件” - “新建”或者“工具栏”的“新建” 按钮。4.2.2 录制设置点击“工具” - “录制”或者“工具栏”的“录制”
11、 按钮,然后,在弹出的录制配置窗口选择录制方式为“Cap File”(抓包文件方式),输入过滤规则。注意:1、承载在TCP上时,抓包文件保存时不能只过滤协议报文,需要把整个TCP交互过程都保存到文件(SYN - SYN_ACK - ACK) 。可通过IP与端口过滤保存业务交互过程4.2.3 产生业务脚本流程双击“ Request” 查看消息:说明:左边为16进制值,右边为对应的ASCII值。双击“Response” 查看消息:说明:录制产生的脚本,发送消息为发送报文的内容,工具不会自动关联参数,如果需要关联参数,需手工进行配置;接收消息只设置超时值,默认超时时间内接收到报文,则认为报文正确,如
12、果需要判断报文是否正确,可以通过“文本检查”方式,或者通过“外部调用”方式判断。4.2.4 编辑脚本1) 设置参数列表参数列表值用于业务模拟时替换对应的参数,实现不同用户不同的参数值。创建“index”参数,初始值为1,递增步值为1,用于替换发送消息的参数index。2) 替换内容为参数修改参数值“index”,运行时将使用参数值替换index。说明:1. 二进制协议内容编辑介绍见kylinPET 帮助指导文档里的“3.7 请求消息(发送节点)”修改方法:A. 手动修改手动修改16进制值,index的16进制值为7b 69 6e 64 65 78 7d:其中ascii符号“”值对应的数值为12
13、3,16进制为7b;其中ascii符号“i”值对应的数值为105,16进制为69B. 粘贴修改可通过复制“index”内容(可打开文本文档输入index后选择、复制),然后选择16进制区对应的位置,点击按钮插入,工具自动将“index”修改为对应的16进制值。比手动修改更方便,且不容易出错。3) 判断响应消息是否正确A. 文本检查方式如响应消息包括abc文本则认为正确B. 十六进制检查方式表示查找三字节,第一字节为aa,第二字节为0a,第三字节为0b说明:一个字节需要用2个字母表示,如aa;必须以0x开头,否则认为检查文本C. 外部调用方式参照“ 2.2.4 编辑脚本流程”的“3. 判断响应消
14、息是否正确”4) 关联参数(提取响应消息的内容为参数值)A. 左右方式如通过“左右方式”得到参数值,点击接收界面的“添加”按钮:0xaabb表示查找两字节,第一字节为aa ,第二字节为bb。当内容为aabb01020304ccdd时,提取到的name参数的值为01020304说明:一个字节需要用2个字母表示,如aa;必须以0x开头,否则认为检查文本B. 外部调用方式通过外部扩展类实现参数值得提取,适合复杂规则,无法使用工具提供的多种方式,使用指导参照调用外部java类实现扩展。4.2.5 Scripter保存脚本点击“文件” - “保存”或者“工具栏”的按钮。4.3 Controller与An
15、alysis使用介绍详细参照RTSP(VoD IPTV)业务使用指导的Controller与Analysis使用介绍。5 私有算法加密/解密下面列举几个工具无法支持的场景,需要用户实现扩展类:1) 发送特殊标识给服务器,而这些内容是使用私有算法加密的,工具无法模拟加密算法。2) 工具不支持获取响应消息里的内容,因为获取算法比较复杂解决方法,需要用户在界面勾选“调用外部”,然后实现外部java类。详细介绍参照kylinPET 调用外部java类实现扩展文档6 二进制协议多分支流程参照“3 文本协议多分支流程”7 复杂的业务流程有时业务流程交互比较复杂,可能涉及到丢包重传、循环、分支、心跳;kyl
16、inPET图形化编辑完全支持这些场景。流程图编辑技巧与规则参照kylinPET 帮助指导文档“3.5 图形界面”下的“3.5.1 图标库”与“3.5.3 画图规则”、“3.5.4 图形制作技巧”。8 多业务(协议)组合文本或二进制可以跟其他协议组合完成一个业务,文本或二进制协议获取参数供作为其他协议的输入,或者反过来其他协议获取参数作为文本或二进制协议的输入。多协议组合操作介绍参照kylinPET 多协议组合文档。9 被动变主动当第一个接收节点在发送节点前,工具认为是被动流程,否则为主动流程。被动流程时,工具自动将第一个被叫节点的超时时间修改为65535秒,并启动50个被叫流程。如果不希望被动
17、流程一下子启动50个流程,而希望被动流程按照并发模型运行,即每秒启动多少个被叫用户,则配置“被动变主动”。10 迭代循环运行用户为保持服务器每秒处理一定的并发用户数,可通过设置“运行次数”为“一直运行,结束后又重新开始运行”方式,使用户一直处于运行中,保持一定的在线用户数。11 其他11.1 通过Monitor Agent监控服务器资源业务性能测试时,通常还需要记录业务服务器的资源数据,如CPU、内存、线程数、I/O、吞吐量,将它们与运行日志、或指标数据进行曲线对比,则可展示某段时间的资源指标值、普通指标值,这样可辅助定位性能问题。如,用户失败数量在某时刻很高,是否由于CPU占用太高导致。操作
18、方式见kylinPET HTTP(WEB)业务使用指导文档的“2.4.7 创建监控资源代理器”。11.2 通过“阈值”设置告警或停止业务性能测试时,通常还需要记录超过阈值的信息,如CPU超过60%告警通知、事务时间超过某个值时告警通知、失败率超过多少时停止测试。通过监控指标项设置阈值告警或停止测试场景,操作方式见kylinPET HTTP(WEB)业务使用指导文档的“2.4.8设置阈值”。附录资料:web前端面试题1. W3C标准有哪些?W3C推行的主要规范有HTML,CSS,XML,XHTML和DOM(Document Object Model)。2. 谈谈Js的内存泄露问题。3. 谈谈对H
19、tml 5的了解。4. 谈谈对CSS 3的了解。5. 用js实现随即选取10-100之间的10个数字,存入一个数组,并排序。var iArray = ;funtion getRandom(istart, iend) var iChoice = istart - iend +1; return Math.floor(Math.random() * iChoice + istart;for(var i=0; i10; i+) iArray.push(getRandom(10,100);iArray.sort();6. 把两个数组合并,并删除第二个元素。var array1 = a,b,c;var
20、bArray = d,e,f;var cArray = array1.concat(bArray);cArray.splice(1,1);7. Js面向对象的几种方式。8. 请谈谈原型方式构造对象的特点。9. 在Css中那个属性会影响dom读取文档流的顺序。答: float属性。10. 请介绍几种用div实现两列布局的方案(兼容),另外要考虑文档流的加载。11. 谈谈css在浏览器中的兼容问题,详细谈谈IE6的一些bug,以及解决方案。12. 谈谈你对闭包的理解。以及如何实现js方法的重写。HTML & CSS1.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义? 首
21、先我讲讲如何触发两种模式: 加入xml头部声明可以触发IE浏览器的Quirks mode,触发之后,浏览器解析方式就和IE5.5一样,拥有IE5.5一样的bug和其他问题,行为(Javascript)也是如此。 IE6的触发 在XHTML的DOCTYPE前加入XML声明 IE7的触发 在XML声明和XHTML的DOCTYPE之间加入HTML注释 IE6和IE7都可以触发的 在HTML4.01的DOCTYPE文档头部加入HTML注释 其次是这样的意义 各个浏览器的混杂模式,基本就是各个浏览器的私有模式,不相互兼容。所以,除非是为了兼容的问题,比如你不想修改很久很久以前做的IE ONLY的网页,否
22、则刻意触发混杂模式没有任何意义。2:行内元素有哪些?块级元素有哪些?CSS的盒模型?一.行内元素和块级元素有哪些?块级元素information on authorlong quotationpush buttontable captiondefinition descriptiondeleted textgeneric language/style containerdefinition listdefinition termform control groupinteractive formheadingheadingheadingheadingheadingheadinghorizont
23、al ruleinline subwindowinserted textfieldset legendlist itemclient-side image mapalternate content container for non frame-based renderingalternate content container for non script-based renderinggeneric embedded objectordered listparagraphpreformatted texttabletable bodytable data celltable footert
24、able header celltable headertable rowunordered list行内元素anchorabbreviated formacronymbold text styleI18N BiDi over-ridelarge text styleforced line breakpush buttoncitationcomputer code fragmentdeleted textinstance definitionemphasisitalic text styleinline subwindowEmbedded imageform controlinserted t
25、exttext to be entered by the userform field label textclient-side image mapgeneric embedded objectshort inline quotationsample program output, scripts, etc.option selectorsmall text stylegeneric language/style containerstrong emphasissubscriptsuperscriptmulti-line text fieldteletype or monospaced te
26、xt styleinstance of a variable or program argument二.行内元素与块级元素有什么不同?1.尺寸-块级元素和行内元素之间的一个重要的不同点行内元素和widthW3C CSS2 标准规定行内元素、非置换元素不会应用width属性。以下例子中,对行内元素应用了width:200px,你可以看到,根本就没有什么效果。行内元素和heightW3C CSS2 标准规定行内元素、非置换元素不会应用height属性,但是盒子高度可以通过line-height来指定。以下例子,对行内元素应用了height:50px,你可以看到什么效果都没。行内元素和padding
27、你可以给行内元素设置padding,但只有padding-left和padding-right生效。以下例子,行内元素应用了padding:50px。你可以看到对左右的内容有影响,但是对上下没影响。行内元素和margingmargin属性也是和padding属性一样,对行内元素左右有效,上下无效。下面的例子,对应用了margin:50px,你可以看到左右边缘是生效了但是内容上下却没有。记住对行内元素设置宽度width 无效。设置高度height 无效,可以通过line-height来设置。设置margin 只有左右margin有效,上下无效。设置padding 只有左右padding有效,上下
28、则无效。注意元素范围是增大了,但是对元素周围的内容是没影响的,看图上效果就知道了 盒子模型W3C 组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落、列表、标题、图片以及层。盒模型主 要定义四个区域:内容(content)、边框距(padding)、边界(border)和边距(margin)。对于初学者,经常会搞不清楚 margin,background-color,background- image,padding,content,border之间的层次、关系和相互影响。这里提供一张盒模型的3D示意图,希望便于你的理解和记忆。每个H
29、TML元素都可以看作一个装了东西的盒子,盒子里面的内容到盒子的边框之间的距离即填充(padding),盒子本身有边框(border),而盒子边框外和其他盒子之间,还有边界(margin)。盒模型的实际宽度关于盒模型,还有以下几点需要注意:对于块级元素(display:block),未浮动的垂直相邻元素的上边界和下边界会被压缩,例如:有上下2个元素,上元素的下边界为5px,下面元素的上边界为20px,则实际2个元素的间距为20px(2个边界值中较大的值)。如图所示。注1. 块级元素(display: block)每个块级元素都从一个新行开始,而且其后的元素也需另起一行开始,标题、段落、表格、层、
30、body等都是块级元素。块级元素只能作为其他块级元素的子元素,而且需要一定的条件。内联元素,例如、等,定义上下边界不会影响到行高(line-height),内联元素距离上一行元素的距离由行高决定,而不是填充或边界。注2. 内联元素(display:inline)内联元素不需要在新行内显示,而且也不强迫其后的元素换行,如a、em、span等都为内联元素。内联元素可以为任何其他元素的子元素。浮动元素(无论左或者右浮动)边界不压缩,且若浮动元素不声明宽度,则其宽度趋向于0,即压缩到其内容能承受的最小宽度。如果盒中没有内容,则即使定义了宽度和高度都为100%,实际上只占0%,因此不会被显示,此点在采取
31、层布局的时候需特别注意。边界值可为负,其显示效果各浏览器可能不相同。填充值不可为负。边框默认的样式(border-style)为不显示(none)。3.CSS引入的方式有哪些? link和import的区别是?本质上,这两种方式都是为了加载CSS文件,但还是存在着细微的差别。差别1:老祖宗的差别。link属于XHTML标签,而import完全是CSS提供的一种方式。link标签除了可以加载CSS外,还可以做很多其它的事情,比如定义RSS,定义rel连接属性等,import就只能加载CSS了。差别2:加载顺序的差别。当一个页面被加载的时候(就是被浏览者浏览的时候),link引用的CSS会同时被加
32、载,而import引用的CSS会等到页面全部被下载完再被加载。所以有时候浏览import加载CSS的页面时开始会没有样式(就是闪烁),网速慢的时候还挺明显(梦之都加载CSS的方式就是使用import,我一边下载一边浏览梦之都网页时,就会出现上述问题)。差别3:兼容性的差别。由于import是CSS2.1提出的所以老的浏览器不支持,import只有在IE5以上的才能识别,而link标签无此问题。差别4:使用dom控制样式时的差别。当使用javascript控制dom去改变样式的时候,只能使用link标签,因为import不是dom可以控制的。大致就这几种差别了(如果还有什么差别,大家告诉我,我再
33、补充上去),其它的都一样,从上面的分析来看,还是使用link标签比较好。标准网页制作加载CSS文件时,还应该选定要加载的媒体(media),比如screen,print,或者全部all等。这个我到CSS高级教程中再给大家介绍。注:1,网友comehope在留言中提出了另一种区别。差别5:import可以在css中再次引入其他样式表,比如可以创建一个主样式表,在主样式表中再引入其他的样式表,如:main.css-import “sub1.css”;import “sub2.css”;sub1.css-p color:red;sub2.css-.myclass color:blue这样更利于修改和
34、扩展猴 子提示:这样做有一个缺点,会对网站服务器产生过多的HTTP请求,以前是一个文件,而现在却是两个或更多文件了,服务器的压力增大,浏览量大的网站还是 谨慎使用。有兴趣的可以观察一下像新浪等网站的首页或栏目首页代码,他们总会把css或js直接写在html里,而不用外部文件。4.CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?内联和important哪个优先级高?5:前端页面有哪三层构成,分别是什么?作用是什么?最准确的网页设计思路是把网页分成三个层次,即:结构层、表示层、行为层。网页的结构层(structural layer)由 HTML 或 XHTML 之类的标记语言负责创建。标
35、签,也就是那些出现在尖括号里的单词,对网页内容的语义含义做出了描述,但这些标签不包含任何关于如何显示有关内容的信息。例如,P 标签表达了这样一种语义:“这是一个文本段。”网页的表示层(presentation layer) 由 CSS 负责创建。 CSS 对“如何显示有关内容”的问题做出了回答。网页的行为层(behavior layer)负责回答“内容应该如何对事件做出反应”这一问题。这是 Javascript 语言和 DOM 主宰的领域。8:你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?经常遇到的浏览器的兼容性有哪些?怎么会出现?解决方法是什么?点评:css的兼容性也是大家关注的
36、热点。大家一定要注意多测试。Javascript 多浏览器兼容性问题及解决方案兼容性处理要点 1、DOCTYPE 影响 CSS 处理 2、FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width 3、FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式 4、div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点
37、是要控制内容不要换行 5、在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: divmargin:30px!important;margin:28px; 注意这两个margin的顺序一定不能写反,!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: divmaring:30px;margin:28px 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important; 浏览器差异 1、ul和ol列表缩进问题 消除ul、ol等列表的缩进时,样式应写成:list-style:none;margin:
38、0px;padding:0px; 其中margin属性对IE有效,padding属性对FireFox有效。 注 经验证,在IE中,设置margin:0px可以去除列表的上下左右缩进、空白以及列表编号或圆点,设置padding对样式没有影响;在 Firefox 中,设置margin:0px仅仅可以去除上下的空白,设置padding:0px后仅仅可以去掉左右缩进,还必须设置list- style:none才 能去除列表编号或圆点。也就是说,在IE中仅仅设置margin:0px即可达到最终效果,而在Firefox中必须同时设置margin:0px、 padding:0px以及list-style:n
39、one三项才能达到最终效果。 2、CSS透明问题 IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。 FF:opacity:0.6。 注 最好两个都写,并将opacity属性放在下面。 3、CSS圆角问题 IE:ie7以下版本不支持圆角。 FF: -moz-border-radius:4px,或者-moz-border-radius-topleft:4px;-moz- border- radius-topright:4px;-moz-border-radius-bottomleft:4px;-moz- b
40、order- radius- bottomright:4px;。 注 圆角问题是CSS中的经典问题,建议使用JQuery框架集来设置圆角,让这些复杂的问题留给别人去想吧。不过jQuery的圆角只看到支持整个区域的圆角,没有支持边框的圆角,不过这个边框的圆角可以通过一些简单的手段来实现,下次有机会介绍下。 4、cursor:hand VS cursor:pointer 问题说明:firefox不支持hand,但ie支持pointer ,两者都是手形指示。 解决方法:统一使用pointer。 5、字体大小定义不同 对字体大小small的定义不同,Firefox中为13px,而IE中为16px,差别
41、挺大。 解决方法:使用指定的字体大小如14px。 并列排列的多个元素(图片或者链接)的div和div之间,代码中的空格和回车在firefox中都会被忽略,而IE中却默认显示为空格(约3px)。 6、CSS双线凹凸边框 IE:border:2px outset;。 FF: -moz-border-top-colors: #d4d0c8 white;-moz-border-left-colors: #d4d0c8 white;-moz-border-right-colors:#404040 #808080;-moz-border-bottom-colors:#404040 #808080; 浏览器
42、bug 1、IE的双边距bug 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。 解决方案:在这个div里面加上display:inline; 例如: 相应的css为 以下为引用的内容: 复制代码代码如下:#IamFloat float:left; margin:5px;/*IE下理解为10px*/ display:inline;/*IE下再理解为5px*/ #IamFloat float:left; margin:5px;/*IE下理解为10px*/ display:inline;/*IE下再理解为5px*/ 关 于CSS中的问题实在太多了,甚至同样的CSS定义在不同的页面标准中的显示效果都是不一样的。一个合乎发展的建议是,页面采用标准XHTML标准编写, 较少使用table,CSS定义尽量依照标准DOM,同时兼顾IE、Firefox、Opera等主流浏览器。很多情况下,FF和 Opera的CSS解释标准更贴近CSS标准,也更具有