20.元素的尺寸和位置

DOM元素尺寸与位置详解

DOM元素尺寸和位置

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

本章,我们将主要讨论一下页面中的某一个元素它的各种大小和各种位置的计算方式,
以便更好的理解。

一、获取元素的CSS大小
1.通过style内联获取元素的大小
var box = document.getElementById('box'); //获取元素
box.style.width; //200px,空
box.style.height; //200px,空

/*
style获取行内的css大小
*/
window.onload = function(){
var box = document.getElementById('box');
alert(typeof box.style.width);
alert(box.style.width);
}

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

window.onload = function(){
var box = document.getElementById('box');
var style = window.getComputedStyle ? window.getComputedStyle(box , null) : null || box.currentStyle;
alert(style.width);
alert(style.height);
}


PS:通过计算获取元素的大小,无论你是否是 行内、内联或者链接,它经过计算后
得到的结果返回出来。如果本身设置大小,它会返回元素的大小,如果本身没有设置,
非IE浏览器会返回默认的大小,IE浏览器返回auto。


3.通过CSSStyleSheet对象中cssRules(或rules)属性获取元素大小
var sheet = document.styleSheet[0]; //获取link或style
var rule = (sheet.cssRules || sheet.rules)[0]; //获取第一条规则
rule.style.width;
rule.style.height;

window.onload =function(){
var sheet = document.styleSheet[0];
var rule = (sheet.cssRules || sheet.rules)[0];
alert(rule.style.width);
alert(rule.style.height);
}


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.scrollHeight; //200

PS:返回了元素大小,默认单位是px。如果没有设置任何CSS的宽和高度,它会得到计算后的宽度和高度。
(Opera浏览器的高度会理解为0)

PS:对于元素的实际大小,scrollWidth和scrollHeight理解如下:
1.增加边框,不同浏览器有不同的理解:
a) Firefox和Opera浏览器会增加边框的大小,220x220
b)IE、Chrome和Safari浏览器会忽略边框大小,200x200
c)IE浏览器只显示它本来内容的高度,200x18

2.增加内边距,最终值会等于原本大小加上内边距大小,220x220,IE为220x38
3.增加滚动条,最终值会等于原本大小减去滚动条大小,184x184,IE为184x18
4.增加外边距,无变化。
5.增加内容溢出,Firefox、Chrome和IE获取实际内容高度,Opera比前三个浏览器获取的高度偏小,
Safari比前三个浏览器获取的高度偏大。

 

3.offerWidth和offerHeight
这组属性可以返回元素实际大小,包含边框、内边距和滚动条。
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和Botton。如果四条边宽度不同的话,
可以直接通过计算后的样式获取,或者采用以上三组获取元素大小的减法求得。

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元素之间的
距离呢?也就是获取任意一个元素距离页面上的位置,那么我们可以编写函数

function offsetTop(elemt){
var top = element.offsetTop;
var parent = element.offsetParent;

while(parent !== null){
top += parent.offsetTop;
parent = parent.offsetParent;
}
return top;
}

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; //获取滚动条内容左边的位置

//可以赋值
box.scrollTop = 100;


如果要让滚动条滚动到最初始的位置,那么可以写一个函数;
function scrollStart(element){
if(element.scrollTop !=0)element.scrollTop = 0;
}

转载于:https://www.cnblogs.com/journey-IT/p/5260438.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化并行计算等改进策略。; 适合人群:具备一定Python编程基础优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
<think>嗯,用户想设置ElMessageBox.confirm的显示位置,我得先回忆一下ElementUI的文档。记得MessageBox组件通常是以全局弹窗的形式出现,可能默认位置是居中。但用户需要调整这个位置,可能需要自定义样式或者使用其他参数。 首先,查看引用内容,引用3提到了dangerouslyUseHTMLStringcustomClass属性,这说明可以通过自定义类名来修改样式。而引用2中的例子展示了如何根据类型调整按钮,可能类似的思路可以应用在位置调整上。例如,给弹框添加一个自定义的类,然后通过CSS定位来控制位置。 另外,ElementUI的MessageBox配置选项中是否有直接设置位置的参数呢?可能没有现成的参数,但通过自定义类名结合CSS的position属性,比如fixed,再设置topleft值,应该可以实现位置的调整。比如,创建一个类.custom-message-box,然后在样式中定义topleft的值,或者使用transform来偏移。 需要注意的是,直接修改全局样式可能会影响其他弹框,所以最好是通过customClass属性指定特定的类名,这样样式只作用于该实例。同时,使用dangerouslyUseHTMLString可能会有安全风险,但如果只是调整位置,可能不需要开启这个选项,只需自定义类即可。 总结下来,步骤应该是:在调用ElMessageBox.confirm时,设置customClass,然后在CSS中为该类添加定位样式,比如position: fixed; top: 100px; left: 50%; transform: translateX(-50%); 或者其他具体的位置值。这样就能改变弹框的显示位置了。</think>### 设置 `ElMessageBox.confirm` 弹框显示位置的方法 在 ElementUI 中,`ElMessageBox.confirm` 的显示位置默认是居中于浏览器窗口的。若需自定义其位置,可通过以下两种方式实现: --- #### 方法一:通过 **`customClass` 参数** 自定义样式定位 1. **添加自定义类名**:在调用 `ElMessageBox.confirm` 时,通过 `customClass` 参数绑定自定义类名。 2. **编写 CSS 样式**:通过 `position: fixed` `top/left` 属性控制弹框位置。 **代码示例**: ```javascript this.$confirm('确认删除吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', customClass: 'custom-messagebox-position' // 自定义类名 }).catch(() => { /* 取消逻辑 */ }); ``` **CSS 样式**: ```css .custom-messagebox-position { position: fixed; top: 20%; /* 调整上边距 */ left: 50%; /* 水平居中 */ transform: translateX(-50%); /* 微调水平偏移 */ } ``` --- #### 方法二:全局修改默认样式(谨慎使用) 若需所有弹框统一调整位置,可直接覆盖 ElementUI 默认样式: ```css .el-message-box { position: fixed; top: 100px !important; /* 强制覆盖默认值 */ left: 30% !important; } ``` --- #### 注意事项 1. **定位方式**:优先使用 `fixed` 而非 `absolute`,避免受父元素布局影响[^3][^4]。 2. **样式优先级**:通过 `!important` 提升自定义样式优先级,确保覆盖默认样式[^1][^3]。 3. **响应式适配**:建议结合媒体查询(`@media`)适配不同屏幕尺寸。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值