>  기사  >  웹 프론트엔드  >  CSSposition:absolute분석에 대한 종합적인 이해

CSSposition:absolute분석에 대한 종합적인 이해

高洛峰
高洛峰원래의
2017-03-07 13:51:071249검색

1. 절대 위치 지정의 특징

절대 위치 지정은 부유성, 즉 감싸기와 파괴성과 동일한 특성을 가지고 있습니다.

파괴적인 측면에서 플로팅은 요소의 높이만 파괴하고 요소의 너비는 유지하며 절대 위치에 있는 요소의 높이와 너비는 사라집니다.

다음 코드를 보세요:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>绝对定位的特征</title>
        <style>
            .box1,.box2,.box3 {   
                background-color: orange;   
                margin-bottom: 30px;   
            }   

            .absolute {   
                position: absolute;   
            }   

            .wraper {   
                display:inline-block;   
                margin-left: 300px;   
            }   

            .float {   
                float: left;   
            }   

            .box3 {   
                position: absolute;   
            }   
        </style>
    </head>
    <body>
        <p class="box1">
            <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
            <img src="http://pic1.win4000.com/wallpaper/c/537b28b60619b.jpg" alt="A picture" style="width:240px;height:180px" />
            <p>这是普通流中的两幅图像。</p>
        </p>
        <p class="box2">
            <img class="absolute" src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
            <img src="http://pic1.win4000.com/wallpaper/c/537b28b60619b.jpg" alt="A picture" style="width:240px;height:180px" />

            <p class="wraper">
                <img class="float" src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
                <img src="http://pic1.win4000.com/wallpaper/c/537b28b60619b.jpg" alt="A picture" style="width:240px;height:180px" />
            </p>
            <p>左图,将第一幅图像绝对定位,其完全脱离文档流,并且覆盖在第二幅图像之上;由此看出,绝对定位的破坏性不仅让元素没有了高度,甚至没有了宽度。</p>
            <p>右图,将第一幅图像左浮动,其虽然脱离了文档流,但是并没有覆盖在其他元素之上;浮动的破坏性仅仅破坏了元素的高度,而保留了元素的宽度。</p>
        </p>
        <p class="box3">
            <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
            <img src="http://pic1.win4000.com/wallpaper/c/537b28b60619b.jpg" alt="A picture" style="width:240px;height:180px" />
            <p>将容器绝对定位,体现其包裹性。</p>
        </p>
    </body>
</html>

2. 절대 위치 지정에 대한 일반 규칙:

요소가 절대적으로 배치되면 문서 흐름에서 완전히 제거되고 포함 블록을 기준으로 배치됩니다.

절대 위치에 포함된 블록은 가장 가까운 위치에 있는 상위 요소입니다.

조상 요소가 블록 수준 요소인 경우 포함 블록은 조상 요소의 패딩 경계, 즉 테두리입니다.

조상 요소가 인라인 요소인 경우 포함 블록은 조상 요소의 콘텐츠 경계, 즉 콘텐츠 영역입니다.

위치가 지정된 상위 요소가 없으면 요소의 포함 블록이 초기 포함 블록으로 정의됩니다.

오프셋 속성: 위쪽, 오른쪽, 아래쪽, 왼쪽.

절대 위치에 있는 요소에 오프셋 속성이 설정되지 않은 경우 문서 흐름에서 벗어나더라도 해당 위치는 그대로 유지됩니다.

오프셋 속성은 포함 블록 외부에 요소를 배치하기 위해 음수일 수 있습니다.

