最近再弄在研究浏览器的兼容与解析问题,看到一篇文章收藏下。
测试了一两天的IE8发现,其中有很多东西都是和IE6和IE7不同的地方,包括css和javascript两个方面,在此记录备忘
1 IE8中的css中关于width或是height中如果使用像素形式作为参数时,参数必须是带“px”的,而且此参数必须是大于0的,而在IE6和IE7中是支持不带“px”参数的,而且参数是可以为一个负数。
2 IE8中的css中“border-style:outset ;”是没有效果的。
3 IE8中的无序列表<ui>之间的距离要比IE6和IE7大的多,而且我还没有找到调整的方法。
4 在IE8中,一个Iframe中取event.x的值不是Iframe中的相对x坐标,而是最外层的window的x坐标,但是event.y却是取的是 Iframe中的相对y坐标。而在IE6和IE7中,event.x和event.y却得的都是所在Iframe中的相对坐标,真是搞不懂!可以用 event.clinetX代替。
5 IE8中的javascript中function对象例如:
function a(){
alert("haha");
}
var fun=new Function("",a);
alert(fun);
此时返回的值为function anonymous(){function a(){alert("haha")}} 而在IE6和IE7中返回的值为function anonymous(){alert("haha")};也就是说当Function的第二个参数如果是一个函数时,IE8对此参数作用的是整个函数的代码,而IE6和IE7则是对此参数起作用的是函数的内部代码(不包括 “function a(){”和“}”的函数头和尾)
6 IE8中expression函数不起作用。所以如何在css中写javascript代码还不清楚。
7.如下代码
.regDiv{
background-image:url(image/bg.gif); MARGIN: 0px auto; WIDTH: 800px;
}
.regWrap{
vertical-align:center ;border:0px ;margin:0 auto; width:95%
}
.regWrap TD{
FONT: 12px/25px 'arial';
VERTICAL-ALIGN: buttom;
PADDING-TOP: 2px;
PADDING-BOTTOM: 2px;
PADDING-LEFT:5px;
white-space:nowrap;
vertical-align:bottom;
}
.regWrap EM {
PADDING-RIGHT: 5px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; COLOR: #cc0000; PADDING-TOP: 0px
}
.regWrap SPAN{
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px;OVERFLOW: hidden; HEIGHT: 20px;color: #999999
}
.regWrap INPUT{
HEIGHT: 18px
}
A{
FONT: 12px/12px 'arial';
COLOR: #039;
TEXT-DECORATION: none;
}
这段代码中如果在IE8以下版本中,A的样式是无效的,而在IE8中是有效的。但是如果把A{……}的样式放在.regWrap{……}前面,这样IE8及以下版本中A的样式就都有效了。
@看了下。。 。在IE6里面做的网站其中的高度为一像素表格在IE8里面显示的不是一像素了。 总之变的很明显的大了
@bug or something else
<div style="width:300px;float:left;clear:both;(这里的clear无关紧要似的)">
<a href="#"><img alt="" src="tl.png"/></a><a href="#"><img alt="" src="pl.png"/></a>
</div>
以上这段代码,在IE8里面,如果我们给img一个float:left;属性那么a标签就会自动产生3px的margin-left(也可以理解为 img标签会吧),即便在样式里面用a{padding:0;margin:0;}都不行,给img这样做也不行,即便是inline style;再者,如果我们给a一个width属性,那么除了3px的margin-left,我们还能看到4像素的margin-top或者说是 padding-top在掉下来的第二个a标签的头部,但是在IE8以前版本以及其他浏览器上是正常显示的(虽然给imgfloat属性是没有必要的)。。。
解决方案?暂时没有吧——但是可以避免,就是不要滥用float;
困惑
<div class="layout-right">
<div class="list-1 height-72" style="width: 100%;float:left;"><a href="mailto:hanwei@mail.hust.edu.cn"><img alt="团长信箱" src="images/tl.png" /></a><a href="mailto:zb2004@mail.hust.edu.cn"><img alt="书记信箱" src="images/pl.png" /></a></div>
<div class="list-2" style="width: 273px;float:left;">
。。。
这个地方有点纠结——因为两张图片的宽度加起来正好一共300px,而整个容器也是layout-right,list-1,list-2都是 300px,内第一个div,给浮动,里面的图片似乎也得给浮动(这和第一个例子不一样,似乎是因为外面的大容器对内部的内部的元素也产生了影响),不然会自动选择换行显示,且头部还会多出一点间距来(已经给img,a padding,margin在外导入样式表清0了)即便理论上是刚刚能挤下来(这是在除IE8的nav里都能做到的),好,那我们给img浮动吧,可是很不幸,第二个a标签会向下掉若干个像素(具体什么规律和原理我还不知道),虽然a img 的margin padding清0工作是已经做了的——
但是如果给a,img一个inline style margin padding 0 ,又偏偏能起到作用,这让我怀疑自己代码的规范性了——但我确实给了a,img一个margin padding清零的class,而且并未被覆盖——
纠结中——
但是这个教训却总结出来了,就是必须使自己的代码十分的规范,规范,再规范——
测试了一两天的IE8发现,其中有很多东西都是和IE6和IE7不同的地方,包括css和javascript两个方面,在此记录备忘
1 IE8中的css中关于width或是height中如果使用像素形式作为参数时,参数必须是带“px”的,而且此参数必须是大于0的,而在IE6和IE7中是支持不带“px”参数的,而且参数是可以为一个负数。
2 IE8中的css中“border-style:outset ;”是没有效果的。
3 IE8中的无序列表<ui>之间的距离要比IE6和IE7大的多,而且我还没有找到调整的方法。
4 在IE8中,一个Iframe中取event.x的值不是Iframe中的相对x坐标,而是最外层的window的x坐标,但是event.y却是取的是 Iframe中的相对y坐标。而在IE6和IE7中,event.x和event.y却得的都是所在Iframe中的相对坐标,真是搞不懂!可以用 event.clinetX代替。
5 IE8中的javascript中function对象例如:
function a(){
alert("haha");
}
var fun=new Function("",a);
alert(fun);
此时返回的值为function anonymous(){function a(){alert("haha")}} 而在IE6和IE7中返回的值为function anonymous(){alert("haha")};也就是说当Function的第二个参数如果是一个函数时,IE8对此参数作用的是整个函数的代码,而IE6和IE7则是对此参数起作用的是函数的内部代码(不包括 “function a(){”和“}”的函数头和尾)
6 IE8中expression函数不起作用。所以如何在css中写javascript代码还不清楚。
7.如下代码
.regDiv{
background-image:url(image/bg.gif); MARGIN: 0px auto; WIDTH: 800px;
}
.regWrap{
vertical-align:center ;border:0px ;margin:0 auto; width:95%
}
.regWrap TD{
FONT: 12px/25px 'arial';
VERTICAL-ALIGN: buttom;
PADDING-TOP: 2px;
PADDING-BOTTOM: 2px;
PADDING-LEFT:5px;
white-space:nowrap;
vertical-align:bottom;
}
.regWrap EM {
PADDING-RIGHT: 5px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; COLOR: #cc0000; PADDING-TOP: 0px
}
.regWrap SPAN{
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px;OVERFLOW: hidden; HEIGHT: 20px;color: #999999
}
.regWrap INPUT{
HEIGHT: 18px
}
A{
FONT: 12px/12px 'arial';
COLOR: #039;
TEXT-DECORATION: none;
}
这段代码中如果在IE8以下版本中,A的样式是无效的,而在IE8中是有效的。但是如果把A{……}的样式放在.regWrap{……}前面,这样IE8及以下版本中A的样式就都有效了。
@看了下。。 。在IE6里面做的网站其中的高度为一像素表格在IE8里面显示的不是一像素了。 总之变的很明显的大了
@bug or something else
<div style="width:300px;float:left;clear:both;(这里的clear无关紧要似的)">
<a href="#"><img alt="" src="tl.png"/></a><a href="#"><img alt="" src="pl.png"/></a>
</div>
以上这段代码,在IE8里面,如果我们给img一个float:left;属性那么a标签就会自动产生3px的margin-left(也可以理解为 img标签会吧),即便在样式里面用a{padding:0;margin:0;}都不行,给img这样做也不行,即便是inline style;再者,如果我们给a一个width属性,那么除了3px的margin-left,我们还能看到4像素的margin-top或者说是 padding-top在掉下来的第二个a标签的头部,但是在IE8以前版本以及其他浏览器上是正常显示的(虽然给imgfloat属性是没有必要的)。。。
解决方案?暂时没有吧——但是可以避免,就是不要滥用float;
困惑
<div class="layout-right">
<div class="list-1 height-72" style="width: 100%;float:left;"><a href="mailto:hanwei@mail.hust.edu.cn"><img alt="团长信箱" src="images/tl.png" /></a><a href="mailto:zb2004@mail.hust.edu.cn"><img alt="书记信箱" src="images/pl.png" /></a></div>
<div class="list-2" style="width: 273px;float:left;">
。。。
这个地方有点纠结——因为两张图片的宽度加起来正好一共300px,而整个容器也是layout-right,list-1,list-2都是 300px,内第一个div,给浮动,里面的图片似乎也得给浮动(这和第一个例子不一样,似乎是因为外面的大容器对内部的内部的元素也产生了影响),不然会自动选择换行显示,且头部还会多出一点间距来(已经给img,a padding,margin在外导入样式表清0了)即便理论上是刚刚能挤下来(这是在除IE8的nav里都能做到的),好,那我们给img浮动吧,可是很不幸,第二个a标签会向下掉若干个像素(具体什么规律和原理我还不知道),虽然a img 的margin padding清0工作是已经做了的——
但是如果给a,img一个inline style margin padding 0 ,又偏偏能起到作用,这让我怀疑自己代码的规范性了——但我确实给了a,img一个margin padding清零的class,而且并未被覆盖——
纠结中——
但是这个教训却总结出来了,就是必须使自己的代码十分的规范,规范,再规范——
-------------------------------------------------------
IE6与IE7的不同之处 收藏
1、js关闭窗口时老提示的问题。
2、上传图片时无法预览的问题。
3、window.status 无效的问题。
关于第一个,以前在IE6下关闭窗口是这样的,window.opener = null;window.close();在IE7中,这样是不行的,仍然会弹出提示,必须在中间加一句,window.open("","_self"); 像下面的形式就行了。
window.opener = null;
window.open("","_self"); //这是IE7中必需的
window.close();
二、上传图片时的预览
在IE6中可以这样,非常方便。
<input type="file" οnchange="Preview(this)"/> <img id="imgPreview" />
<script type="text/javascript">
function Preview(file){
document.getElementById("imgPreview").src = this.value;
}
</script>
但是在IE7中,这样无效,那天我这样测试的时候我用的是 GreenBrowser(绿色浏览器),发现竞然也能预览,但在 MS IE7中就不行,我就纳闷了,我去看了百度相册,他的上传相片预览也是使用这种方式,我是用绿色浏览器看百度相册,用MSIE看我的程序,百度相册上传时能预览,我的程序就是不行.结果我一直在怀疑是不是程序哪里搞错了,上网查了好多资料.硬是没搞定,后来我用MS IE 进百度相册,才发现,原来百度相册也不能预览了.原来是绿色浏览器惹的祸,怪吧,这可是个IE内核的浏览器哦,以后大家记住,测试程序时一定要用微软的IE7,用其它IE内核的浏览器可能会有意想来到的问题.
那在IE7下怎么实现预览呢?答案是:用滤镜,请看下面:
请选择要上传的相片:<input type="file" οnchange="Preview(this);" /><br />
<div id="imgPreview" style="filter:progid:DXImageTransform.Microsoft.
AlphaImageLoader(sizingMethod=scale);width:400px;height:200px;"></div>
function Preview(imgFile)
{
document.getElementById("imgPreview").filters.
item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgFile.value;
}
关于AlphaImageLoader滤镜,我顺便也转过来。
语法:
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader( enabled=bEnabled, sizingMethod=sSize, src=sURL)
属性:
enabled : 可选项。布尔值(Boolean)。设置或检索滤镜是否激活。true | false
true : 默认值。滤镜激活。
false : 滤镜被禁止。
sizingMethod : 可选项。字符串(String)。设置或检索滤镜作用的对象的图片在对象容器边界内的显示方式。 crop : 剪切图片以适应对象尺寸。
image : 默认值。增大或减小对象的尺寸边界以适应图片的尺寸。
scale : 缩放图片以适应对象的尺寸边界。PS:自己的体会是,如果padding 和margin的大小不适中的的话,那么背景图片会被撑大。这个缩放还是挺好用的,就相当于那个background-repeat。
src : 必选项。字符串(String)。使用绝对或相对 url 地址指定背景图像。假如忽略此参数,滤镜将不会作用。
说明:
在对象容器边界内,在对象的背景和内容之间显示一张图片,并提供对此图片的剪切和改变尺寸的操作。如果载入的是PNG(Portable Network Graphics)格式,则0%-100%的透明度也被提供。
PNG(Portable Network Graphics)格式的图片的透明度不妨碍你选择文本。也就是说,你可以选择显示在PNG(Portable Network Graphics)格式的图片完全透明区域后面的内容。
三、window.status 不显示的问题
在ie6中,使用window.status =" 欢迎光临我的博客!!!",就能在状态栏显示这么一行字,但在IE7中,
本机测试的时候很正常,能显示,但传的服务器上去以后就是不显示,程序运行也没有错误,开始我怀疑是服务器的安全设定问题,后来才发现,又是IE7的问题,IE7的安全性设置中,默认是不能许脚本更新状态栏的。真是可惜了,又少了一块可利用的区域。
如果是自己的电脑的话,可以自己更改设置,使IE7也能显示。
方法是:工具--》Internet 选项--》安全 -- 选中Internet后 点 自定义级别 --》找到“允许状态栏通过脚本更新”,将默认的禁用改为启用就行了。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/CMM_5/archive/2009/08/31/4501708.aspx