JavaScript border与offsetWidth

本文探讨了一个关于CSS布局的问题:当使用JavaScript动态调整元素宽度时,为何加入边框后元素的实际宽度会增加而非减少。文章详细解释了style.width与offsetWidth的区别,并提供了获取元素实际宽度的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<style>
#div1{
    width:200px;
    height:200px;
    background:#f00;
    border:1px solid #000;
}
</style>
<script>
window.onload = function(){
    startMove();
}
function startMove(){
    var oDiv = document.getElementById('div1');
    oDiv.style.width = oDiv.offsetWidth - 1 + 'px';
</script>

<div id="div1"></div>
  • 为什么在样式中加了border之后方块会不断变宽而不是变窄?

style.width : width
offsetWidth : style.width + padding + border
随着时间的变化,可以列出这样一个表格:

    style.width        border     offsetWidth
①       200              2         202(200+2)
②       201(202-1)       2         203(201+2)
②       202(203-1)       2         204(202+2)
            …………………………………………

可以看出offsetWidth是不断增大的
1.offsetWidth属性可以返回对象的padding+border+width属性值之和,style.width返回值就是定义的width属性值。

2.offsetWidth属性仅是可读属性,而style.width是可读写的。

3.offsetWidth属性返回值是整数,而style.width的返回值是字符串。

4.style.width仅能返回以style方式定义的内部样式表的width属性值。

  • 如何获取style行内样式(而不把style写在行内样式里)?
    (这问题表达不清楚= =)
function getStyle(obj,attr){
    if(obj.currentStyle){       //IE
        return obj.currentStyle[attr];
    }else{                                  //其他浏览器
        return getComputedStyle(obj,false)[attr];
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值