코드 위치:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>绝对定位的一般规则</title>
        <style>
            body {   
                background-color: #ccc;   
            }   
            .container {   
                width:500px;   
                background-color: orange;   
                margin:20px auto 50px auto;   
                padding:20px;   
                border:2px solid red;   
            }   

            .box2 img,.box3 img,   
            .box4 img,.box5 img {   
                position: absolute;   
            }   

            .box3 img,.box4 img {   
                left:0;   
                bottom:0;   
            }   

            .box5 img {   
                left: -30px;   
                bottom: -50px;   
            }   

            .block {   
                position :relative;   
                height: 200px;   
            }   
        </style>
    </head>
    <body>
        <p class="container">
            <p class="box1">
                <p>元素绝对定位时,会完全脱离文档流,并相对于其包含块定位。绝对定位的包含块,是其最近的已定位的祖先元素。</p>
                <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
                <ul>
                    <li>如果这个祖先元素是块级元素,包含块则为该祖先元素的内边距边界,即边框。</li>
                    <li>如果这个祖先元素是行内元素,包含块则为该祖先元素的内容边界,即内容区。</li>
                    <li>如果没有已定位的祖先元素,元素的包含块定义为初始包含块(一个视窗大小的矩形)。</li>
                </ul>
            </p><!--关闭box1-->
        </p><!--关闭container-->
        <p class="container">
            <p class="box2">
            <p>不管有没有已经定位的祖先元素,只要没有偏移量,绝对定位之后,原地不动,脱离文档流。</p>
            <p>下面这个已经绝对定位的图像原地没动,但是已经脱离了文档流。</p>
            <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
            </p><!--关闭box2-->
        </p><!--关闭container-->
        <p class="container">
            <p class="box3">
                <p>没有已经定位的祖先元素,有偏移量,绝对定位之后,以初始包含块(一个视窗大小的矩形)为基准进行偏移。</p>
                <p>当偏移量为left:0; buttom:0时,图像水平偏移到了初始包含块左下角(打开网页最开始的那一个视窗的左下角)。</p>
                <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
            </p><!--关闭box3-->
        </p><!--关闭container-->
        <p class="container block">
            <p class="box4">
                <p>有已经定位的祖先元素,有偏移量,绝对定位之后,以已经定位的祖先元素为基准进行偏移。</p>
                <p>此处已经定位的祖先元素为这个图像的容器p元素,偏移量为left:0; bottom:0时,图像到了这个容器的左下角(以边框为界)。</p>
                <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
            </p><!--关闭box4-->
        </p><!--关闭container-->
        <p class="container block">
            <p class="box5">
                <p>有已经定位的祖先元素,有偏移量,绝对定位之后,以已经定位的祖先元素为基准进行偏移。</p>
                <p>此处已经定位的祖先元素为这个图像的容器p元素,偏移量为left:-30px; bottom:-50px时,图像到了这个容器之外(以边框为界)。</p>
                <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
            </p><!--关闭box5-->
        </p><!--关闭container-->
    </body>
</html>

3. 여백을 사용하여 절대 위치에 있는 요소의 위치를 ​​조정합니다.

절대적으로 배치된 요소는 상단, 오른쪽, 하단 및 왼쪽을 사용하여 오프셋되는 것 외에도 여백 값을 통해 정확하게 배치될 수 있으며 적응성이 더 높습니다.

예:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>用margin调整绝对定位元素的位置</title>
        <style>
            .box1,.box2,.box3 {   
                display: inline-block;   
                margin-right: 150px;   
                border:1px solid blue;   
            }   

            span {   
                background-color: red;   
            }   

            .box2 span,.box3 span {   
                position: absolute;   
            }   

            .meng {   
                margin-left: -3em;   
            }   

            .box4 {   
                border:1px solid red;   
                width: 500px;   
                margin: 50px auto 0 auto;   
                padding:20px;   
            }   

            li {   
                margin-bottom: 20px;   
            }   
        </style>
    </head>
    <body>
        <p class="box1">
            <span>卡哇伊</span>
            <img src="http://imgsrc.baidu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpg" style="width:200px;height:300px" />
            <span>萌萌哒</span>
        </p>
        <p class="box2">
            <span>卡哇伊</span>
            <img src="http://imgsrc.baidu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpg" style="width:200px;height:300px" />
            <span>萌萌哒</span>
            </p>
        <p class="box3">
            <span>卡哇伊</span>
            <img src="http://imgsrc.baidu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpg" style="width:200px;height:300px" />
            <span class="meng">萌萌哒</span>
        </p>
        <p class="box4">
            <ol>
                <li>第一幅图,最开始的样子。</li>
                <li>第二幅图,两个标签绝对定位,但是不指定任何偏移量。</li>
                <li>第三幅图,用margin负值调整“萌萌哒”的位置,完成。</li>
            </ol>
        </p>
    </body>
