offsetHeight在FF和IE6中的差异

拷贝别人的,留着方便自己

先看看简单的代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>offsetHeight</title>
<style type="text/css">
body{margin:0;}
div{font-size:12px;line-height:14px;}
</style>
</head>

<body>
<div οnclick="alert(this.offsetHeight);" style="border:1px solid red;">
这是一行高度
</div>
</body>
</html>

1.在火狐3里面,的到的是16px,
解释下,div里面套着文字,实际中这样考虑,产生一个匿名盒子里面放置文本
"这是一行高度",由于行高为14px;那么这个匿名盒子高度为14px;所以最终的
offsetHeight=14px+1px*2(边框)=16px;
同样ie6里面也得到了16px
2,但是我把line-height设置为小于14px(0--14px)那么火狐都能够正确得到数值
都是offsetHeight=行高确定的盒子高度+上下边框宽度
但是ie6里面却始终等于16px不知道是不是个bug?
有趣的是如果字体大小11px,而行高12px那么ie6得到个15px不知道什么意思,字体小于10得到的是14px
火狐都很正常

2.我们做如下改动:
div{font-size:12px;line-height:16px;}
style="padding:6px;border:5px solid red;"

最后火狐和ie都得到
offsetHeight=paddingTB(上下)+内容高度+上不边框=12+16+10=38

但是如果行高改为12px
那么火狐offsetHeight=12px+10px+12px=34px正确
ie6 offsetHeight=36px;奇怪不合常理 ,bug?
而且这个问题我测试如果文字是多行的话没有。


但是,offsetHeight是不包含margin的。

3.但是如果制定height呢
div{font-size:12px;line-height:12px;height:50px;}
style="padding:6px;border:5px solid red;"

火狐里和IE是offsetHeight=height+paddingTB+borderTB=50px+12+10=72正确

但是,如果height<line-height呢
比如高为4px那么火狐里还是加高度4px就是4+12+10=26正确,但是
ie里面还是由于行高把匿名盒子撑开,所以匿名盒子高度是行高大小就是12所以
ie里面是12+12+10=34px看着也合理。

细想想是溢出的问题了,所以对overflow做处理,应该ie撑开了默认,我们可以用overflow隐藏来看看:

加上overflow:hidden;ie和火狐都得到正确结构了,
所以这里的问题是溢出的处理。


最终标准:
offsetHeight=paddingTB+contentHeight+borderTB


于是ie6存在一个未指定height时的单行文本返回offsetHeight的bug?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `clientHeight` 和 `offsetHeight` 是 JavaScript 的两个元素尺寸属性。 `clientHeight` 表示元素的内容高度,不包括边框、滚动条等。 `offsetHeight` 表示元素的高度,包括内容高度、边框高度、滚动条高度等。 ### 回答2: clientHeight和offsetHeight都是DOM经常使用的属性,用于计算元素的高度。在某些情况下,它们的结果可能不相同,这主要取决于页面布局和元素样式。 clientHeight是一个只读属性,它用于计算元素的可见高度,即元素内容的可视区域高度,包含在CSS的padding和border。clientHeight不包括滚动条和元素内容的边距,因此它的计算结果可能小于offsetHeight属性。 例如,如果一个div元素有10像素的padding和1像素的边框,它的clientHeight属性将仅包括显示区域的高度,而不包括边距,padding和边框的高度。因此,clientHeight仅仅代表元素的内容高度的一部分大小。 另一方面,offsetHeight属性是用于计算元素在页面上占用的整体高度,包含CSS的padding、border和元素的高度。这意味着offsetHeight包括了所有的高度,从元素的边界到其内部内容的底部边界,且不含滚动条。 以同样的例子,如果一个div元素有10像素的padding和1像素的边框,它的offsetHeight将包括整个元素的高度,包括padding和边框高度。因此,offsetHeight代表了元素在页面上占用的总高度大小。 总的来说,在计算元素的高度时,我们需要仔细区分clientHeight和offsetHeight属性之间的差异,选择合适的属性来计算所需的元素高度。 然而使用时也要考虑到浏览器的兼容性问题,因为有些浏览器计算方式不同,结果也不尽相同。 ### 回答3: clientHeight和offsetHeight是Web开发常用的两个属性。这两个属性都可以用来获取元素的高度,但它们之间有所不同。 clientHeight是指元素内容以及内边距的高度。这个属性只包括元素的内容高度(不包括边框和外边距)。它的值是一个数值,以像素为单位,可以通过JavaScript来获取。例如,如果一个元素的内容高度是300像素,这个属性的值就是300。 offsetHeight是指元素的高度,包含元素的内容、内边距、边框和外边距。这个属性的值是一个数值,以像素为单位,也可以通过JavaScript来获取。例如,如果一个元素的内容高度是300像素,内边距是20像素,边框是2像素,外边距是10像素,这个属性的值就是332。 可以通过以下代码来获取元素的clientHeight和offsetHeight: var element = document.getElementById("myElement"); var clientHeight = element.clientHeight; var offsetHeight = element.offsetHeight; 需要注意的是,clientHeight和offsetHeight都可以受到CSS样式的影响。例如,如果元素的display属性设置为none,这两个属性的值都是0。因此,在使用这两个属性的值时,需要注意元素是否已经被渲染。另外,如果元素有滚动条,clientHeight和offsetHeight的值还会包括滚动条的高度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值