CSS定位

position的值有staticrelativeabsolutefixedinherit(继承)。
staticinherit比较简单,这里就简单解释一下。
static(静态定位):默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
inherit(继承):继承自有position属性的父元素。如果父元素没有position属性,则默认为static

absolute(绝对定位)

positionabsolute的元素会相对于距离最近的positionrelative/fixed/absolute的上级元素进行定位,如果上级元素都没有position属性,那么则相对于初始包含块定位。初始包含块并不是body元素或者html元素,而是html元素的包含块(the initial containing block),指的是以整个 canvas (渲染内容的空间) 的坐标原点(左上)为基准,以 viewport (也就是浏览器视窗内渲染 HTML 的空间)为大小的矩形。详情可以了解CSS绝对定位absolute的初始包含块不是body元素,也不是html元素
下面是测试代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>例子</title>
        <style type="text/css">
            #box1{
                width: 400px;
                height:400px;
                background-color: yellow;
            }
            #box2{
                width: 100px;
                height: 100px;
                background-color: red;
            }
        </style>
    </head>
    <body>
        <div id="box1">
            <div id="box2">
            </div>
        </div>
    </body>
</html>

效果如图:
在这里插入图片描述
我们可以验证一下:
我们给box1加上position: relative;
再给box2加上position: absolute;bottom: 0px;
效果如图:
在这里插入图片描述
我们把box1的position改为absolute
效果如图:
在这里插入图片描述
我们把box1的position改为fixed
效果如图:
在这里插入图片描述
我们把box1的position去掉。
效果如图:
在这里插入图片描述
可以看出,上面验证得到的结果跟描述是一致的。也就是positionabsolute的元素会相对于距离最近的positionrelative/fixed/absolute的上级元素进行定位,如果上级元素都没有position属性,那么则相对于初始包含块定位。

关于位置保留
元素使用absolute绝对定位移动后,原本的位置会被占据,元素会完全脱离了文档流。
我们可以验证一下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>例子</title>
        <style type="text/css">
            #box1{
                width: 400px;
                height: 400px;
                background-color: yellow;
            }
            #box2{
                width: 200px;
                height: 200px;
                background-color: red;
            }
        </style>
    </head>
    <body>
        <div id="box1">
            <div id="box2">
            </div>
            <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
            <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
            <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        </div>
    </body>
</html>

效果如图:
在这里插入图片描述
这时我们给box2加上position: absolute;
效果如图:
在这里插入图片描述
可以看到box2原本的位置被文字占据,box2完全脱离了文档流。

relative(相对定位)

positionrelative的元素会相对于自身定位,它原本所占的空间仍保留。

下面是测试代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>例子</title>
        <style type="text/css">
            #box1{
                width: 400px;
                height: 400px;
                background-color: yellow;
                border: 5px solid red;
                position: relative;
            }
        </style>
    </head>
    <body>
        <div id="box1"></div>
    </body>
</html>

效果如图:
在这里插入图片描述
我们给box1加上left: 100px;top:100px;
效果如图:
在这里插入图片描述
可以看出box1向右和下各偏移了100px
left: 100px;top:100px;修改为bottom: 100px;right: 100px;
效果如图:
在这里插入图片描述
box1向左和上各偏移了100px,可以看出有position: relative;的元素设置toprightbottomleft是相对于自身进行偏移的。

关于位置保留

下面是测试代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>例子</title>
        <style type="text/css">
            #box1{
                width: 400px;
                height: 400px;
                background-color: yellow;
                border: 5px solid red;
            }
        </style>
    </head>
    <body>
        <div id="box1"></div>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
    </body>
</html>

效果如图:
在这里插入图片描述
我们给box1加上position: relative;top: 100px;left: 100px;
效果如图:
在这里插入图片描述
可以看到box1偏移后原本的位置被保留了下来,这跟设置了position: absolute;的元素是相反的。

fixed(固定定位)

position设置了fixed的元素相对于浏览器窗口定位,也是脱离文档流,不会保留原来的位置。
下面是测试代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>例子</title>
        <style type="text/css">
            #box1{
                width: 400px;
                height: 400px;
                background-color: yellow;
                border: 5px solid red;
            }
        </style>
    </head>
    <body>
        <div id="box1"></div>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
        <p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
    </body>
</html>

效果如图:
在这里插入图片描述
给box1加上上position: fixed;以及top:100px;left: 100px;
效果如图:
在这里插入图片描述
可以看出元素设置了position: fixed;后,可以通过设置toprightbottomleft将元素相对于浏览器窗口偏移,所以这个时候就算你对页面进行滚动,元素也不会移动。而且也可以看出元素原本的位置也被占据了,元素完全脱离了文档流。

### CSS 定位使用方法 CSS 提供了几种不同的定位方式,每一种都有其特定的应用场景: #### 静态定位 (static) 这是元素的默认定位模式。静态定位下的元素按照正常的文档流排列,不会受到 `top`、`bottom`、`left` 或 `right` 属性的影响。 ```css .element { position: static; } ``` #### 相对定位 (relative) 相对定位允许元素相对于它原本的位置进行偏移,但仍然据原来的空间位置,不影响其他元素布局。 ```css .relative-element { position: relative; top: 10px; /* 向下移动 */ left: 20px; /* 向右移动 */ } ``` #### 绝对定位 (absolute) 绝对定位使元素脱离正常文档流,并依据最近已定位(非 `static`)祖先元素来定位;如果没有这样的祖先,则基于初始包含块(通常是视口)。这种定位可能导致布局不稳定和响应式设计困难[^1]。 ```css .absolute-element { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } ``` #### 固定定位 (fixed) 固定定位类似于绝对定位,但它始终相对于浏览器窗口而不是任何父级容器。即使页面滚动,固定定位的元素也会保持在同一位置。 ```css .fixed-header { position: fixed; top: 0; width: 100%; } ``` #### 黏性定位 (sticky) 黏性定位结合了相对定位和固定定位的特点,在某些条件下表现为相对定位,而在另一些情况下则像固定定位一样工作。通常用于创建导航栏或其他需要随滚动条变化而粘附于屏幕顶部/底部的内容。 ```css .sticky-sidebar { position: sticky; top: 10px; } ``` ### 解决方案与注意事项 对于因过度依赖绝对定位而导致的问题,可以通过调整设计方案减少对其使用的频率,转而采用更加灵活且易于维护的技术如Flexbox或Grid布局[^3]。 另外需要注意的是,不同类型的定位可能引发新的挑战,比如元素重叠等问题。针对这些问题,可以考虑通过适当调整z-index值来管理层叠顺序,或是利用现代布局技术从根本上解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值