javascript之复习(css属性值的计算)
js取div的宽高咋办,css有content-box,border-box,padding-box,表现又不一样。好在有个offsetWidth,
<style type="text/css">
*{margin: 0;padding: 0;}
#aa{
margin: 20px;
padding: 15px;
border: 10px solid red;
width: 50px;
height: 50px;
background-color: orange;
box-sizing:border-box;
}
</style>
</head>
<body>
<div id="aa">a</div>
</body>
加不加box-sizing的offsetWidth分别为100和50,content-box的时候是15*2+10*2+50=100;另一个是15*2+10*2+0=50;border-box的时候width是指width+border+padding的值。所以可得
offsetWidth=borderWith+paddingWidth+width;都成立。offsetWidth不受盒子模型影响,用起来是非常好的。
在jq中,提供innerWidth()方法和outerWidth方法,计算是paddingWidth+width;但是在设置的时候不能直接设置,他就是个虚拟的值,不存在的属性。
outerWidth() 计算是borderWidth+paddingWidth+width;
jq还有个height()是只取width的。
还有就是浏览器窗口大小和页面大小,网景给我们提供了一个好用的只读属性innerWidth
,IE9也支持它,用它获取窗口的宽度,但是旧版本的IE的怪异模式下表现不一,ie又发明了一套clientXXX的属性,
用于获取元素可视区域的尺寸。
//可视区的宽度,不包括滚动条,即窗口大小
var windowWidth=document.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;
如果不支持旧版本ie,或者手机框架,可以放心的用
windowWidth=window.innerWidth;
再来看文档的宽,标准浏览器搞了一套outherXXX的属性,那是获得浏览器尺寸的。ie又给我们奉上了scrollXXX和offsetXXX,但是实现的时候又有好多的意见不一致,搞得没法通用。留下兼容性问题。
//浏览器尺寸的
outerWidth和outherHeight
//offsetWidth
IE,Opera认为offsetWidth=clientWidth+滚动条+边框
NS,FF认为offsetWidth是网页内容实际宽度,可以小于clientWidth
//srollWidth
IE、Opera认为scrollWidth是网页实际内容宽度,可以小于clientWidth
NS、FF认为srcollWidth是网页内容宽度,不过最小值是clientWidth
//于是取其最大值
var pageWidth=Math.max(
document.documentElement.scrollWidth,
document.documentElement.offsetWidth,
document.body.scrollWidth,
document.body.offsetWidth
)
下面再来说元素的坐标
div.offsetLeft,offsetTop,都是相对于offsetParent的位置,我们一直向上累加,就能得到元素相对于页面的坐标。
元素的offsetParents是怎么确定的呢?
如果元素被移出dom或display为none,或为HTML,BODY元素,或position的精确值为fixed时,返回null,
否则分为2种情况,position为absolute,relative的元素的offsetParent总是为其最近的已定位的祖先,没有找最近的td,th元素,再没有返回body。
position为static的元素的offsetPatent先找最近的td,th,table元素,再没有返回body。
但现实中,ff在position为fixed返回body,在ie678下,会增加一条规则,先寻找离元素最近的设置有能激活hasLayout的祖先元素。
jq也有个offsetParent,它将选择元素的所有offsetParent收集起来,包装为jq对象返回。
浏览器认为offsetParent最高取到body,可能为null,jq认为元素的offsetParent的position必须为relative或absolute,否则继续回上寻找另一个被定位的祖先,没有返回html,
jq认为position:fixed也有offsetParent,就是当前可视区。
window.pageXoffset是滚动条x距离,pageXOffset 设置或返回当前页面相对于窗口显示区左上角的 X 位置。pageYOffset 设置或返回当前页面相对于窗口显示区左上角的 Y 位置。
还有div.scrollTop,div.scrollLeft...
上一张老图

