当offsetParent为body时div的offsetLeft返回值与预期不符问题咨询
offsetLeft取值不符合预期问题解答
这不是Chrome浏览器的bug,是对offsetLeft的计算规则理解有误导致的预期偏差。
计算逻辑拆解
你预期的20px仅计算了body左内边距(10px)+ div左外边距(10px),但实际offsetLeft的计算还包含了你遗漏的3项布局值:
- html元素设置的1px左边框
- body元素自带的10px左外边距
- body元素设置的10px左边框
所有项累加结果为:1px + 10px + 10px + 10px + 10px = 41px,和实际取值完全一致。
核心规则说明
当元素的offsetParent为默认static定位的body元素时,offsetLeft统计的是视口左边缘到目标元素左外边距边缘的总距离,而非body内容区域到元素的距离。
验证方式
你可以通过修改样式验证规则:移除html的border样式、移除body的margin和border样式,再次获取div的offsetLeft,就会得到你预期的20px。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> html { border: 1px solid black; padding: 0; } body { width: 100px; height: 100px; border: 10px solid red; padding: 10px; margin: 10px; } div { width: 100px; height: 100px; border: 10px solid black; padding: 10px; margin: 10px; } </style> </head> <body> <div id="div"></div> </body> </html>
内容的提问来源于stack exchange,提问作者T.T
相关产品推荐
相关产品推荐

