关于IE的几个bug

1. 居中元素

居中一個元素是很多前端開發人員在設置樣式的時候會遇到的問題。最簡單的居中方式是在相關的元素上設置 *margin:auto;. 這個方法可以在不考慮父元素的寬度下進行居中。不過,怪異模式下的IE6缺達不到我們想要的效果。

請看下面代碼:

#container{
    border: solid 1px #000;
    background: #777;
    width: 400px;
    height: 160px;
    margin: 30px 0 0 30px;
}

#element{
    background: #95CFEF;
    border: solid 1px #36F;
    width: 300px;
    height: 100px;
    margin: 30px auto;

}

你希望看到的效果:

IE顯示的結果:

這是因為IE6怪異模式下或者是早期的IE版本不識別margin:auto所導致的問題,不過,這個問題挺容易修復。

方法:

為IE6設置居中最簡單可靠的方法是給父元素添加text-align:center,給居中元素添加text-align: left以確保文本對齊正確

#container{
    border: solid 1px #000;
    background: #777;
    width: 400px;
    height: 160px;
    margin: 30px 0 0 30px;
    text-align: center;
}

#element{
    background: #95CFEF;
    border: solid 1px #36F;
    width: 300px;
    height: 100px;
    margin: 30px 0;
    text-align: left;
}

2.階梯效應

大部分的開發人員會在導航欄里使用list通常我們會創建一些容器,再往裡面增加一些<a>標籤,接著設置<a>浮動。但是,在IE裡面,情況比較複雜 如下代碼:

<ul>
    <li><a href="#"></a></li>
    <li><a href="#"></a></li>
    <li><a href="#"></a></li>
</ul>

ul {
    list-style: none;
}    

ul li a {
    display: block;
    width: 130px;
    height: 30px;
    text-align: center;
    color: #fff;
    float: left;
    background: #95CFEF;
    border: solid 1px #36F;
    margin: 30px 5px;
}

通常瀏覽器會這麼渲染:

而在IE則會這麼顯示:

這個看起來效果可不怎麼好,不過我們有兩個方法可以來修復這個問題

方法1:

設置li元素浮動而不是<a>浮動

ul li {
    float: left;
}

方法2:

設置li元素display: inline. 這麼做不僅解決了問題,而且同樣解決了下面我們會提到的雙邊距問題。不過有一些人可能不喜歡在行內元素放置塊級元素的做法。

ul li {
    display: inline
}

3.浮動產生的雙邊距

讓一個元素在浮動方向擁有margin效果即可觸發這一個bug

#element{
    background: #95CFEF;
    width: 300px;
    height: 100px;
    float: left;
    margin: 30px 0 0 30px;
    border: solid 1px #36F;
}

正常瀏覽器顯示效果:

IE效果:

解決這個bug的方法是設置浮動元素的display為inline:

#element{
    background: #95CFEF;
    width: 300px;
    height: 100px;
    float: left;
    margin: 30px 0 0 30px;
    border: solid 1px #36F;
    display: inline;
}

4.元素不可設置較小高度

有的時候,我們需要設置元素具有較小的高度。通常來說我們只需要設置height:XXpx就可以達到目的。不過,在IE上我們可能會得到雙倍的高度。

#element{
    background: #95CFEF;
    border: solid 1px #36F;
    width: 300px;
    height: 2px;
    margin: 30px 0;
}

我們希望得到這樣的效果:一個有1px邊距,高2px的元素。

但是在IE:

引起這個bug的原因是,IE拒絕讓元素的高度比設置的font-size還小。所以設置font-size為0之後我們可以隨便設置一個小尺寸的高度

#element{
    background: #95CFEF;
    border: solid 1px #36F;
    width: 300px;
    height: 2px;
    margin: 30px 0;
        font-size: 0;
}

不過還有一個更好的方法,通過設置overflow: hidden來實現目的

#element{
    background: #95CFEF;
    border: solid 1px #36F;
    width: 300px;
    height: 2px;
    margin: 30px 0;
        overflow: hidden
}