</html>

오프셋 속성을 포기하고 대신 여백을 사용하여 절대 위치의 요소를 조정합니다. 원칙은 다음과 같습니다.

절대적으로 배치된 요소, 오프셋이 설정되지 않은 경우 문서 흐름에서 완전히 벗어나더라도 여전히 원래 위치에 있습니다.

정확한 위치 지정을 위해 오프셋 속성을 사용하세요. 특정 위치는 절대 위치 지정 요소의 포함 블록에 따라 달라집니다. 포함 블록에 따라 위치 지정 결과가 완전히 달라집니다.

정확한 위치 지정을 위해 여백을 사용하면 다른 것에 의존하지 않으며 더 쉽게 제어할 수 있습니다.

4. 절대 위치 지정 및 전체 레이아웃

절대 위치 지정을 사용하여 전체 페이지 레이아웃을 지정하는 방법은 무엇인가요?

단순하고 투박해서 배우지 않으면 아깝습니다! ! !

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>绝对定位与整体页面布局</title>
        <style>
            * {   
                margin: 0;   
            }/*重置所有margin为0,这一步极其重要,否则布局必乱。*/   

            html,body,.page {   
                width: 100%;   
                height: 100%;   
                overflow: hidden;   
            }   

            .page {   
                position: absolute;   
                top: 0;   
                right: 0;   
                bottom: 0;   
                left: 0;   
                background-color: #ccc;   
            }   

            .header {   
                position: absolute;   
                height: 50px;   
                left: 0;   
                right: 0;   
                background-color: purple;   
                padding: 0 5px;   
                z-index: 1;   
            }   

            .header>h1 {   
                line-height: 50px;   
                text-align: center;   
            }   

            .aside {   
                position: absolute;   
                top: 50px;   
                bottom: 50px;   
                left: 0;   
                width: 100px;   
                background-color: orange;   
            }   

            .footer {   
                position: absolute;   
                right: 0;   
                bottom: 0;   
                left: 0;   
                height: 50px;   
                background-color: purple;   
            }   

            .footer>h1 {   
                text-align: center;   
                line-height: 50px;   
            }   

            .content {   
                position: absolute;   
                top: 50px;   
                right: 0;   
                bottom: 50px;   
                left: 100px;   
                background-color: cyan;   
                overflow: auto;   
            }   

            .content h1 {   
                margin-top: 100px;   
                margin-left: 50px;   
            }   

            .content li {   
                margin-left: 100px;   
                margin-top: 80px;   
                font-size: 24px;   
                line-height: 1.5;   
            }   

            ol {   
                margin-bottom: 80px;   
            }   
        </style>
    </head>
    <body>
        <p class="page">
            <p class="header">
                <h1>Header</h1>
            </p>
            <p class="aside">
                <h1>Aside</h1>
            </p>
            <p class="content">
                <h1>实现原理</h1>
                <ol>
                    <li>创建一个p.page,绝对定位,铺满全屏。</li>
                    <li>创建一个p.header,绝对定位,设定高度。</li>
                    <li>创建一个p.aside,绝对定位,设定宽度。</li>
                    <li>创建一个p.footer,绝对定位,设定高度。</li>
                    <li>创建一个p.content,绝对定位,根据周围p的宽高设定它的宽高;<br />
                    以p.content元素取代原body元素,所有的页面内容都放在这里面。</li>
                </ol>
            </p>
            <p class="footer">
                <h1>Footer</h1>
            </p>
        </p>
    </body>
</html>

CSS 위치에 대한 위의 포괄적인 이해:absolute는 편집자가 공유한 모든 내용이 참고가 되기를 바라며, 또한 모두가 PHP를 지원하기를 바랍니다. 중국사이트.

더 많은 CSSposition:absolute 종합적인 이해와 분석 관련 글을 보시려면 PHP 중국어 홈페이지를 주목해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.