标准模式中的 IE 6&7 width 100% bug

来自:http://www.99css.com/?p=43

在 web app 项目中经常遇到这个 bug,国外称之为100% ≠ 100% bug,又分为两种:

div 的宽度 100% ≠ 100% (IE 6&7)需求:

  1. 标准模式
  2. #container 局部滚动
  3. #asie 固定宽度
  4. #content 自适应宽度

再复杂一点还会要求两列等高,可参考 http://www.99css.com/?p=40

HTML

<div id="container"> <div id="wrapper"> <div id="content"> <h2>Content</h2> </div> </div> <div id="aside"> <h2>Aside</h2> </div> </div>

 

 

当然,别忘了 DTD 声明,因为这个只存在于标准模式

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

用之前介绍的HTML5 写法亦可:

<!DOCTYPE html>
 

CSS

/*简单重置*/ body, div, h2{margin:0;padding:0;} /*设置颜色,方便区分*/ #container{background:yellow;} #content{background:#FF8539;} #aside{background:#B9CAFF;} /*去除html默认滚动条*/ html{overflow-y:hidden;} /*关键布局代码*/ #container{height:300px;overflow:auto;} #wrapper{float:left;width:100%;margin-left:-200px;} #content{margin-left:200px;} #aside{float:right;width:200px;}

 

#content, #aside{height:200px;}时,即高度未超出#container时一切正常

[图片]

#content, #aside{height:400px;}时,出现纵向滚动条

正常显示效果如下:

[图片]

E 6&7 中 bug 出现:


原因:IE 6&7 滚动条的宽度未算在 100% 中,理想的状况是:#container 的宽度(100%) + #container 滚动条的宽度
= body 的 100%,W3C对此的定义:

In the case of a scrollbar being placed on an edge of the element’s box,
it should be inserted between the inner border edge and the outer padding
edge. Any space taken up by the scrollbars should be taken out of (subtracted
from the dimensions of) the containing block formed by the element with
the scrollbars.

Internet Explorer 100% Width Bug》中给出了思路:

element_selector { width: expression(this.parentNode.offsetHeight > this.parentNode.scrollHeight ? '100%' : parseInt(this.parentNode.offsetWidth - XX) + 'px'); }
 

其中 XX 是滚动条的宽度,在 Windows XP 主题下是 17px,Windows 经典主题下稍微小一点,在其他第三方系统主题下有可能是不确定宽度。

根据下图,简单改进一下即可

[图片]

IE6

[图片]

解决方法(原理同上)

body{_width:expression(this.parentNode.offsetHeight > this.parentNode.scrollHeight ? '100%' : parseInt(this.parentNode.clientWidth) + 'px');}
 

  1. 解决方法

    #wrapper{#width:expression(this.parentNode.offsetHeight > this.parentNode.scrollHeight ? '100%' : parseInt(this.parentNode.clientWidth) + 'px');}
     

    当然,写在 js 中亦可,不过要注意不要漏掉 window 的 riseze 事件,另外,window 的 resize 事件在 IE 中有执行多次的
    bug

  2. body 的宽度 100% ≠ 100% (仅 IE6)通常表现为 iframe 出现纵向滚动条时同时出现横向滚动条,简单粗暴的使用body{overflow-x:hidden;}是不负责任的,有时会截断要显示的内容第一个页面(父页面) <iframe frameborder="0" height="300" scrolling="auto" src="iframe.html" width="500">
     

    第二个页面(iframe)

    HTML

    <div></div>
     

    CSS

    body, div{margin:0;padding:0;} div{background-color:yellow;height:500px;}
     

    正常效果

    [图片]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: width: 100% 和 height: 100% 是 CSS 的两个属性,用于设置元素的宽度和高度。其width: 100% 表示元素的宽度将会占据其父元素的全部宽度,而 height: 100% 表示元素的高度将会占据其父元素的全部高度。这两个属性通常用于实现响应式布局,使元素能够自适应不同屏幕尺寸的设备。 ### 回答2: CSSwidth:100%和height:100%是两个常见的属性值,它们分别表示元素的宽度和高度占据了其父元素的100%。在Web开发,它们经常被用来实现响应式设计的效果。 首先,让我们考虑width:100%的作用。当一个元素的宽度设置为100%时,它会占用其父元素的全部可用宽度。这意味着无论父元素的宽度如何变化,子元素的宽度都会跟随变化。这样可以确保子元素填满了父元素的全部宽度。例如,当我们需要一个可以自适应宽度的图片时,可以将图片的宽度设置为100%,这样图片就能自适应其容器的宽度。 相似地,height:100%的作用是将元素的高度设置为其父元素的全部可用高度。这个属性值的用途较为有限,因为经常会出现高度塌陷的情况,因为父元素需要有一个固定的高度来撑起子元素。当父元素的高度无法确定时,该属性的值无法生效。不过,它还是可以用来实现某些特定的效果,例如纵向滚动条,可以设置父容器的高度为100%,然后设置其子容器的高度和网页内容的高度一样。 总之,CSSwidth:100%和height:100%是两个常用且十分实用的属性值。它们可以用来实现响应式设计的效果,让页面的布局更加灵活、多样化。不过,在使用时需要注意它们的适用范围和局限性,以免出现不必要的问题。 ### 回答3: CSSwidth: 100% 和 height: 100%可以用来设置元素的宽度和高度,使其与其父级元素宽度和高度相同。这对于创建响应式设计非常有用,因为可以使元素随着浏览器窗口大小的变化而自适应调整大小。 在使用width: 100%和height: 100%之前,需要先确保元素的父级元素有一个确定的宽度和高度,否则这些样式不会起作用。例如,如果将width: 100%应用于一个没有确定宽度的div,则该div元素将会在其包含的内容充满整个宽度,而不是其父级元素。 另外,如果一个元素有边框或内边距,使用width: 100%和height: 100%可能会导致元素的实际宽度和高度小于其父级元素的大小。在这种情况下,可以使用box-sizing: border-box样式来解决这个问题。 总之,width: 100%和height: 100%是非常有用的CSS样式,可以帮助我们创建响应式设计和具有良好尺寸适应性的网站。但是,需要注意它们的使用条件和可能存在的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值