那些“位置”属性,你又了解多少(offsetHeight、cli

2018-08-15  本文已影响0人  Ps_野爹

offsetParent:改属性返回一个对象的引用,这个对象是距离调用offsetParent的元素最近的(在包含层次中最靠近的),已进行过CSS定位的容器元素。如果这个容器元素未进行CSS定位,则offsetParent属性的取值为body元素的引用。当容器元素的style.display 被设置为“none”是(译注:IE和Opear除外),offsetParent属性返回null。

 <html>
    <head></head>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .header {
            height: 400px;
        }
        .main {
            width: 500px;
            height: 600px;
            background: #FF0;
            margin: 0 auto;
            border: 10px solid #0f0;
            position: absolute;
        }
    </style>
    <body>
        <div class="header">
        </div>
        <div class="main">
            <div class="content"></div>
        </div>
        <script>
            let content = document.getElementsByClassName('content')[0]
            // 注:此时offsetParent指向main
            // 若删除main中position属性,offsetParent指向body
            console.log(content.offsetParent)         
        </script>
    </body>
</html>

top:该属性一般对用过CSS定位的元素有效(position为“static”时为auto,不产生效果),定义了一个top属性有效的元素(即定位元素)的上外边距边界与其包含块上边界之间的偏移
clientTop:元素上边框的厚度,党没有指定边框厚度时,一般为0;

.content {
     border: 10px solid #999;
     width: 100px;
     height: 100px;
 }
console.log(content.clientTop)  // output: 10 

scrollTop: 位于对象最顶端和窗口中可见内容的最顶端之间的距离,简单说就是滚动后被隐藏的高度。

// 设置posititon(static除外)后,则相对main定位,此时输出0
// 不设置position属性,此时输出110(包含外层main的边框)
console.log(content.offsetTop)

clientHeight:该属性表示内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度。

.content {
     border: 10px solid #999;
     width: 100px;
     height: 100px;
     padding: 10px;
}
// clientHeight = padding + height
// output: 120
console.log(content.clientHeight)

scrollHeight:IE、Opera 认为 scrollHeight 是网页内容实际高度,可以小于 clientHeight。FF 认为 scrollHeight 是网页内容高度,不过最小值是 clientHeight。

offsetHeight:获取对象相对于由offsetParent属性指定的父坐标(css定位的元素或body元素)的高度。IE、Opera 认为 offsetHeight = clientHeight + 滚动条 + 边框。FF 认为 offsetHeight 是网页内容实际高度,可以小于 clientHeight。offsetHeight在新版本的FF和IE中是一样的,表示网页的高度,与滚动条无关,chrome中不包括滚动条。

// offsetHeight = padding + border + height
// output: 140
console.log(content.offsetHeight)

clientX、clientY:相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条。IE事件和标准事件都定义了这2个属性。

pageX、pageY:类似于event.clientX、event.clientY,但它们使用的是文档坐标而非窗口坐标。这2个属性不是标准属性,但得到了广泛支持。IE事件中没有这2个属性。

offsetX、offsetY:相对于事件源元素(target或srcElement)的X,Y坐标,只有IE事件有这2个属性,标准事件没有对应的属性。

screenX、screenY:相对于用户显示器屏幕左上角的X,Y坐标。标准事件和IE事件都定义了这2个属性

getBoundingClientRect:用来获取元素的位置
语法:rectObject = object.getBoundingClientRect();

返回值:TextRectangle对象,每个矩形具有四个整数性质( 上, 右 , 下,和左 )表示的坐标的矩形,以像素为单位。

rectObject.top:元素上边到视窗上边的距离

rectObject.right:元素右边到视窗左边的距离

rectObject.bottom:元素下边到视窗上边的距离

rectObject.left:元素左边到视窗左边的距离

注意:在IE中,默认坐标从(2,2)开始计算,导致最终距离比其他浏览器多出两个像素。

最后附上所有代码:仅供参考

<html>
    <head></head>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .header {
            height: 400px;
        }
        .main {
            width: 500px;
            height: 600px;
            background: #FF0;
            margin: 0 auto;
            border: 10px solid #0f0;
            /* position: absolute; */
        }
        .content {
            border: 10px solid #999;
            width: 100px;
            height: 100px;
            padding: 10px;
        }
    </style>
    <body>
        <div class="header">
        </div>
        <div class="main">
            <div class="content"></div>
        </div>
        <script>
            let content = document.getElementsByClassName('content')[0]
            let main = document.getElementsByClassName('main')[0]
            // 注:此时offsetParent指向main
            // 若删除main中position属性,offsetParent指向body
            console.log(content.offsetParent)
            console.log(content.clientTop)  // output: 10
            // 设置posititon(static除外)后,则相对main定位,此时输出0
            // 不设置position属性,此时输出110(包含外层main的边框)
            console.log(content.offsetTop)
            console.log(content.clientHeight)

            // clientHeight = padding + height
            // output: 120
            console.log(content.clientHeight)

            // offsetHeight = padding + border + height
            // output: 140
            console.log(content.offsetHeight)
        </script>
    </body>
</html>

本文参考: https://www.cnblogs.com/youziclub/p/4811069.html

上一篇下一篇

猜你喜欢

热点阅读