position定位

学习position,了解一下标准流,定位和参数,实现网页布局和层级

2.1 文档流

HTML中的三种布局方式

  1. 标准流
  2. 浮动
  3. 定位

标准流是网页中默认的布局方式,即顺序布局。

HTML中的两大元素:

块级元素有:divH1~H6有序无序列表(ol,ul,li)table表格p段落

内联元素有:a,span,img,input

块级元素总是独占一行的,而内联元素是和相邻的元素同在一行,如果一行内宽度不够用,才被挤到下一行

除了标准流中的布局之外,还有其他的定位方式(position定位和float)

2.2 position-relative

position属性的意义

positon属性决定了元素将如何定位

通过top、right、bottom、left实现位置的改变

position中的可选参数:

static、(是positon属性中的默认值,按照标准流的方式进行正常排列)

relative、(相对定位,使用了relative的元素处于正常的文档流中,但是可以通过top、right、bottom、left改变元素的位置)

absolute、

fixed、

inherit

如下所示的代码,使用了relative定位

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .div1 {
            100px;
            height:100px;
            background: red;
            position: relative;
            left: 0;
            top:100px;
        }
        .div2 {
             100px;
            height: 100px;
            background: blue;
            position: relative;
            left: 0;
            top:-50px
        }
    </style>
</head>
<body>
    <div class="div1"></div>
    <div class="div2"></div>
</body>
</html>

后写的元素会覆盖先写的元素,后写的带有定位属性的元素大于先写的定位元素的层级。top,left以网页的左上角为原点,后侧,和下侧为正方向;bottom,right以网页的左上角为原点,左侧,和上侧为正方向

2.3 postion-absolute

使用了绝对定位的元素,配合使用了top、right、bottom、left参数,元素将脱离正常的文档流,在整个网页中都是可以进行移动定位的。

没有给test元素设置position为absolute属性的时候,是可以看到body的高度的,设置了之后,就看不到body元素的高度了。

设置absolute的定位属性,表示已经脱离了文档流。

当没有设置 test的元素的定位特性(left,top,bottom,right)时候, test元素和bro元素按照标准流的方式排列。

修改test元素的left和top属性,发现test元素已经可以覆盖到bro元素,并且根据左上角进行定位了。

left和top属性表示以左上角为原点,开始定位

right和top属性表示以右上角为原点,开始定位

left和bottom属性表示以左下角为原点,开始定位

right和bottom属性表示以右下角为原点,开始定位

如下代码所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>postion</title>
    <style>
        * {
            margin:0;
            padding:0;
        }
        .test {
            100px;
            height: 100px;
            background: red;
            position: absolute;
            left: 100px;
            top:50px;
        }
        .bro {
             100px;
            height: 100px;
            background: blue;
        }

        body {
            height:3000px;
        };

    </style>
</head>
<body>
    <div class="bro"></div>
    <div class="test"></div>
</body>
</html>

如下代码所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>postion</title>
    <style>
        * {
            margin:0;
            padding:0;
        }
        .test {
            100px;
            height: 100px;
            background: red;
            position: absolute;
            left: 0px;
            top:0px;
        }
        .bro {
             300px;
            height: 300px;
            background: blue;
            margin-left: 200px;
            margin-top: 200px;
        }

        body {
            height:3000px;
        };

    </style>
</head>
<body>
    <div class="bro">
        <div class="test"></div>
    </div>
    
</body>
</html>

当带有position属性的定位元素(test元素),的父元素(bro)或者主元素没有定位属性时候(没有positon属性),默认以窗口的左上角为原点进行定位。

2.3 postion-fixed

固定定位,即使用了fixed参数的元素,配合top、right、bottom和left属性,元素会脱离正常的文档流,不受制于标准流的约束。在整个窗口进行一段定位,并拥有层级的概念。

带有固定定位的元素,将在整个窗口进行位置移动。常用的使用场景有:1、对联广告;2、登陆弹窗

固定位置的元素,将一直保存在固定的位置(左上角),无论窗口怎么移动,如下代码

任何元素对于固定定位,是没有约束力的,这和绝对定位是有区别的。

带有fix属性的元素,不管父元素有没有定位的属性,都不受制于父元素。如下代码所示:test元素是不受制于父元素的。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>postion</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            height: 3000px;
        }

        .per {
             300px;
            height: 300px;
            background: blue;
            position: absolute;
            left: 300px;
            top:300px;
        }

        .test {
             100px;
            height: 100px;
            background: red;
            position: fixed;
            left: 100px;
            top:100px;
        }      
        
    </style>
</head>

<body>
    <div class="per">
      <div class="test"></div>
    </div>
</body>

</html>

2.4 postion-inherit

继承属性,子元素继承父元素的属性,

如下图代码,父元素(per)设置position为relative。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>postion</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            height: 3000px;
        }

        .per {
             300px;
            height: 300px;
            background:blue;
            position: relative;
        }

        .son {
             100px;
            height: 100px;
            background: red;
            position: inherit;
            left: 100px;
            top:100px;
        }      
        
    </style>
</head>

<body>
    <div class="per">
    <div class="son"></div>
    </div>
</body>

</html>

父元素(per)设置position为fixed之后,子元素也会继承,如下代码。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>postion</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            height: 3000px;
        }

        .per {
             300px;
            height: 300px;
            background:blue;
            position: fixed;
            left: 200px;
            top: 200px;
        }

        .son {
             100px;
            height: 100px;
            background: red;
            position: inherit;
            left: 100px;
            top:100px;
        }      
        
    </style>
</head>

<body>
    <div class="per">
    <div class="son"></div>
    </div>
</body>

</html>
原文地址:https://www.cnblogs.com/zdjBlog/p/13821022.html