美文网首页
那些“位置”属性,你又了解多少(offsetHeight、cli

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

作者: Ps_野爹 | 来源:发表于2018-08-15 21:19 被阅读0次

    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

    相关文章

      网友评论

          本文标题:那些“位置”属性,你又了解多少(offsetHeight、cli

          本文链接:https://www.haomeiwen.com/subject/nrfgbftx.html