5. Auto Overflow 與相對定位的元素

當父元素的overflow為auto而其中含有position為relative的元素則會出現這個bug。相對定位的元素會闖出父元素的邊界。

<div id="element"><div id="anotherelement"></div></div>

#element{
    background: #95CFEF;
    border: solid 1px #36F;
    width: 300px;
    height: 150px;
    margin: 30px 0;
    overflow: auto;
}

#anotherelement{
    background: #555;
    width: 150px;
    height: 175px;
    position: relative;
    margin: 30px;
}

期望效果:

IE效果:

解決方法:設置父元素的position同樣為relative

#element{
    background: #95CFEF;
    border: solid 1px #36F;
    width: 300px;
    height: 150px;
    margin: 30px 0;
    overflow: auto;
        position: relative;
}

6.被破壞的盒子模型

7.設置最小的寬度與高度

IE忽略了min-height這個屬性

解決方法1: 使用!important 來hack

#element {
  min-height:150px;
  height:auto !important;
  height:150px;
}

方法2:利用IE不能解析子選擇器的特性

#element {
    min-height: 150px;
    height: 150px;
}

html>body #element {
    height: auto;
}

8. 浮動佈局的錯誤行為

創建一個無表格佈局一個重要的概念是浮動。在大部分情況下,IE6的處理還是差強人意。不過,但遇到了不可破壞的內容或是當元素的寬度超過父元素的寬度,就會出現下面的問題

<div id="container">
    <div id="element">http://net.tutsplus.com/</div>
    <div id="anotherelement"></div>
</div>

#element, #anotherelement{
    background: #95CFEF;
    border: solid 1px #36F;
    width: 100px;
    height: 150px;
    margin: 30px;
    padding: 10px;
    float: left;
}

#container{
    background: #C2DFEF;
    border: solid 1px #36F;
    width: 365px;
    margin: 30px;
    padding: 5px;
    overflow: auto;
}

期望:

在IE:

我們可以看到,第一個DIV自己伸展開了以適應它自己的內容

對於這個bug目前還沒有太好的辦法,不過我們可以設置overflow: hidden來拯救我們的佈局

#element{
    background: #C2DFEF;
    border: solid 1px #36F;
    width: 365px;
    margin: 30px;
    padding: 5px;
    overflow: hidden;
}

9. 列表間的空隙

IE6會在列表元素間增加一些垂直空間。

<ul>
 <li><a href="#">Link 1</a></li>
 <li><a href="#">Link 2</a></li>
 <li><a href="#">Link 3</a></li>
</ul>

ul {
    margin:0;
    padding:0;
    list-style:none;
}

li a {
    background: #95CFEF;
    display: block;
}

他們應看起來是這樣:

IE下效果:

方法1:

li a {
    background: #95CFEF;
    display: block;
        width: 200px;
}

方法2:

li a {
    background: #95CFEF;
    float: left;
        clear: left;
}

方法3: li { display: inline; }

时间: 2024-12-26 09:37:28

关于IE的几个bug的相关文章

解决myeclipse中struts2 bug问题包的替换问题

因为struts2的bug问题,手工替换还是比较麻烦,但即便是最新的myeclipse2014也没有替换最新的struts2包,研究了一天,终于找到了解决办法.以下就解决方法与大家分享一下. 1.在perferences中找到 Myeclipse->Project Libraries,右边找到 struts2.1 Libraries,点击 Enable advanced configiguration,去掉以下文件前面的对勾,然后点击 Add custom Jars 2.在弹出的对话框中选择 A

关于工作中微信分享接口的bug

调用config 接口1的时候传入参数 debug: true 可以开启debug模式,页面会alert出错误信息.以下为常见错误及解决方法: invalid url domain当前页面所在域名与使用的corpid没有绑定(可在该企业号的应用可信域名中配置域名). invalid signature签名错误.建议按如下顺序检查: 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验. 确认c

android 2.x上Dialog特定情况导致无法dismiss的bug

