一篇弄懂 offsetWidth、offsetHeight、offsetleft、offsetTop和offsetParent的区别!(1)

article/2025/10/22 16:04:18

快速理解offset之间的区别

    • 1.offsetWidth与offsetHeight
    • 2.offsetParent
    • 3.offsetleft、offsetTop

以下代码均在Chrome浏览器中测试

1.offsetWidth与offsetHeight

  1.offsetWidth:元素的布局宽度。
  2.offsetHeight:元素的布局高度。

  offsetWidth、offsetHeight 的计算:width/height + padding + border

接下来我们看一个例子:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {padding: 0;margin: 0;}#div {width: 200px;height: 150px;background-color: rgb(21, 138, 235);border: 30px solid rgb(235, 174, 9);padding: 40px;margin: 50px;box-sizing: content-box;}</style>
</head>
<body><div id="div"></div><script>window.onload = function () {var oDiv = document.getElementById('div');var Width = oDiv.offsetWidth  //340 = width200 + border30 * 2 + padding40 * 2var Height = oDiv.offsetHeight //290 = height150 + border30 * 2 + padding40 * 2console.log("offsetWidth:"+Width);//offsetWidth:340console.log("offsetHeight:"+Height);//offsetWidth:290}</script>
</body>
</html>

效果如下:
在这里插入图片描述

  1.这里我们要注意,offsetWidth和offsetHeight 的值是个数值,没有单位。
  2.而且,offsetWidth、offsetHeight 的计算受 box-sizing 影响。

  3.box-sizing: content-box;是默认样式,而box-sizing:border-box;会重新计算盒子模型,将原本设置好的width和height当做盒子内容的宽度(width)加内边距(padding)和边框(border)的总和。

接下来我们看看设置了box-sizing:border-box;后offsetWidth、offsetHeight的值:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {padding: 0;margin: 0;}#div {width: 200px;height: 150px;background-color: red;border: 30px solid blue;padding: 40px;margin: 50px;box-sizing: border-box;}</style>
</head>
<body><div id="div"></div><script>window.onload = function () {var oDiv = document.getElementById('div');var Width = oDiv.offsetWidth  //200 = width200var Height = oDiv.offsetHeight //150 = height150 console.log("offsetWidth:"+Width);//offsetWidth:200console.log("offsetHeight:"+Height);//offsetWidth:150}</script>
</body>
</html>

效果如下:
在这里插入图片描述

2.offsetParent

  1.依次向上寻找定位的父级元素
  2.只和定位的父级有关,如果向上没有找到定位的父级,返回body元素。
接下来我们看一个例子:

<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>#div3 {position: relative;}</style>
</head>
<body><div id="div3"><div id="div2"><div id="div1"></div></div></div><hr><script>window.onload = function () {var div1 = document.getElementById('div1');var parent1 = div1.offsetParentconsole.log(parent1);//div3 }</script>
</body>

  注意:div1 设置 fixed时,parent-谷歌返回 null,火狐返回 body 2、div1 未设置 fixed时,parent 返回父级定位的元素,如果没有 返回 body

以下代码在谷歌中演示

<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>#div3 {position: relative;}#div1{position: fixed;}</style>
</head>
<body><div id="div3"><div id="div2"><div id="div1"></div></div></div><hr><script>window.onload = function () {var oDiv = document.getElementById('div1');var parent1 = oDiv.offsetParentconsole.log(parent1);//null}</script>
</body>

3.offsetleft、offsetTop

  offsetTop表示元素的上外边框至offsetParent元素的上内边框之间的像素距离
  offsetLeft表示元素的左外边框至offsetParent元素的左内边框之间的像素距离

接下来我们看一个例子:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {padding: 0;margin: 0;}#div1 {width: 200px;height: 150px;padding: 10px;border: 5px solid rgb(235, 174, 9);background-color: rgb(21, 138, 235);margin: 6px;}#div2 {border: 10px solid rgb(32, 169, 187);padding: 15px;margin: 7px;}#div3 {padding: 20px;border: 10px solid green;margin: 8px;position: relative;}</style></head><body><div id="div3"><div id="div2"><div id="div1"></div></div></div><script>window.onload = function () {var div1 = document.getElementById('div1');var left = div1.offsetLeftvar top = div1.offsetTopconsole.log(left, top) // 58,58// #div1 (6) + #div2 (10+15+7) + #div3 (20) = 58// 如果父级没有设置定位标签,div1 的 offsetParent 为 body 此时为76,76}</script></body>
</html>

在这里插入图片描述

  最后整理成图片,如下图所示:
在这里插入图片描述

相关文章:
链接: 一篇弄懂 scrollWidth、scrollHeight、scrollLeft和scrollTop的区别!(2).
链接: 一篇弄懂 clientWidth、clientHeight、clientLeft、clientTop的区别!(3).


http://chatgpt.dhexx.cn/article/twnZd52g.shtml

相关文章

搞清楚 clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop

网页可见区域高&#xff1a;document.body.clientHeight 网页正文全文高&#xff1a;document.body.scrollHeight 网页可见区域高&#xff08;包括边线的高&#xff09;&#xff1a;document.body.offsetHeight 网页被卷去的高&#xff1a;document.body.scrollTop 屏幕分辨率…

使用TS中元素使用offsetHeight,offsetTop,offsetLeft报错

使用ts后&#xff0c;可以使用scroll家族和client家族&#xff0c;但使用offset家族会报错但也能运行 报错 类型“Element”上不存在属性“offsetHeight” 原因&#xff1a;ts中Element类型上没有定义offsetHeight&#xff0c;解决如下&#xff1a;通过as HTMLDivElement解决…

彻底搞懂offsetHeight,clientHeight,scrollHeight,scrollTop,offsetTop

offsetHeight和clientHeight都是获取dom元素自身的高度的&#xff0c;它们之间的区别在于&#xff1a; offsetHeight&#xff1a;获取的高度除了自身高度外&#xff0c;还包含了padding和border clientHeight&#xff1a;获取的高度除了自身高度外&#xff0c;还包含了padding …

正文内容过长时,offsetHeight的获取和监听变化

正文内容过长时&#xff0c;超过4行隐藏&#xff0c;点击全部展开&#xff0c;可视高度&#xff08;可见高度&#xff09;offsetHeight的获取和监听变化_无围之解的博客-CSDN博客 核心逻辑代码 mounted() {this.$nextTick(() > {this.h1 this.$refs.div11.offsetHeight;});…

offsetHeight及其他

网页可见区域宽&#xff1a;document.body.clientWidth 网页可见区域高&#xff1a;document.body.clientHeight 网页可见区域宽&#xff1a;document.body.offsetWidth (包括边线的宽) 网页可见区域高&#xff1a;document.body.offsetHeight (包括边线的宽) 网页正文全文宽&a…

clientHeight offsetHeight scrollHeight offsetTop scrollTop

文章目录 各属性详解实现 offsetParent、offsetLeft/offsetTop深度剖析element.offsetParent定义祖先元素中不存在定位元素webkit内核、Firefox下的特殊情况 element.offsetWidth / element.offsetHeight定义 element.offsetLeft / element.offsetTop定义element在正常文档流中…

div之各种高度篇-offsetHeight、clientHeight、scrollHeight、 offsetHeight等等

资历尚浅,真的记不住这些花里胡哨的高度宽度、但是又经常要用到,头大 以下都是自己的理解,如果有误可以提醒下谢谢~ 以上图div为例子 一、offsetHeight = height + border + padding = 342 (返回不带px的数值) 二、clientHeight = height + padding = 340 (返回不…

关于offsetTop与offsetHeight的区别以及使用方法

offsetTop和offsetHeight是设置一个元素的位置和获取圆度大小经常会使用的参数&#xff0c;下面具体讲一下他们的区别于联系&#xff1a; 例如obj为html的一个元素对象&#xff0c; obj.offsetTop指的是obj距离上方或者父级元素&#xff08;position非static&#xff09;的位…

clientHeight和offsetHeight

clientHeight&#xff1a;包括padding但不包括border、水平滚动条、margin的元素的高度。对于inline的元素这个属性一直是0&#xff0c;单位px&#xff0c;只读元素。 offsetHeight&#xff1a;包括padding、border、水平滚动条&#xff0c;但不包括margin的元素的高度。对于in…

PHP 简单封装返回JSON数据接口

前言 本文使用 php 来做一个简单的接口&#xff0c;客户端传入数据&#xff0c;该接口返回 JSON 格式数据。 api.php <?php/* * (PHP简单封装JSON数据接口) * param integer $code 状态码 * param string $message 提示信息 * param array $data 数据 * return json(str…

PHP微信支付接口开发

在开始之前先看下功能 然后选择刷卡支付 输入手机微信钱包的授权码&#xff0c;成功运行 方法步骤&#xff1a; 需要先下一个DEMO&#xff0c;下DEMO的地方有两个&#xff1a; 一个是微信官方开发者文档地址 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter11_1…

Shopify 全套接口开发,产品上传、订单检索、自动履行【PHP接口】开发

PHP 接口: 以下接口为基础实现接口,可以自由调用。 以下基础方法实现了: 产品的自动发布,将产品直接发布到店铺中。 订单的自动检索,将店铺中需要履行的订单全部拉下来。 订单的自动履行(发货),将运单号同步到店铺后台发货。 产品上传推荐使用CSV 方式,即将多个产品…

人人都是接口开发大师,这个开源项目花5分钟就可以开发一个API接口

PhalApi开源接口框架 读音&#xff1a;派框架&#xff0c;官网&#xff1a;https://www.phalapi.net/ PhalApi是一个PHP轻量级开源接口框架&#xff0c;致力于快速开发接口服务。支持HTTP/SOAP/RPC等协议&#xff0c;可用于搭建接口/微服务/RESTful接口/Web Services。承诺永…

php API接口入门

1.简述: api接口开发,其实和平时开发逻辑差不多;但是也有略微差异; 平时使用mvc开发网站的思路一般是都 由控制器 去 调用模型,模型返回数据,再由控制器把数据放到视图中,展现给用户; api开发是:使用控制器 去调用模型,模型返回数据,在有控制器 输出 json格式字符…

php开发之接口的使用

继承简化了对象&#xff0c;类的创建&#xff0c;增加了代码的可重性&#xff0c;但php只支持单继承&#xff0c;如果要实现多重继承&#xff0c;就要使用多个接口。 接口通过interface关键字来声明&#xff0c;并且类中只能包含未实现的方法和一些成员变量&#xff0c;格式如…

PHP开发APP接口注意事项

一、双方统一接口开发文档 为了提升开发效率及沟通方便&#xff0c;需要建立规范的开发文档。 一般保护接口的功能或页面、接口地址、接口参数、接口返回值等说明。 参考文档格式&#xff1a; 二、注意以下 分版本&#xff0c;为后面接口升级做好打算。提供密钥和token。…

YII2.0 接口开发步骤

新建表的model来操作表。 访问你本地站点的XXX/gii 即可打开。如果提示无法访问请自行修改config/web.php 文件下面的IP选项 $config[modules][gii] [class > yii\gii\Module,allowedIPs>[127.0.0.1,::1,"192.168.*", "自己定义自己的IP"],]; 这时候…

PHP开发微信商家转账到零钱接口

仔细阅读了微信接口文档并且参考网上的案例&#xff0c;完成了商家转账到零钱的接口开发&#xff0c;目前已在使用中 下面是完整代码&#xff1a; /*** notes 商家转账到零钱*/public static function transfer($withdrawApply,$userAuth,$config){//请求URL$url https://api…

php开发App接口

APP接口简介&#xff1a; 什么是app接口&#xff1f;app接口就是用服务端程序如php写好的脚本&#xff0c;以供app客户端请求而获得数据的一个东西。比如一个视频app的首页&#xff0c;肯定有一些视频列表&#xff0c;那么当你打开这个app时&#xff0c;这个封装在app里的这个首…

PHP对接抖音开发平台接口

一、说明二、代码三、代码运行需知四、功能扩展五、接口调用需要注意的点六、接口文档中的 坑&#xff08;以订单列表接口为例&#xff09;1、请求参数、响应参数 代表的具体值不清晰2、页码从第0页开始&#xff08;这个属于需要注意的点&#xff09;3、金额 是元 还是 分&…