资源描述
Axis2开发webservice总结
1 Web服务接口
关于本章
本章描述内容如下表所示。
标题
内容
1.1 Web Service技术
介绍Web Service技术。
1.1 Web Service技术
1.1.1 Web Service消息内容遵循的标准
l SOAP
所有Web Service消息符合WS-I基本纲要(WS-I Basic Profile Version 1.0:"Final Material")的SOAP使用定义。
编码方式为:“document/literal”。
发起业务请求时,在SOAP HEADER里设置timeStamp、sendAddress、platType、provType、TID、version、callerSID、providerSID、providerEID、providerECID、providerIFName、UID、callingType参数,然后在服务器端提取参数,进行相应处理。
l XML
所有Web Service消息符合WS-I基本纲要(WS-I Basic Profile Version 1.0:"Final Material")的XML使用定义。
l HTTP
所有Web Service消息符合WS-I基本纲要(WS-I Basic Profile Version 1.0:"Final Material")的HTTP使用定义。
2 开发流程
关于本章
本章描述内容如下表所示。
标题
内容
2.1开发前的准备
介绍在开发业务实例前的准备工作。
2.2通过编写JAVA类文件生成WSDL文件。
介绍怎么通过编写JAVA类文件生成WSDL文件。
2.3客户端业务开发实例
介绍向用户开发helloword。
2.1 开发前的准备工作
2.1.1 PC机配置要求
选择一台PC机作为开发平台。PC机的最低配置要求如表2-1所示。
表2-1 PC机最低配置要求表
配置
说明
操作系统
l Windows 2000 Server SP4
l Windows XP SP2
浏览器
IE6.0
CPU
P4 1.8GHz
内存
512MB
硬盘
10GB
2.1.2 工具下载
在以下提供的工具下载页面中找到指定的下载链接,下载各个工具,并将其安装在C:\Program Files下。
JDK1.5
l JDK1.5下载页面。
l jdk-1_5_0_13-windows-i586-p.exe下载链接。
http://192.18.108.145/ECom/EComTicketServlet/BEGINA3B0EEAA08A312C1FAEC55BAC2297BBB/-2147483648/2402513439/1/852050/851882/2402513439/2ts+/westCoastFSEND/jdk-1.5.0_13-oth-JPR/jdk-1.5.0_13-oth-JPR:3/jdk-1_5_0_13-windows-i586-p.exe
l 安装JDK。
双击jdk-1_5_0_13-windows-i586-p.exe按照默认配置安装JDK1.5。
Eclipse(开发环境)
l Eclipse下载页面。
http://www.eclipse.org/downloads
l eclipse-SDK-3.3.1-win32.zip下载链接。http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.3.1-200709211145/eclipse-SDK-3.3.1-win32.zip&url=
l 安装Eclipse。
解压缩eclipse-SDK-3.3.1-win32.zip即可(不需安装)。
Tomcat(Web服务器)
l Tomcat6.0下载页面。
http://tomcat.apache.org/download-60.cgi
l apache-tomcat-6.0.14.zip下载链接。
l 安装Tomcat。
解压缩apache-tomcat-6.0.14.zip即可(不需安装)。
AXIS(SOAP引擎)
l AXIS2下载页面。
http://ws.apache.org/axis2/download.cgi
l axis2-1.4-bin.zip下载链接。
l axis2-1.4-war.zip下载链接。
l 安装AXIS。
解压缩axis2-1.4-bin.zip和axis2-1.4-war.zip即可(不需安装)。
2.1.3 环境变量配置
按照如下步骤配置JAVA_HOME和AXIS2_HOME环境变量。
步骤 1 右键单击“我的电脑”。
步骤 2 选择“属性”。
步骤 3 单击“高级”页签。
如图2-2所示。
图2-2 系统属性
步骤 4 在图2-2中单击“环境变量”。
步骤 5 增加系统变量JAVA_HOME,变量值为JDK安装目录。
如图2-3所示。
图2-3 新建JAVA_HOME系统变量
步骤 6 增加系统变量CLASSPATH。
l 变量名:
CLASSPATH
l 变量值:
%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
步骤 7 在Path系统环境变量中增加axis2-1.4的bin目录,单击“确定”。
如图2-4所示。
图2-4 编辑Path系统环境变量
l 在设置环境变量的值时,新增的环境变量值与已存在的环境变量值之间用“;”隔开。
l 其中D:\axis2-1.4\bin需要根据实际情况设置。
步骤 8 单击编辑用户变量界面里的“确定”。
步骤 9 环境变量界面里的“确定”
---结束
2.1.4 解压缩axis2
具体操作步骤如下。
步骤 1 解压缩axis2-1.4-war.zip。
步骤 2 将axis2.war拷贝到%TOME_HOME%\webapps目录下。
步骤 3 双击%TOME_HOME%\bin\startup.bat,启动Tomcat服务器。
----结束
启动过程会自动将axis2.war解压缩,在%TOME_HOME%\webapps 下生成axis2目录。
2.2 通过JAVA生成WSDL文件
2.2.1 写java类
步骤 1 在Eclipse中新建一个java工程。
步骤 2 单击“file > new > java>project”。如图2-5所示。
图2-5 新建java工程
步骤 3 输入工程名,其他默认,单击“finish”。如图2-6所示。
图2-6 输入工程名
步骤4 生成类 hello.java
步骤 4 根据接口文件在类中写方法和参数,如图2-7所示。
图2-7 类中写的方法和参数
2.2.2 使用AXIS2的工具生成wsdl文件
步骤 1 拷贝生成的java文件的.class文件。需要拷贝bin目录下面所有的包,如Error! Reference source not found.所示。
步骤 2 复制到axis2的bin目录下,如图2-8所示。
图2-8 axis2的bin目录
使用java2WSDL命令将“Hello.class”转化为“Hello.wsdl”文件。如图2-9所示。
图2-9 转化文件
生成的wsdl文件如下:
l 使用全路径。
l 中间的–of,–cn等字符请参照本地的系统所给的命令,可以执行java2WSDL命令查看。
----结束
2.2.3 修改WSDL文件使其符合规范
查看规范的wsdl文件,将命名空间统一,按照规范wsdl中的标准来修改。
2.3 客户端业务开发实例
2.3.1 使用工具将wsdl文件生成java源码
使用工具按照如下步骤将wsdl文件生成java源码。
步骤 1 运行cmd,进入命令行控制台,进入axis2的bin目录下,如Error! Reference source not found.所示。
步骤 2 使用“WSDL2java.bat”生成一个客户端WSDL2java.bat -uri,如图2-10所示。
图2-10 客户端源码
步骤 3 可以看到bin目录下产生了一个src文件夹,准备将其导入到eclipse工程中,如图2-11所示。
图2-11 Src文件夹
步骤 4 在eclipse中创建一个普通的java工程,操作步骤为单击“file > new > javaproject”,如图2-12所示。
图2-12 创建java工程
步骤 5 创建名为hello_clint的工程
步骤 6 点开新建的工程,可以看到工程下的库和一个源文件夹,导入axis2所需的jar包。
如下图:
----结束
2.4 生成服务端代码
2.4.1 安装配置必要工具
一些必要工具的安装,配置具体步骤如下。
步骤 1 获得一个tomcat安装包和axis2-1.4-war.zip。
步骤 2 安装tomcat,解压axis2-1.4-war.zip到%TOMCAT_HOME%\webapps目录下。
步骤 3 双击% TOMCAT _HOME%\bin\startup.bat,启动Tomcat服务器。
步骤 4 启动后看是否在% TOMCAT _HOME%\webapps下生成了axis2目录,如生成则说明axis2安装成功。
2.4.2 生成服务端源代码
生成服务端源代码的具体步骤如下。
步骤 1 参见2.3.1 步骤 1。
步骤 2 使用WSDL2java.bat -uri weatherInfoNotify.wsdl –ss –sd生成服务端代码。
步骤 3 能在bin目录下看到新增了src和resources文件夹。
新增的文件夹会覆盖以前的src文件夹,请备份以前的文件夹。
步骤 4 参见2.3.1 步骤 4在eclipse中创建一个普通的java工程,操作步骤为单击“file > new > javaproject”,如图2-12所示。
步骤 5 参见2.3.1 步骤 5,把名字命名为hello_server。
步骤 6 参见2.3.1 步骤 6,和Error! Reference source not found.,完成后如图2-13所示
图2-13 生成代码
其中HelloSkeleton.java为业务代码实现类,需要重写实现方法。
----结束
2.4.3 将服务端导出并发布到tomcat上
步骤 1 将工程导出为一个xxx.aar包(本例为hello.aar),放到% TOMCAT _HOME%\webapps\axis2\WEB-INF\services中,如Error! Reference source not found. 所示。
步骤 2 选中axis2的bin目录下的resources文件夹中的services.xml文件。
步骤 3 将选中文件放到weather.aar包中的META-INF目录下
点击hello_server build.xml文件生成hello.aar包,将工程文件中的service.xml替换hello.aar包中\ \META-INF中的service.xml。
然后放在 $tomcat_home\ \webapps\axis2\WEB-INF\services目录下,然后启动tomcat.
Hello.aar位置如图所示:
启动tomcat 如图所示,表示发布成功
2.5 简单调测
请参考如下操作简单调试发布的内容
步骤 1 单击eclipse客户端工程中的Test.class类,如图2-14所示。
图2-14 Test.class类
3 心得
3.1 编写wsdl文件
3.1.1 修改wsdl文件
利用wsdl文件通过
WSDL2java.bat -uri hello.wsdl –ss –sd生成服务端代码。
WSDL2java.bat -uri hello.wsdl 客户端代码。
3.1.2 修改生成的服务端代码
生成的骨架代码为业务实现方法,需要重写实现方法 类名为 *.Skeleton.java
3.1.3 发布 *.aar包
通过 服务端代码build.xml生成 aar包,将 工程目录recourse\service.xml 替换 \build\lib\*.aar包中的service.xml文件。然后copy到tomcat目录 \\webapps\axis2\WEB-INF\services 下。
附录资料:web前端面试题
1. W3C标准有哪些?
W3C推行的主要规范有HTML,CSS,XML,XHTML和DOM(Document Object Model)。
2. 谈谈Js的内存泄露问题。
3. 谈谈对Html 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; i<10; i++){
iArray.push(getRandom(10,100));
}
iArray.sort();
6. 把两个数组合并,并删除第二个元素。
var array1 = ['a','b','c'];
var 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 && CSS]
1.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?
首先我讲讲如何触发两种模式: 加入xml头部声明可以触发IE浏览器的Quirks mode,触发之后,浏览器解析方式就和IE5.5一样,拥有IE5.5一样的bug和其他问题,行为(Javascript)也是如此。 IE6的触发 在XHTML的DOCTYPE前加入XML声明 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> IE7的触发 在XML声明和XHTML的DOCTYPE之间加入HTML注释 <?xml version="1.0" encoding="utf-8"?> <!-- ... and keep IE7 in quirks mode --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> IE6和IE7都可以触发的 在HTML4.01的DOCTYPE文档头部加入HTML注释 <!-- quirks mode --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 其次是这样的意义 各个浏览器的混杂模式,基本就是各个浏览器的私有模式,不相互兼容。所以,除非是为了兼容的问题,比如你不想修改很久很久以前做的IE ONLY的网页,否则刻意触发混杂模式没有任何意义。
2:行内元素有哪些?块级元素有哪些?CSS的盒模型?
一.行内元素和块级元素有哪些?
块级元素
<address>
information on author
<blockquote>
long quotation
<button>
push button
<caption>
table caption
<dd>
definition description
<del>
deleted text
<div>
generic language/style container
<dl>
definition list
<dt>
definition term
<fieldset>
form control group
<form>
interactive form
<h1>
heading
<h2>
heading
<h3>
heading
<h4>
heading
<h5>
heading
<h6>
heading
<hr>
horizontal rule
<iframe>
inline subwindow
<ins>
inserted text
<legend>
fieldset legend
<li>
list item
<map>
client-side image map
<noframes>
alternate content container for non frame-based rendering
<noscript>
alternate content container for non script-based rendering
<object>
generic embedded object
<ol>
ordered list
<p>
paragraph
<pre>
preformatted text
<table>
table
<tbody>
table body
<td>
table data cell
<tfoot>
table footer
<th>
table header cell
<thead>
table header
<tr>
table row
<ul>
unordered list
行内元素
<a>
anchor
<abbr>
abbreviated form
<acronym>
acronym
<b>
bold text style
<bdo>
I18N BiDi over-ride
<big>
large text style
<br>
forced line break
<button>
push button
<cite>
citation
<code>
computer code fragment
<del>
deleted text
<dfn>
instance definition
<em>
emphasis
<i>
italic text style
<iframe>
inline subwindow
<img>
Embedded image
<input>
form control
<ins>
inserted text
<kbd>
text to be entered by the user
<label>
form field label text
<map>
client-side image map
<object>
generic embedded object
<q>
short inline quotation
<samp>
sample program output, scripts, etc.
<select>
option selector
<small>
small text style
<span>
generic language/style container
<strong>
strong emphasis
<sub>
subscript
<sup>
superscript
<textarea>
multi-line text field
<tt>
teletype or monospaced text style
<var>
instance of a variable or program argument
二.行内元素与块级元素有什么不同?
1.尺寸-块级元素和行内元素之间的一个重要的不同点
行内元素和width
W3C CSS2 标准规定行内元素、非置换元素不会应用width属性。
以下例子中,对行内元素<a>应用了width:200px,你可以看到,根本就没有什么效果。
行内元素和height
W3C CSS2 标准规定行内元素、非置换元素不会应用height属性,但是盒子高度可以通过line-height来指定。
以下例子,对行内元素<a>应用了height:50px,你可以看到什么效果都没。
行内元素和padding
你可以给行内元素设置padding,但只有padding-left和padding-right生效。
以下例子,行内元素<a>应用了padding:50px。你可以看到对左右的内容有影响,但是对上下没影响。
行内元素和marging
margin属性也是和padding属性一样,对行内元素左右有效,上下无效。
下面的例子,对<a>应用了margin:50px,你可以看到左右边缘是生效了但是内容上下却没有。
记住对行内元素
设置宽度width 无效。
设置高度height 无效,可以通过line-height来设置。
设置margin 只有左右margin有效,上下无效。
设置padding 只有左右padding有效,上下则无效。注意元素范围是增大了,但是对元素周围的内容是没影响的,看图上效果就知道了
盒子模型
W3C 组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落、列表、标题、图片以及层。盒模型主 要定义四个区域:内容(content)、边框距(padding)、边界(border)和边距(margin)。对于初学者,经常会搞不清楚 margin,background-color,background- image,padding,content,border之间的层次、关系和相互影响。这里提供一张盒模型的3D示意图,希望便于你的理解和记忆。
每个HTML元素都可以看作一个装了东西的盒子,盒子里面的内容到盒子的边框之间的距离即填充(padding),盒子本身有边框(border),而盒子边框外和其他盒子之间,还有边界(margin)。
盒模型的实际宽度
关于盒模型,还有以下几点需要注意:
·对于块级元素(display:block),未浮动的垂直相邻元素的上边界和下边界会被压缩,例如:有上下2个元素,上元素的下边界为5px,下面元素的上边界为20px,则实际2个元素的间距为20px(2个边界值中较大的值)。如图所示。
注1. 块级元素(display: block)
每个块级元素都从一个新行开始,而且其后的元素也需另起一行开始,标题、段落、表格、层、body等都是块级元素。块级元素只能作为其他块级元素的子元素,而且需要一定的条件。
·内联元素,例如<a>、<span>等,定义上下边界不会影响到行高(line-height),内联元素距离上一行元素的距离由行高决定,而不是填充或边界。
注2. 内联元素(display:inline)
内联元素不需要在新行内显示,而且也不强迫其后的元素换行,如a、em、span等都为内联元素。内联元素可以为任何其他元素的子元素。
·浮动元素(无论左或者右浮动)边界不压缩,且若浮动元素不声明宽度,则其宽度趋向于0,即压缩到其内容能承受的最小宽度。
·如果盒中没有内容,则即使定义了宽度和高度都为100%,实际上只占0%,因此不会被显示,此点在采取层布局的时候需特别注意。
·边界值可为负,其显示效果各浏览器可能不相同。
·填充值不可为负。
·边框默认的样式(border-style)为不显示(none)。
3.CSS引入的方式有哪些? link和@import的区别是?
本质上,这两种方式都是为了加载CSS文件,但还是存在着细微的差别。
差别1:老祖宗的差别。link属于XHTML标签,而@import完全是CSS提供的一种方式。
link标签除了可以加载CSS外,还可以做很多其它的事情,比如定义RSS,定义rel连接属性等,@import就只能加载CSS了。
差别2:加载顺序的差别。当一个页面被加载的时候(就是被浏览者浏览的时候),link引用的CSS会同时被加载,而@import引用的CSS会等到页面全部被下载完再被加载。所以有时候浏览@import加载CSS的页面时开始会没有样式(就是闪烁),网速慢的时候还挺明显(梦之都加载CSS的方式就是使用@import,我一边下载一边浏览梦之都网页时,就会出现上述问题)。
差别3:兼容性的差别。由于@import是CSS2.1提出的所以老的浏览器不支持,@import只有在IE5以上的才能识别,而link标签无此问题。
差别4:使用dom控制样式时的差别。当使用javascript控制dom去改变样式的时候,只能使用link标签,因为@import不是dom可以控制的。
大致就这几种差别了(如果还有什么差别,大家告诉我,我再补充上去),其它的都一样,从上面的分析来看,还是使用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}
这样更利于修改和扩展.
猴 子提示:这样做有一个缺点,会对网站服务器产生过多的HTTP请求,以前是一个文件,而现在却是两个或更多文件了,服务器的压力增大,浏览量大的网站还是 谨慎使用。有兴趣的可以观察一下像新浪等网站的首页或栏目首页代码,他们总会把css或js直接写在html里,而不用外部文件。
4.CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?内联和important哪个优先级高?
5:前端页面有哪三层构成,分别是什么?作用是什么?
最准确的网页设计思路是把网页分成三个层次,即:结构层、表示层、行为层。
网页的结构层(structural layer)由 HTML 或 XHTML 之类的标记语言负责创建。标签,也就是那些出现在尖括号里的单词,对网页内容的语义含义做出了描述,但这些标签不包含任何关于如何显示有关内容的信息。例如,P 标签表达了这样一种语义:“这是一个文本段。”
网页的表示层(presentation layer) 由 CSS 负责创建。 CSS 对“如何显示有关内容”的问题做出了回答。
网页的行为层(behavior layer)负责回答“内容应该如何对事件做出反应”这一问题。这是 Javascript 语言和 DOM 主宰的领域。
8:你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?经常遇到的浏览器的兼容性有哪些?怎么会出现?解决方法是什么?
点评:css的兼容性也是大家关注的热点。大家一定要注意多测试。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; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
5、在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法:
div{margin:30px!important;margin:28px;}
注意这两个margin的顺序一定不能写反,!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样:
div{maring:30px;margin:28px}
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
浏览器差异
1、ul和ol列表缩进问题
消除ul、ol等列表的缩进时,样式应写成:list-style:none;margin: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:none三项才能达到最终效果。
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- border- radius- bottomright:4px;。
[注] 圆角问题是CSS中的经典问题,建议使用JQuery框架集来设置圆角,让这些复杂的问题留给别人去想吧。不过jQuery的圆角只看到支持整个区域的圆角,没有支持边框的圆角,不过这个边框的圆角可以通过一些简单的手段来实现,下次有机会介绍下。
4、cursor:hand VS cursor:pointer
问题说明:firefox不支持hand,但ie支持pointer ,两者都是手形指示。
解决方法:统一使用pointer。
5、字体大小定义不同
对字体大小small的定义不同,Firefox中为13px,而IE中为16px,差别挺大。
解决方法:使用指定的字体大小如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;
浏览器bug
1、IE的双边距bug
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
解决方案:在这个div里面加上display:inline;
例如:
<#div id=”imfloat”>
相应的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定义在不同的页面标准中的显示效果都是不一样
展开阅读全文