javascript之复习(css属性值的计算)的更多相关文章
- CSS学习(7)继承、属性值的计算过程
子元素会继承父元素的某些css属性 通常跟字体相关的属性都能被继承,具体的可以在mdn里查询是否是可继承属性 属性值的计算过程(渲染过程) 按照页面文档的树形目录结构进行依次渲染 前提条件:渲染的元素 ...
- JS中使用document.defaultView.getComputedStyle()、currentStyle()方法获取CSS属性值
在对网页进行调试的过程中,经常会用到js来获取元素的CSS样式,方法有很多很多,现在仅把我经常用的方法总结如: 1. obj.style:这个方法只能JS只能获取写在html标签中的写在style属性 ...
- JavaScript如何获取css属性
原文:JavaScript如何获取css属性 在web开发中,很多时候我们需要用JavaScript对网页的样式进行修改,接下来,我们就来看一下我们该如何访问css属性,针对不同情况及案例来进行分析. ...
- CSS属性值一览
牢记内联式>嵌入式(嵌入式中设置各种文字字体.大小.位置.颜色.外距.内距最好用选择器)>外部式(外联式)的使用 属性和属性值(点击可展开) font-family(字体) Microso ...
- css属性值语法解读
//margin 形式语法: [ <length> | <percentage> | auto ]{1,4} //合法实例: margin: style /*单值语法 */ 举 ...
- js修改css属性值
推荐用dom.style.setProperty('属性','属性值'); 例如: $("#id")[0].style.setProperty('margin-top','1px' ...
- 使用JavaScript获取样式的属性值
1 . 在js中可以使用style属性来获取样式的属性值(只能获取内联样式的属性值) 语法格式为: HTML元素.style.样式属性; 2 . 在IE浏览器中,使用currentStyle来获取 ...
- calc() 计算CSS属性值
calc()是css3的一个新增的功能,用来指定元素的长度.比如说,你可以使用calc()给元素的border.margin.pading.font-size和width等属性设置动态值.calc() ...
- JS使用getComputedStyle()方法获取CSS属性值
在对网页进行调试的过程中,经常会用到js来获取元素的CSS样式,方法有很多很多,现在仅把我经常用的方法总结如下: 1. obj.style:这个方法只能JS只能获取写在html标签中的写在style属 ...
随机推荐
- getMessage(),getFile,getLine获取异常用法
try { $param = $request->all(); $param['building_id'] = 0; $param['sync'] = 2; // 1小程序2App $param ...
- mongodb的安装方法
下载安装 mongodb官网下载地址:https://www.mongodb.org/downloads#produc...直接下载.msi文件并安装到指定目录即可.我的安装路径是D:\mongodb ...
- python中的 list (列表)append()方法 与extend()方法的用法 和 区别
参考: https://www.cnblogs.com/xuchunlin/p/5479119.html
- python爬虫之爬虫性能篇
一.首先想到的是for循环,单线程爬取每个url,但是如果有url出现了问题,后面的url就得等,性能低. 二.我们考虑线程池的问题,下面我们定义了线程池里面最多10个任务,也就是说最多同一时间只能有 ...
- HTML5开发之meta标签的viewport使用说明
随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择.然而每一款手机有不同的分辨率,不同屏幕大 ...
- scrapy几种反反爬策略
一.浏览器代理 1.直接处理: 1.1在setting中配置浏览器的各类代理: user_agent_list=[ "Mozilla/5.0 (Windows NT 10.0; Win64; ...
- jenkins结合svn检测版本变化执行shell脚本实现项目部署
工具: centos 7 jenkins-2.138.2-1.1.noarch.rpm,2018年10月10号最新版(简单rpm包安装见https://www.cnblogs.com/dannylin ...
- 五、compose 部署 GitLab 应用
1.我们部署的是sameersbn/docker-gitlab这个镜像. docker pull sameersbn/gitlab 2.配置文件,我们不需要去run它,只需要先下载一个compose的 ...
- Java 获取客户端ip返回127.0.0.1问题
Java开发中使用 request.getRemoteAddr 获取客户端 ip ,返回结果始终为127.0.0.1.原因是服务器使用了nginx反向代理. 解决办法:在nginx配置文件nginx. ...
- Express学习(1) ------Express 入门
Express 是node 第三方框架,大家都知道,框架的意义就在于能大大简化程序地开发.那么我们就看一下Express是怎么简化node程序开发的. 1,用Express写一个hello world ...