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...

时间: 2024-11-06 07:36:26

javascript之复习(css属性值的计算)的相关文章

关于dom元素上css属性值的取值过程

最近在研究w3c的css标准规范,css2.2版本,虽然早已进入css3时代,但是css3还是继承了很多css2的基础,所以了解css2的很多标准原理,对于理解css核心内容,对写好css,写出高性能的css是很有必要的. 这篇文章写在读了css标准第六章css属性值取值过程相关内容,英文标准地址:https://www.w3.org/TR/CSS22/cascade.html 浏览器渲染页面时,解析dom树之后,一定(标准中用了must)会对每个dom元素都加上css的属性和对应的值: “On

getComputedStyle currentStyle 获取当前元素所有最终使用的CSS属性值

object.getComputedStyle  获取当前元素所有最终使用的CSS属性值.返回的是一个CSS样式声明对象,只读,不能设置. 此方法不兼容IE8及以下,需用currentStyle方法. function getStyle(obj.attr){ return getComputedStyle(obj)?getComputedStyle(obj)[attr]:obj.currentStyle[attr]; //判断是否有getComputedStyle方法 } obj为需要获取属性值

JavaScript中的CSS属性对照表

JavaScript中的CSS属性对照表(新手必备) JavaScript中的CSS属性对照表是js初学者必备的基础知识 盒子标签和属性对照 CSS语法 (不区分大小写) JavaScript语法 (区分大小写) border border border-bottom borderBottom border-bottom-color borderBottomColor border-bottom-style borderBottomStyle border-bottom-width border

JS获取CSS属性值

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <ti

CSS属性值一览

牢记内联式>嵌入式(嵌入式中设置各种文字字体.大小.位置.颜色.外距.内距最好用选择器)>外部式(外联式)的使用 属性和属性值 font-family(字体) Microsoft Yahei||微软雅黑 宋体 Arial Times New Roman font-size-adjust:修改字体怎么可以使文字大小不变,c=(a/b)s,s表示实际字号应该设置的大小,c表示原先字号大小,a表示实际使用的字体的aspect值,b表示原先使用的字体的aspect值 font-size(字号) npx

使用JavaScript获取样式的属性值

1 . 在js中可以使用style属性来获取样式的属性值(只能获取内联样式的属性值) 语法格式为: HTML元素.style.样式属性; 2 .   在IE浏览器中,使用currentStyle来获取属性值 语法格式为: HTML元素.currentStyle.样式属性: 3 . DOM提供了一个getComputedStyle()方法来获取属性值, Firefox,Opera,Safari,Chrome等浏览器支持(IE浏览器不支持) 语法格式: document.defaultView.ge

JS使用getComputedStyle()方法获取CSS属性值

在对网页进行调试的过程中,经常会用到js来获取元素的CSS样式,方法有很多很多,现在仅把我经常用的方法总结如下: 1. obj.style:这个方法只能JS只能获取写在html标签中的写在style属性中的值(style="-"),而无法获取定义在<style type="text/css">里面的属性. 2. IE中使用的是obj.currentStyle方法,而FF是用的是getComputedStyle 方法 "DOM2级样式"

JS 获取CSS属性值

obj: 元素对象 attribute: 属性 返回值:该对象这个属性的值 function getDefaultStyle(obj,attribute){ // 返回最终样式函数,兼容IE和DOM,设置参数:元素对象.样式特性 return obj.currentStyle?obj.currentStyle[attribute]:document.defaultView.getComputedStyle(obj,false)[attribute]; } 完整链接:http://www.css8

asp.net控件后台增加JavaScript函数,css属性的方法

GridView1.Attributes.Add("style", "white-space:nowrap;word-wrap:normal "); if (!IsPostBack) { TextBox_rq1.Attributes.Add("onfocus", "WdatePicker()"); TextBox_rq2.Attributes.Add("onfocus", "WdatePicker