定位position(5种方式)

原文链接:http://c.biancheng.net/css3/position.html
CSS 中的 position 属性用来设置元素在页面中的位置,通过该属性您可以把任何属性放置在任何您认为合适的位置。position 属性有 5 个可选值,分别对应 5 种不同的定位方式,如下所示:

取值 说明
static 默认值,静态定位,表示没有定位,元素会按照正常的位置显示,此时 top、bottom、left 和 right 4 个定位属性也不会被应用。
relative 相对定位,即相对于元素的正常位置进行定位,您可以通过 top、right、bottom、left 这 4 个属性来设置元素相对于正常位置的偏移量,在此过程中不会对其它元素造成影响。
absolute 绝对定位,相对于第一个非 static 定位的父级元素进行定位,可以通过 top、right、bottom、left 这 4 个属性来设置元素相对于父级元素位置的偏移量。如果没有满足条件的父级元素,则会相对于浏览器窗口来进行定位。使用绝对定位的元素不会对其它元素造成影响。
fixed 固定定位,相对于浏览器的创建进行定位,可以使用 top、right、bottom、left 这 4 个属性来定义元素相对于浏览器窗口的位置。使用固定定位的元素无论如何滚动浏览器窗口元素的位置都是固定不变的。
sticky 粘性定位,它是 relative 和 fixed 的结合体,能够实线类似吸附的效果,当滚动页面时它的效果与 relative 相同,当要滚动到屏幕之外时则会自动变成 fixed 的效果。

1. 静态定位:static

static 是 position 属性的默认值,表示没有定位,使用静态定位的元素会按照元素正常的位置显示,并且不会受到 top、bottom、left、right 和 z-index 属性的影响。示例代码如下:

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>float</title>
    <style>
        .son {
            position: static;
            /* static指定元素使用正常的定位行为,即遵循正常文档流*/
            width: 100px;
            height: 100px;
            border: solid pink;
        }
    </style>
</head>

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

</html>

运行结果如下图所示:

静态定位

2. 相对定位:relative

相对定位就是元素相对于自己默认的位置来进行位置上的调整,您可以通过 top、bottom、left 和 right 四个属性的组合来设置元素相对于默认位置在不同方向上的偏移量。

top、bottom、left、right 属性演示

【示例】下面通过代码来演示相对定位的使用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>position:relative</title>

    <style>
         .above {
            /* display: flex;
            flex-wrap: wrap-reverse; */
        }

        .son1 {
            position: static;/* static指定元素使用正常的定位行为,即遵循正常文档流*/
            width: 100px;
            height: 100px;
            border: solid pink;
        }
        .son2 {
            position: relative;/* relative就是元素相对于自己默认(遵循正常文档流的情况下)的位置
            进行位置上的的调整,可以通过top、bottom、left、right四个属性的组合设置元素
            相对于默认位置在不同方向上的偏移量*/
            top:50px;
            left:50px;
            width: 100px;
            height: 100px;
            border: solid pink;
        }
    </style>
</head>
<body>
    <div class="above">
        <div class="son1"></div>
        <div class="son2"></div>
    </div>
</body>
</html>

运行结果如下图所示:

相对定位

注意:相对定位的元素可以移动并与其他元素重叠,但会保留元素默认位置处的空间。

3. 绝对定位:absolute

绝对定位就是元素相对于第一个非静态定位(static)的父级元素进行定位,如果找不到符合条件的父级元素则会相对与浏览器窗口来进行定位。您同样可以使用 top、bottom、left 和 right 四个属性来设置元素相对于父元素或浏览器窗口不同方向上的偏移量。


top、bottom、left、right 属性在绝对定位中的使用

使用绝对定位的元素会脱离原来的位置,不再占用网页上的空间。与相对定位相同,使用绝对定位的元素同样会与页面中的其它元素发声重叠,另外使用绝对定位的元素可以有外边距,并且外边距不会与其它元素的外边距发生重叠。