近期在做一个简单的对话框框架,作用不过做出一个显示效果在android 2.x到android 4.x上均类似的对话框. 思路比較简单,就是使用装饰模式包裹Dialog,暴露的接口调用时会自己主动完毕一些设置 可是遇到一个特别诡异的问题,在android 2.x上的Dialog对话框无法被dismiss,仅仅要弹出来界面就卡死,强行使用eclipse又一次run的话会导致android设备黑屏无响应,假设是模拟器,则直接崩溃,看到启动画面.并且这个还不是ANR错误. 后来通过删减代码找到了问题的

ThinkPHP3.2.3 foreach嵌套循环bug

有两个数组authA和authB authA如下 1 Array 2 ( 3 [0] => Array 4 ( 5 [auth_id] => 1 6 [auth_name] => 文章管理 7 [auth_pid] => 0 8 [auth_c] => 9 [auth_a] => 10 [auth_level] => 0 11 ) 12 13 [1] => Array 14 ( 15 [auth_id] => 4 16 [auth_name] =>

BUG YII2.0 cURL error 6: Could not resolve host:

BUG描述:登录直接显示 原因:服务器设置端口权限,或者DNS毛病 解决方案:只能去服务器端设置,配置端口 DNS: 修改dns 114.114.114.114 或者 8.8.8.8

SPARK大数据计算BUG处理:

大数据计算BUG处理: 程序修改前资源情况: Driver : 1台 Worker : 2台 程序提交申请内存资源 : 1G内存 内存分配情况 : 1. 20%用于程序运行 2. 20%用于Shuffle 3. 60%用于RDD缓存 单条TweetBean大小 : 3k 1. 内存溢出 原因:因为程序会把所有的TweetBean查询出来并且合并(union),该操作在内存中进行.则某个campaign数据量较大时,如500W数据,则500W*10k=50G,超出内存限制. 解决方法: 先按数据量

移动端上传照片 预览+draw on Canvas demo(解决iOS等设备照片旋转90度的bug)

背景: 本人的一个移动端H5项目,需求如下: 手机相册选取或拍摄照片后在页面上预览 然后绘制在canvas画布上. 这里,我们先看一个demo(http://jsfiddle.net/q3011893/83qfqpk8/embedded/) 操作步骤: 1.点击选择文件,拍摄一张照片,此时"预览:"文字下会显示你刚才拍摄的照片: 2.再点击"draw on Canvas",该按钮下的画布会绘制你刚才拍摄的照片. 正常的结果: 正文: 让input file支持拍照+

hdu1829(A Bug&#39;s Life)

题目链接:传送门 题目大意:有n个昆虫,有m组关系,接下来m行表示两个昆虫性别不同,问是否有矛盾情况(同男同女) 题目思路:并查集的高级应用,开两倍数组大小,后n个数组表示和当前昆虫不同性别的集合 #include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <algorithm> #include <cstring> #inclu

关于【bootstrap】中,【tooltip】的不算bug的bug的个人看法

先说下遇到这个问题的背景吧. 就是在页面中有个div,这个div右上角(或者其他位置)有个 × 的图标(这个图标添加tooltip工具提示),光标移到这个图标时,触发tooltip,提示“点击移除”这样类似的字样,然后点击后,把这个div作remove()这样的删除操作. 然后,问题来了,因为这个div被remove()了,导致生成的tooltip对应的 × 图标也被remove(),因为找不到,所以对应的mouseout(可能是mouseleave事件,参考了一下bootstrap的源码,没找

懒加载(延迟加载)之后,在使用数据过程中容易出现的bug

在UI中,使用懒加载,也就是延迟加载来加载数据的时候,总是会面临几个问题? 如:1. >为什么先创建NSArray属性? 2. >为什么重写NSArray的get方法? 3.>为什么要判断是否为空? 4.>为什么下方代码"//1"这里不用NSString stringWithFormat: 而"//2"这里要使用? 5.>同时"//2"这里为什么使用的是%ld 来作为占位符? 这些问题不搞懂,懒加载就很难通透,  代