• CSS 子绝(position:absolute;)父相(position:relative)


    首先你必须知道的是:toprightbottomleft这四个属性要生效的话,必须得设置相对定位/绝对定位,即position:relative;或者position:absolute;,也就是说toprightbottomleft是为相对定位/绝对定位而生的。

    子绝父相就是:子元素为绝对定位(position:absolute;),父元素为相对定位position:relative;。例如A为子元素,那么父元素B必须包含A,也就是说AB一定是嵌套关系(父子关系),不可以是兄弟关系。

    A为浏览器(可以理解为窗口、可视区域、代码中的body标签) 浏览器中有B, B嵌套了C,C嵌套了D,D设置了绝对定位:
    情况一:如果B设置了相对定位,C也设置了相对定位,那么在D中设置的位置(top
    ightottomleft)是相对于C来说的,此时和B一点关系都没有
    情况二:如果B设置了相对定位,C没有设置相对定位,那么在D中设置的位置(top
    ightottomleft)是相对B来说的,此时和C一点关系都没有
    情况三:如果B没有设置相对定位,C设置了相对定位,那么在D中设置的位置(top
    ightottomleft)是相对C来说的,此时和B一点关系都没有
    情况四:如果B没有设置相对定位,C也没有相对定位,那么在D中设置的位置(top
    ightottomleft)是相对于浏览器A来说的。

    总结:D设置的位置(top ightottomleft) 只和 距它最近的设置了相对定位的父类有关,如果父类没有设置相对定位,则和浏览器(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>

  • 相关阅读:
    静态与非静态(转改)
    关于odp.net的FetchSize属性
    SQL_SERVER 导oracle(转)
    win7电脑上wifi
    Oracle对象统计信息
    SQL_SERVER 连接oracle(转)
    linq in 语法
    关于引擎的设计
    温习设计模式
    技巧类
  • 原文地址:https://www.cnblogs.com/vickylinj/p/13374422.html
Copyright © 2020-2023  润新知