【示例】下面通过示例来演示绝对定位的使用:

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>absolute绝对定位</title>
    <style>
        .container {
            position: fixed;
            border: solid;
            border-color: pink;
            width: 500px;
            height: 500px;
            margin: 50px;
            padding:50px;
        }

        .box {
            border: solid;
            border-color: pink;
            
            width: 300px;
            height: 300px;
            top: 50px;
            left: 50px;
        }

        .box2{
            position: absolute;
            border: solid;
            border-color: pink;
            width: 100px;
            height: 100px;
            font-size: 2px;
            top:10px;
            left:10px;
        }

        .relative{
            position: relative;
            border: solid;
            border-color: pink;
            width: 100px;
            height: 100px;
        }

        .absolute{
            position:absolute;
            border: solid;
            border-color: pink;
            width: 50px;
            height: 50px;
            top:10px;
            left:10px;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="box">
            static
            <div class="box2">
                absolute
            </div>

        </div>
        <div class="relative">
            <div class="absolute">
                absolute
            </div>
        </div>
    </div>
</body>

</html>

运行结果如下图所示:

绝对定位

4. 固定定位:fixed

固定定位就是将元素相对于浏览器窗口进行定位,使用固定定位的元素不会因为浏览器窗口的滚动而移动,就像是固定在了页面上一样,我们经常在网页上看到的返回顶部按钮就是使用固定定位实现的。

【示例】下面通过示例来演示固定定位的使用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>fixed定位</title>
    <style>
        #blank{
          width:200px;
          height:1000px;
          border:solid;
        }

        #position{
            position:fixed;
            width:200px;
            height:200px;
            background-color:pink;
            font-size: 10px;
            bottom:100px;
            left:200px;
        }
    </style>
</head>
<body>
    <div id="blank"></div>
    <div id="position">
        <p>position:fixed可以将元素放在视口的任意位置而随网页滑动保持不变</p>
        <p>而且要搭配四种属性一起使用(top、right、bottom、left,规定与浏览器视口边缘的距离)</p>
        
    </div>
</body>
</html>

运行结果如下图所示:

固定定位

5. 粘性定位:sticky

粘性定位与前面介绍的四种定位方式不太一下,它像是相对定位和固定定位的结合体,当滚动页面时它的效果与相对定位相同,当元素滚动到一定程度时它又会呈现出固定定位的效果。比如一些网页上的导航菜单,当页面加载完成时它在自己默认的位置,当我们向下滚动页面时它又会固定在页面的最顶端。

【示例】下面通过示例来演示粘性定位的使用:

<!DOCTYPE html>
<html>
<head>
    <style>
        div{
            height: 500px;
            position: relative;
        }
        p {
            width: 100%;
            height: 50px;
            margin: 0;
            text-align: center;
            line-height: 50px;
            background-color: hotpink;
        }
        .sticky {
            background-color: pink;
            position: sticky;
            top:0px;
        }
    </style>
</head>
<body>
    <div>
        <p>1</p>
        <p>2</p>
        <p class="sticky">position: sticky;</p>
        <p>4</p>
        <p>5</p>
        <p>6</p>
        <p>7</p>
        <p>8</p>
        <p>9</p>
        <p>10</p>
        <p>11</p>
        <p>12</p>
        <p>13</p>
        <p>14</p>
        <p>15</p>
        <p>16</p>
        <p>17</p>
        <p>18</p>
        <p>19</p>
        <p>20</p>
        <p>21</p>
        <p>22</p>
        <p>23</p>
    </div>
</body>
</html>

运行结果如下图所示:

粘性定位

在使用粘性定位时,需要注意以下几点:

  • 在设置position:sticky;时,必须再定义 top、bottom、right、left 四个属性之一,否则只会处于相对定位;
  • 使用固定定位元素的父元素不能定义overflow:hidden或者overflow:auto属性;
  • 父元素的高度不能低于固定定位元素的高度;
  • 固定定位的元素仅在其父元素内有效。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容