`
chaoyi
  • 浏览: 309650 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

第二十二章 DOM 元素尺寸和位置

 
阅读更多

学习要点:
1.获取元素 CSS 大小
2.获取元素实际大小
3.获取元素周边大小

本章,我们主要讨论一下页面中的某一个元素它的各种大小和各种位置的计算方式, 以便更好的理解。
一.获取元素 CSS 大小
1.通过 style 内联获取元素的大小

var box = document.getElementById('box'); //获取元素
box.style.width; //200px、空
box.style.height; //200px、空

 
PS: style 获取只能获取到行内 style 属性的 CSS 样式中的宽和高, 如果有获取; 如果没有则返回空。
2.通过计算获取元素的大小

var style = window.getComputedStyle ?
window.getComputedStyle(box, null) : null || box.currentStyle;
style.width; //1424px、200px、auto
style.height; //18px、200px、auto

 
PS:通过计算获取元素的大小,无关你是否是行内、内联或者链接,它经过计算后得到的结果返回出来。如果本身设置大小,它会返回元素的大小,如果本身没有设置,非 IE浏览器会返回默认的大小,IE 浏览器返回 auto。
3.通过 CSSStyleSheet 对象中的 cssRules(或 rules)属性获取元素大小

var sheet = document.styleSheets[0]; //获取 link 或 style
var rule = (sheet.cssRules || sheet.rules)[0]; //获取第一条规则
rule.style.width; //200px、空
rule.style.height; //200px、空

 
PS:cssRules(或 rules)只能获取到内联和链接样式的宽和高,不能获取到行内和计算后的样式。
总结: 以上的三种 CSS 获取元素大小的方法, 只能获取元素的 CSS 大小, 却无法获取元素本身实际的大小。比如加上了内边距、滚动条、边框之类的。
二.获取元素实际大小
1.clientWidth 和 clientHeight
这组属性可以获取元素可视区的大小,可以得到元素内容及内边距所占据的空间大小。

box.clientWidth; //200
box.clientHeight; //200

 
PS: 返回了元素大小, 但没有单位, 默认单位是 px, 如果你强行设置了单位, 比如 100em之类,它还是会返回 px 的大小。(CSS 获取的话,是照着你设置的样式获取)。
PS:对于元素的实际大小,clientWidth 和 clientHeight 理解方式如下:
1.增加边框,无变化,为 200;
2.增加外边距,无变化,为 200;
3.增加滚动条,最终值等于原本大小减去滚动条的大小,为 184;
4.增加内边距,最终值等于原本大小加上内边距的大小,为 220;
PS: 如果说没有设置任何 CSS 的宽和高度, 那么非 IE 浏览器会算上滚动条和内边距的计算后的大小,而 IE 浏览器则返回 0。
2.scrollWidth 和 scrollHeight
这组属性可以获取滚动内容的元素大小。

box.scrollWidth; //200
box.scrollWidth; //200

 
PS:返回了元素大小,默认单位是 px。如果没有设置任何 CSS 的宽和高度,它会得到计算后的宽度和高度。
PS:对于元素的实际大小,scrollWidth 和 scrollHeight 理解如下:
1.增加边框,不同浏览器有不同解释:
a) Firefox 和 Opera 浏览器会增加边框的大小,220 x 220
b) IE、Chrome 和 Safari 浏览器会忽略边框大小,200 x 200
c) IE 浏览器只显示它本来内容的高度,200 x 18
2.增加内边距,最终值会等于原本大小加上内边距大小,220 x 220,IE 为 220 x 38
3.增加滚动条,最终值会等于原本大小减去滚动条大小,184 x 184,IE 为 184 x 18
4.增加外边据,无变化。
5.增加内容溢出,Firefox、Chrome 和 IE 获取实际内容高度,Opera 比前三个浏览器获取的高度偏小,Safari 比前三个浏览器获取的高度偏大。
3.offsetWidth 和 offsetHeight
这组属性可以返回元素实际大小,包含边框、内边距和滚动条。

box.offsetWidth; //200
box.offsetHeight; //200

 
PS:返回了元素大小,默认单位是 px。如果没有设置任何 CSS 的宽和高度,他会得到计算后的宽度和高度。
PS:对于元素的实际大小,offsetWidth 和 offsetHeight 理解如下:
1.增加边框,最终值会等于原本大小加上边框大小,为 220;
2.增加内边距,最终值会等于原本大小加上内边距大小,为 220;
3.增加外边据,无变化;
4.增加滚动条,无变化,不会减小;
PS:对于元素大小的获取,一般是块级(block)元素并且以设置了 CSS 大小的元素较为方便。 如果是内联元素(inline)或者没有设置大小的元素就尤为麻烦, 所以, 建议使用的时候注意。
三.获取元素周边大小
1.clientLeft 和 clientTop
这组属性可以获取元素设置了左边框和上边框的大小。

box.clientLeft; //获取左边框的长度
box.clientTop; //获取上边框的长度

 
PS:目前只提供了 Left 和 Top 这组,并没有提供 Right 和 Bottom。如果四条边宽度不同的话,可以直接通过计算后的样式获取,或者采用以上三组获取元素大小的减法求得。
2.offsetLeft 和 offsetTop
这组属性可以获取当前元素相对于父元素的位置。

box.offsetLeft; //50
box.offsetTop; //50

 
PS:获取元素当前相对于父元素的位置,最好将它设置为定位 position:absolute;否则
不同的浏览器会有不同的解释。
PS:加上边框和内边距不会影响它的位置,但加上外边据会累加。

box.offsetParent; //得到父元素

 
PS:offsetParent 中,如果本身父元素是<body>,非 IE 返回 body 对象,IE 返回 html 对象。如果两个元素嵌套,如果上父元素没有使用定位 position:absolute,那么 offsetParent 将返回 body 对象或 html 对象。所以,在获取 offsetLeft 和 offsetTop 时候,CSS 定位很重要。
如果说,在很多层次里,外层已经定位,我们怎么获取里层的元素距离 body 或 html元素之间的距离呢?也就是获取任意一个元素距离页面上的位置。那么我们可以编写函数,通过不停的向上回溯获取累加来实现。
box.offsetTop + box.offsetParent.offsetTop; //只有两层的情况下
如果多层的话,就必须使用循环或递归。

function offsetLeft(element) {
var left = element.offsetLeft; //得到第一层距离
var parent = element.offsetParent; //得到第一个父元素
while (parent !== null) { //如果还有上一层父元素
left += parent.offsetLeft; //把本层的距离累加
parent = parent.offsetParent; //得到本层的父元素
} //然后继续循环
return left;
}

 
3.scrollTop 和 scrollLeft
这组属性可以获取滚动条被隐藏的区域大小,也可设置定位到该区域。

box.scrollTop; //获取滚动内容上方的位置
box.scrollLeft; //获取滚动内容左方的位置

 
如果要让滚动条滚动到最初始的位置,那么可以写一个函数:

function scrollStart(element) {
if (element.scrollTop != 0) element.scrollTop = 0;
}

 

分享到:
评论

相关推荐

    HTML第五章-工具

    jQuery、React、Vue.js和Angular等前端框架和库,简化了JavaScript的使用,提供了丰富的功能,如DOM操作、事件处理、动画效果等。它们大大提升了开发效率,同时降低了代码复杂度。 七、代码验证工具 HTML Tidy、W3C...

    JS第十一章轮播图 二级目录

    "JS第十一章轮播图 二级目录"这个主题聚焦于使用JavaScript实现轮播图效果,这是一种常见的网页元素,用于展示多张图片或内容并自动循环播放。在这一章节中,我们将深入探讨轮播图的基本概念、实现方法以及相关的...

    WEB前端开发初级教案.pdf

    第十二章 事件: 1. 事件:介绍了Web事件的基本概念和分类。 2. 事件对象(Event):讲解了事件对象的属性和方法,用于获取事件详细信息。 3. 事件流:详细说明了事件的捕获、目标和冒泡阶段。 4. 事件监听(DOM2级...

    Dreamweaver CS5从新手到高手视频教程下载第22章 打造全能网站——添加各种实用工具.zip

    在本《Dreamweaver CS5从新手到高手视频教程》的第22章中,我们将深入探讨如何利用Adobe Dreamweaver CS5这个强大的网页设计工具,打造一个功能全面且实用的网站。本章节的重点在于向学习者介绍如何添加各种实用工具...

    15天学会JQuery

    ### 第二章:jQuery选择器 jQuery选择器是其核心功能之一,它们允许我们高效地选取DOM元素。本章将深入讲解CSS选择器、ID选择器、类选择器、属性选择器以及伪类选择器等,让你熟练掌握元素的选取技巧。 ### 第三章...

    web前端开发技术储久良第三版答案

    《Web前端开发技术储久良第三版答案》涵盖了前端开发领域的关键知识点,主要针对储久良教授编著的教材第三版中的习题和实验提供了详尽的解答。这本书旨在帮助学习者深入理解Web前端开发的核心概念和技术,通过解决...

    CSS+XHTML+ JavaScript完全学习手册

    第十二章:XHTML的精髓 XHTML是HTML的升级版,强调语义化和严格的语法。本章详细介绍了XHTML的基本语法,包括标签的正确使用、属性值的引号规范、闭合标签的重要性等。此外,还讲解了XHTML文档结构,如DOCTYPE声明、...

    JavaScript应用177例

    第22章(\cha22) 22.1.htm 图像拖动 22.2.htm 按钮控制 22.3.htm 感应鼠标 22.4.htm 花环效果 22.5.htm 流星效果 22.6.htm 图像运动 22.7.htm ...

    北大青鸟 8.0 S1使用HTML语言和CSS开发商业站点

    **第二章:HTML高级特性** 这一章深入讲解HTML的更多元素,如表格、列表、表单、框架和多媒体内容(音频、视频)。同时,还会介绍如何利用HTML5的新特性,如语义化标签(如`&lt;article&gt;`、`&lt;section&gt;`、`&lt;header&gt;`和`...

    大学网页作业

    2. **第二章:CSS基础** CSS(Cascading Style Sheets)用于控制网页的外观和布局。在这一章,学生会学习选择器的使用,如类选择器、ID选择器,以及盒模型、定位、浮动和布局技巧。 3. **第三章:网页布局** 这...

    WPF编程宝典 part1

    第22章 列表、树和网格 601 22.1 ListView控件 601 22.1.1 使用GirdView创建列 602 22.1.2 创建自定义视图 606 22.2 TreeView控件 613 22.2.1 创建数据绑定的TreeView 控件 614 22.2.2 将DataSet对象绑定到TreeView ...

    WPF编程宝典 part2

    第22章 列表、树和网格 601 22.1 ListView控件 601 22.1.1 使用GirdView创建列 602 22.1.2 创建自定义视图 606 22.2 TreeView控件 613 22.2.1 创建数据绑定的TreeView 控件 614 22.2.2 将DataSet对象绑定到TreeView ...

    Python编程入门经典

    第1章 编程基础和字符串 3 1.1 编程与使用计算机的区别 3 1.1.1 编程的一致性 3 1.1.2 编程的可控性 4 1.1.3 程序要应对变化 4 1.1.4 小结 4 1.2 准备工作 4 1.2.1 在非Windows系统上安装 Python 3.1 5 1.2.2 使用...

    山东大学 web技术 全部章节 作业

    【描述】:这份资料包含22章的Web技术作业,以docx文档形式提供,这意味着我们可以通过这些作业了解学习者在掌握Web技术过程中涉及的具体知识点和技能要求。 1. **HTML基础**:作为Web页面的基础,HTML(HyperText ...

    北大青鸟ACCP8.0S2蔚蓝网上书店

    【北大青鸟ACCP8.0S2蔚蓝网上书店】是北大青鸟教育机构推出的一套编程课程的第二学期项目,旨在通过实践的方式教授学员如何构建一个完整的网上书店系统。这个项目主要聚焦于代码类和jQuery技术的应用,旨在提升学员...

Global site tag (gtag.js) - Google Analytics