CSS 子絕(position:absolute;)父相(position:relative)


首先你必須知道的是:toprightbottomleft這四個屬性要生效的話,必須得設置相對定位/絕對定位,即position:relative;或者position:absolute;,也就是說toprightbottomleft是為相對定位/絕對定位而生的。

子絕父相就是:子元素為絕對定位(position:absolute;),父元素為相對定位position:relativerelative、absolute、fixed都可以:絕對定位的盒子是相對於離它最近的一個已定位的盒子進行定位的;例如A為子元素,那么父元素B必須包含A,也就是說AB一定是嵌套關系(父子關系),不可以是兄弟關系。 

A為瀏覽器(可以理解為窗口、可視區域、代碼中的body標簽) 瀏覽器中有B, B嵌套了C,C嵌套了D,D設置了絕對定位:
情況一:如果B設置了相對定位,C也設置了相對定位,那么在D中設置的位置(top\right\bottom\left)是相對於C來說的,此時和B一點關系都沒有
情況二:如果B設置了相對定位,C沒有設置相對定位,那么在D中設置的位置(top\right\bottom\left)是相對B來說的,此時和C一點關系都沒有
情況三:如果B沒有設置相對定位,C設置了相對定位,那么在D中設置的位置(top\right\bottom\left)是相對C來說的,此時和B一點關系都沒有
情況四:如果B沒有設置相對定位,C也沒有相對定位,那么在D中設置的位置(top\right\bottom\left)是相對於瀏覽器A來說的。

總結:D設置的位置(top\right\bottom\left) 只和 距它最近的設置了相對定位的父類有關,如果父類沒有設置相對定位,則和瀏覽器(body標簽)產生關系。即:子絕父相符合就近原則

示例 

情況一: 

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>子絕父相</title>
    <meta name="description" content="子絕父相測試" />
    <meta name="Keywords" content="子絕父相測試" />

</head>
<style type="text/css">
    /*清除瀏覽器默認間距 */
    * {
        margin: 0;
        padding: 0;
    }

    .b{
        position: relative;
        background-color: red;
        width: 400px;
        height: 400px;
        margin: 100px 0px 0px 100px;
        /*解決外邊距塌陷的問題: 父元素嵌套子元素,子元素設置了上或下外邊距。
例如margin-top:10px或者margin-bottom:10px或者margin:10px 0 20px 0,
就會造成父元素也跟着子元素向下或者向上移動的問題,實際上父元素並沒有寫任何上或下外邊距邊距的代碼。*/
        overflow: hidden;
    }
    .c{
        position: relative;
        background-color: blue;
        width: 200px;
        height: 200px;
        margin: 50px 0 0 50px;
    }
    .d{
        position: absolute;
        background-color: orange;
        width: 40px;
        height: 40px;
        top:100px;
        left: 100px;
    }
</style>
<body>
    <div class="b">
        <div class="c">
            <div class="d">
                我是D
            </div>
        </div>
    </div>
    
</body>
</html>

 

情況二: 

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>子絕父相</title>
    <meta name="description" content="子絕父相測試" />
    <meta name="Keywords" content="子絕父相測試" />

</head>
<style type="text/css">
    /*清除瀏覽器默認間距 */
    * {
        margin: 0;
        padding: 0;
    }

    .b{
        position: relative;
        background-color: red;
        width: 400px;
        height: 400px;
        margin: 100px 0px 0px 100px;
        /*解決外邊距塌陷的問題: 父元素嵌套子元素,子元素設置了上或下外邊距。
例如margin-top:10px或者margin-bottom:10px或者margin:10px 0 20px 0,
就會造成父元素也跟着子元素向下或者向上移動的問題,實際上父元素並沒有寫任何上或下外邊距邊距的代碼。*/
        overflow: hidden;
    }
    .c{
        background-color: blue;
        width: 200px;
        height: 200px;
        margin: 50px 0 0 50px;
    }
    .d{
        position: absolute;
        background-color: orange;
        width: 40px;
        height: 40px;
        top:100px;
        left: 100px;
    }
</style>
<body>
    <div class="b">
        <div class="c">
            <div class="d">
                我是D
            </div>
        </div>
    </div>
    
</body>
</html>

   

情況三:遵循就近原則,所以和情況1效果一樣。 

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>子絕父相</title>
    <meta name="description" content="子絕父相測試" />
    <meta name="Keywords" content="子絕父相測試" />

</head>
<style type="text/css">
    /*清除瀏覽器默認間距 */
    * {
        margin: 0;
        padding: 0;
    }

    .b{
        background-color: red;
        width: 400px;
        height: 400px;
        margin: 100px 0px 0px 100px;
        /*解決外邊距塌陷的問題: 父元素嵌套子元素,子元素設置了上或下外邊距。
例如margin-top:10px或者margin-bottom:10px或者margin:10px 0 20px 0,
就會造成父元素也跟着子元素向下或者向上移動的問題,實際上父元素並沒有寫任何上或下外邊距邊距的代碼。*/
        overflow: hidden;
    }
    .c{
        position: relative;
        background-color: blue;
        width: 200px;
        height: 200px;
        margin: 50px 0 0 50px;
    }
    .d{
        position: absolute;
        background-color: orange;
        width: 40px;
        height: 40px;
        top:100px;
        left: 100px;
    }
</style>
<body>
    <div class="b">
        <div class="c">
            <div class="d">
                我是D
            </div>
        </div>
    </div>
    
</body>
</html>

 

情況四: 

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>子絕父相</title>
    <meta name="description" content="子絕父相測試" />
    <meta name="Keywords" content="子絕父相測試" />

</head>
<style type="text/css">
    /*清除瀏覽器默認間距 */
    * {
        margin: 0;
        padding: 0;
    }

    .b{
        background-color: red;
        width: 400px;
        height: 400px;
        margin: 100px 0px 0px 100px;
        /*解決外邊距塌陷的問題: 父元素嵌套子元素,子元素設置了上或下外邊距。
例如margin-top:10px或者margin-bottom:10px或者margin:10px 0 20px 0,
就會造成父元素也跟着子元素向下或者向上移動的問題,實際上父元素並沒有寫任何上或下外邊距邊距的代碼。*/
        overflow: hidden;
    }
    .c{
        background-color: blue;
        width: 200px;
        height: 200px;
        margin: 50px 0 0 50px;
    }
    .d{
        position: absolute;
        background-color: orange;
        width: 40px;
        height: 40px;
        top:100px;
        left: 100px;
    }
</style>
<body>
    <div class="b">
        <div class="c">
            <div class="d">
                我是D
            </div>
        </div>
    </div>
    
</body>
</html>

參照:https://www.cnblogs.com/goloving/p/9275776.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM