DOM获取元素大小

本文介绍了多种获取网页元素尺寸的方法,包括使用style、getComputedStyle、cssRules等获取样式尺寸,使用clientWidth、clientHeight、scrollWidth、scrollHeight、offsetWidth、offsetHeight等获取实际尺寸,并对比了它们之间的差异。

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

1.style获取行内的元素大小
    var box = document.getElementById('box');
    alert(typeof box.style.width);
    alert(box.style.height);

2.获取计算后的CSS大小,如果没有设置,非IE会获取默认大小,IE会理解为0
    var style = window.getComputedStyle?window.getComputedStyle(box,null):null||box.currentStyle;
    alert(style.width);
    alert(style.height);

3.使用CSSStyleSheet对象中的cssRules属性(rules)
  PS:cssRules(rule)只能获取到内联和链接样式的宽和高,不能获取行内和计算后的样式
    var sheet = document.styleSheets[0];
    var rule = (sheet.cssRules||sheet.rules)[0];
    alert(rule.style.width);
    alert(rule.style.height); 
总结:这三种都不能获取实际大小(比如设置一个内边距,获取大的大小不会包含内边距)

获取实际大小

1.(clientWidth和clientHeight)即获取的是元素可视区域的大小
    alert(box.clientWidth);   //没有单位,但默认是px
    alert(box.clientHeight);  
    //alert(typeof box.clientHeight); //number ,返回的数据类型是数字,不是字符串了
    //如果设置了其他的单位,返回出来的结果还会转换为px像素
    //增加边框和外边距,无变化,是不算在clientWidth 和clientHeight的实际大小里面的
    //内边距会增加实际大小,最终值等于原本大小+内边距的大小
    //增加滚动条会减少实际大小,最终值等于原来的值减去滚动条的大小
    //在没有内边距和滚动条的情况下,没有设置CSS大小,那么IE为理解为0
2.scrollWidth scrollHeight 获取的是滚动内容的元素大小(不太稳定)
    alert(box.scrollWidth);
    alert(box.scrollHeight);
    //增加边框 不同的浏览器有不同的解释
    //增加内边距 最终值等于原本大小+内边距的大小
    //增加外边距 无变化
    //增加滚动条,最终值会等于原本大小减去滚动条的大小
    //如果文本溢出,没加滚动条,不同的浏览器也不太兼容
    //有溢出 加上滚动条方可兼容(ps:我的不兼容)

3. offsetWidth offsetHeight 这组属性返回元素实际大小
    alert(box.offsetWidth);
    alert(box.offsetHeight);
    //ps:这组属性稳定性好
    //增加边框,最终值等于原本大小加上边框大小
    //增加内边距,最终智等于原本大小加上内边距大小
    //增加外边距和滚动条,无变化

获取元素周边大小

1.clientLeft和clientTop  获取元素设置了左边框和上边框的大小
   alert(box.clientTop);   //获取左边框的长度
   alert(box.clientLeft);  //获取上边框的长度

2.offsetLeft 和offsetTop   //则组属性获取当前元素相对于父元素的位置
    alert(box.offsetLeft);  
    alert(box.offsetTop); 
    //PS:获取当前相对于父元素的位置,最好将它设为定位position:absolute;否则不同的浏览器会有不同的解释  
    //加上边框和内边距不会影响它的位置,但加上外边距会累加 

    //alert(box.offsetParent.tagName); //获取父元素
    //如果没有设置定位 会产生很多问题
    // alert(box.offsetTop+box.offsetParent.offsetTop);// 求出box距离页面口直接的距离
    alert(offsetTop(box))

 //如果有多层 累加
function offsetTop(element){
  var top = element.offsetTop;   //第一层的距离
  var parent = element.offsetParent;
  while(parent!==null){
    top+=parent.offsetTop;
    parent = parent.offsetParent;
  }
  return top;

}

3. scrollTop 和scrollLeft  //这组属性可以设置滚动条被隐藏的区域大小,也可设置定位到该区域
    //alert(box.scrollTop);
    //alert(box.scrollLeft);
    //box.scrollTop=100;
    //alert(box.scrollTop);
    box.scrollTop=35;

//如果不在0的位置 让它回到0位置
function scrollStart (element) {
    if (element.scrollTop!==0) {
        element.scrollTop=0;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值