元素操作(sizing,尺寸获取,设值,偏移算法,坐标算法)
css3的Sizing
Box-sizing是css3的box属性之一,遵循css的boxmodel原理,css中box model是分为两种,第一种是w3c的标准模型,另一种是ie的传统模型,他们相同之处都是对元素极端的模型,具体说就是对元素的width,height,padding,border以及元素实际尺寸的计算关系。
w3c的标准box model
外盒尺寸计算(元素控件尺寸)
Element空间高度 = content height +padding+border+margin
Element空间宽度 = content width +padding+border+margin
内盒尺寸计算(元素大小)
Element Height = content Height+padding+border(height为内容的高度)
Element Width = content Width +padding+border(width为内容的宽度)
ie传统下Box Model(ie6一下,不包括ie6版本)
外盒尺寸计算(元素空间尺寸)
Element空间的高度 = content heigth +margin(height包含了元素内容宽度,边框宽度,内距宽度)
Element空间的宽度 = content Width +margin(Width包含了元素内容宽度,边框宽度,内距宽度)
内盒尺寸计算(元素大小)
Element height = content height (height包含了的元素内容高度,边框高度,内距高度)
Element Width = content width(width包含了元素内容宽度,边框宽度,内距宽度)
box-sizing属性定义盒元素尺寸的计算方法:
content-box:默认值,计算方法为width/height = content,表示指定的宽度和高度仅限内容区域,边框和内边距的宽度不包含在内
padding-box:计算方法为width/height = content+padding,表示指定的宽度和高度包含内边距和北荣区域,边框宽度不包含在内
border-box:计算方法为width/height = content+padding+border,表示指定的w/h包含边框,内边距和内容区域。
inherit:表示继承父元素中box-sizing属性的值
正常情况下offsetWidth,offsetHeight获取元素的尺寸是足够了,但是某些元素比如SVG,MathML返回尺寸出错(这里不考虑),css3增加了一个box-sizing选择盒子模型,于是jquery里面就引入了augmentWidthOrHeight这个方法来处理因为box-sizing设置导致的问题,augmentWidthOrHeight这个方法其实就是对盒子模型的一个处理,所以jquery获取一个元素的w/h都是,ele.offsetW/H+augmentHeight方法也可以。
关于augmentWidthOrHeight方法
1.8增加了对css属性box-sizing的支持,需要与1.7.2的区别了,1.7.2和以前的版本无论是否定义box-sizing:border-box返回的都是盒模型中元素内容的W/H,不包括padding和border
augmentWidthOrHeight方法是特别针对盒子模型的处理,可通过将box-sizing设置为border-box,这可以令浏览器呈现带有指定宽度和高度的框,并把边框和内边距放入框中。
尺寸获取
有三种方法能够确定浏览器的尺寸(浏览器的窗口,不包括工具栏和滚动条)
对于ie,chrome,ff,opera,safari:
窗口显示区(可视区域)的宽度和高度,包括滚动条
window.innerHeight:ie不支持该属性,ie中的body元素clientHeight属性与该属性相同,window.innerWidth,ie不支持该属性,ie中的body元素的clientWidth属性与该属性相同。
对于ie5,6,7,8
窗口显示区(可视区域)的宽度和高度,不包括滚动条区域
document.documentElement.clientHeight
document.documentElement.clientWidth
或者
document.body.clientHeight/W
对于元素宽度尺寸的获取,jquery提供了width方法
对于文档级非普通元素window,document的宽度获取
$(window).width()代表了当前浏览器可见区域的宽度
$(document).width()则代表了整个文档的宽度,可以有滚动内容
window反应的是视图窗口,没有用window.innerWidth(包括滚动条区域),而是采用window.documentElement.clientWidth(不包括滚动条区域),document是反映了实际内容区间,那么可以存在溢出滚动,所以就是
document.documentElement.scrollWidth
document.body.scrollWidth
由于兼容问题就取2者之中的最大值
1,元素的宽度可以是内联或者通过link定义,所以通过style是不可取的
2,元在隐藏状态下是不能获取任何尺寸的display:none
3,css3引入了box-sizing的设置
jquery的处理
width,height在内部最终调用的是是jquery.css(elem,type,extra)方法,jquery.css是最终的一个针对所有css处理的接口。
display:none的状态下是无法获取元素的尺寸的,所以jquery在最开始之前必须要检测下这个状态,这个处理是通过钩子jquery,cssHooks["width"].get方法调用:
^(none|table(?!-c[ea]).+)/test(jQuery.css(elem, "display")) //代码很简单通过判断得到的值
当检测到是none的情况下, 就要把display设置为block,不行这样就改变了布局的原意了,本来就是隐藏的,jquery就会对元素增加position:absolute,visiblity:hidden,这样的属性达到display的效果,因为在visibility:hidden的请款下,是可以获取值的,只是对于用户可不见而已。
获取元素的尺寸值我们有offsetWidth,与offsetHeight,大多情况下是不够用了,但是有一种情况如果元素采用boxSizing处理,所以jquery好药对BorderBox情况的检测.
尺寸设值
当调用.width方法的时候,这个value参数可以是一个字符串或者一个数字,如果这个value参数只提供一个数字,jquery会自动加上单位px,如果只提供一个字符串,人格有效的css尺寸都可以为宽度赋值(100px 50%,auto),css宽度属性不包含padding,border,margin,除非box-sizing css属性被使用
如果没有明确的给单位,那么默认情况下px会被直接添加上去
.width设置的容器宽度是根据css box-sizing属性来定的,将这个属性改成border-box将造成这个函数改变成获取这个容器的outerWidth替换原来的内容宽度,可以直接用style这个接口直接操作直接注意的就是单位的转化数字需要加上px,还有box-sizing的处理
偏移算法
offsetWidth = borderleftW+paddingleftW+Widht+paddingrightW+borderrightW;
offsetHeight = bordertopW+paddingTop+height+paddingBottom+borderbottomW;
不再考虑box-sizing的情况下, 也就差不多了,但是关于尺寸的接口还有:innerW,innerH,outerW,outerH等
innerW/H
用于获取匹配集合中第一个元素的当前计算的内部宽高(padding,但不包括border),或设置每一个匹配元素的内部宽高
outerW/H
获取元素集合中第一个元素的当前计算宽高值,包括padding,border和选择的margin
innerW = ele.offsetW-ele.borderRightW-ele.borderLeftW
innerH = ele.offsetH-ele.borderTopHeight-ele.borderbottomHeight
outerW = ele.offsetW+ele.marginLeft+ele.marginRight
outerH = ele.offsetH+ele.marginTop+ele.marginBottom
坐标算法
获取位置又offset和position两个方法
offset方法允许我们检索一个元素相对于文档document的当前位置,他和position的差别在于,,position是相对于父级元素的位移。
当通过全局操作将一个新的元素放置到另一个已经存在的元素上面时,position是相对于父级元素的位移
当通过全局操作将一个新的元素放置到另一个已经存在的元素上面时,若要取得这个新的元素的位置, 那么使用offset更合适。
jquery不支持获取隐藏元素的偏移坐标,同样的,也无法取得隐藏元素的border,margin,padding信息,位置的方法没有像width/height一样去修复了display:none的情况,所以针对offset的定义是相对文档的,传统的说用offsetLeft和offsetTop是可以的,但是兼容各种浏览器就不行了,而且效率低
top: box.top + win.pageYOffset - docElem.clientTop,
left: box.left + win.pageXOffset - docElem.clientLeft
元素操作(sizing,尺寸获取,设值,偏移算法,坐标算法)的更多相关文章
- Java操作Linuxshell并且获取返回值
/** * */package com.king.weixin.util;import java.io.BufferedReader;import java.io.InputStream;/*** @ ...
- H5_0017:通过元素自定义属性值获取元素对象,并获取属性值
// 通过元素的属性值查找对象 // document.querySelectorAll("[data]").forEach(function(e) ...
- Spring 依赖注入 基于构造函数、设值函数、内部Beans、集合注入
Spring 基于构造函数的依赖注入_w3cschool https://www.w3cschool.cn/wkspring/t7n41mm7.html Spring 基于构造函数的依赖注入 当容器调 ...
- Spring 基于设值函数(setter方法)的依赖注入
当容器调用一个无参的构造函数或一个无参的静态 factory 方法来初始化你的 bean 后,通过容器在你的 bean 上调用设值函数,基于设值函数的 DI 就完成了. 下述例子显示了一个类 Text ...
- js获取浏览器和元素对象的尺寸
1.屏幕尺寸 window.screen.height //屏幕分辨率的高 window.screen.width //屏幕分辨率的宽 window.screen.availHeight //屏幕可用 ...
- 原生JS获取各种高度宽度、浏览器窗口滚动条的位置、元素的几何尺寸名
1)关于 pageX, clienX,offsetX,layerX pageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化 clientX:鼠标在页面上可视区域的位 ...
- 获取DOM元素位置和尺寸大小
JavaScript获取DOM元素位置和尺寸大小 在一些复杂的页面中经常会用JavaScript处理一些DOM元素的动态效果,这种时候我们经常会用到一些元素位置和尺寸的计算,浏览器兼容性问题也是不可忽 ...
- JQuery中根据属性或属性值获得元素(6种情况获取方法)
根据属性获得元素 1.比如要获取页面p标签中属性有id的元素 $("p[id]").css("color","red"); 根据属性值获得元 ...
- 如何通过源生js获取一个元素的具体样式值 /* getCss:获取指定元素的具体样式的属性值 curElement:[dom对象] attr:[string] */
昨天的博客些的真的是惨不忍睹啊!!!但是我的人生宗旨就是将不要脸的精神进行到底,所以,今天我又来了.哈哈哈哈哈! 方法一:元素.style.属性名:(这个有局限性--只能获取行内样式的值,对于样式表或 ...
随机推荐
- expected identifier before numeric constant
症状: expected identifier before numeric constantexpected `}' before numeric constantexpected unqualif ...
- 我的CSS布局之旅--持续更新
虽然我也接触前端一年之久了,但是无奈从切图布局下来的经验还真是很不足,因为之前比赛或者是做小项目时全部都是自己负责设计,所以都是编写边设计,哎呀,也是醉了:或者是有模板,然后从人家上面扒拉下来的,真的 ...
- NOIP 2013 货车运输 最大生成树加DFS巧妙AC
#include<set> #include<map> #include<cmath> #include<queue> #include<stac ...
- [转]Part1: Understanding !PTE , Part 1: Let’s get physical
http://blogs.msdn.com/b/ntdebugging/archive/2010/02/05/understanding-pte-part-1-let-s-get-physical.a ...
- break continue return
break 通常用在循环语句和开关语句中,当break语句用于do-while.for.while循环语句中时,可使程序终止循环而执行循环后面的语句, 通常break语句总是与if语句联在一起,即满足 ...
- 在Excel中制作金字塔条形图
使用场景:一项市场调查研究中,男性和女性.赞同和反对.满意和不满意的两方面的消费者,他们在某些项目上的指标分布特性一项产品组合决策中,乐观场景和悲观场景下各产品的获利情况一个产品试销活动中,不同门店渠 ...
- dom节点的操作
dom节点的操作 -- jQuery 内部插入 1.(结尾)append 方法 . appendto方法(为了方便链式操作) (开头)prepend方法 $('#div1').ap ...
- 公共交通3D指纹验证系统解决方案
为了响应国家关于老年人的优待政策,华本研发了退休老人乘公交车指纹认证系统.指纹认证系统不仅方便老人乘坐公交,还能为公共部门减压,杜绝伪造优待证乘坐公交的不法行为. 目前,优待证都是人工检查,缺乏有效的 ...
- AFNetworking的POST上传
- (void)download { // 1.创建网络管理者 // AFHTTPSessionManager 基于NSURLSession AFHTTPSessionManager *manager ...
- MySQL 5.7 解压版安装配置
测试环境 系统:Windows 10专业版 版本:MySQL Server 5.7.14 提纲 修改配置文件 初始化 安装服务.启动服务 修改root密码 步骤 1.解压安装包 在MySQL官 ...