CSS之为什么需要定位?

91 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

“金秋十月,我要连续30天更文,做劳模,拿手机摄影神器!点击查看活动详情 “即可成功参与

定位的基本介绍

为什么需要定位?

1、可以解决盒子与盒子之间的层叠问题

2、页面滚动,某个盒子固定在页面中不动

一个完整的网页需要:盒子模型+浮动+定位 一起来布局

定位的基本使用

静态定位介绍

静态定位是默认值,就是之前认识的标准流

任何一个标准流的盒子都有静态定位(静态定位就相当于没定位

position:static;

相对定位介绍—不脱标自恋型

相对定位(不脱标):自恋型 ,总是以自己原来的位置移动 ,原来的位子还在,其他盒子该在哪就在那,不会随着他的移动就动

position: relative;
top: 100px;
left: 100px;

注意点:

1、不脱标,相对于自己原来的位置移动,移动后自己原来的位置依然存在

2、加了相对定位的盒子通过 top left 移动距离 和 普通的盒子使用margin移动位置有什么区别?

  • 普通的margin 移动距离会影响下面盒子,把其他盒子挤走
  • 而相对定位的盒子通过top 移动,则不会影响其余的盒子。

应用在小范围的移动

绝对定位介绍—完全脱标拼爹型

绝对定位(完全脱标):以最近一级带有定位的父级为准来移动距离,一般子绝父相。

/*1. 绝对定位 */
position: absolute;
/* 2. 偏移 */
top: 10px;
left: 10px;

注意点:

1、能盖住任何盒子,包括文字,图片,所以是完全脱标(浮动盖不住文字、图片)

2、不占位置

3、绝对定位和浮动的注意点:

  • 如果盒子本身没有宽度, 加了浮动和绝对定位,则宽度改为内容的宽度。经常加 100%。
  • 任何元素添加了浮动和绝对定位(固定定位),则不需要模式转换,就可以直接给宽度和高度。

固定定位介绍—完全脱标死心眼型

固定定位(完全脱标):死心眼型,相对于浏览器进行移动

position: fixed;
bottom: 0;
right: 0;
width: 50px;
height: 200px;

注意点:

1、是以浏览器的可视区域来移动的

2、和绝对定位一样,是完全脱标的,不占位置

经常应用在让盒子固定在屏幕中的某个位置

粘性定位介绍 —不脱标

粘性定位(不脱标):保留原有位置,并且根据情况固定在屏幕上

position:sticky;

注意点:

1、他是不脱标的,按照标准流来布局

2、当屏幕滚动到某一个位置后,就会固定在屏幕上

3、至少要指定一个偏移值才有效

top:0;就是距离浏览器0距离,显示效果就是当这个元素移动到浏览器顶部时就会粘着浏览器顶部

水平垂直居中案例

水平居中

第一步:给子盒子绝对定位、给父盒子相对定位

第二步:先让子盒子往右移动父盒子的一半 left:50%

第三步:再让子盒子往左自动自己的一半 margin-left:父的子盒子宽度的一半

垂直居中:

第一步:给子盒子绝对定位、给父盒子相对定位

第二步:先让子盒子往下移动父盒子的一半 top:50%

第三步:再让子盒子往上移动自动自己的一半 margin-top:父的子盒子高度的一半

<div class="box">
        <div class="s"></div>
</div>
.box {
            position: relative;
            width: 500px;
            height: 500px;
            background-color: pink;
            margin: 100px auto;
        }
​
        .s {
            /* float: left; */
            position: absolute;
             /* 水平居中 */
            /* 走父盒子宽度的一半 */
            left: 50%;
            /* 往左侧走自己(小盒子)宽度的一半 */
            margin-left: -100px;
            
            /* 垂直居中 */
             /* 走父盒子高度的一半 */
            top: 50%;
             /* 往上侧走自己(小盒子)高度的一半 */
            margin-top: -15px;
            width: 200px;
            height: 30px;
            background-color: purple;
​
        }

总结:一定要子绝父相

定位的盒子水平居中都需要两步:

  • 让带有定位的盒子 水平居中 水平

1、先走大盒子宽度的一半 2、然后往回走自己宽度的一半

  • 让带有定位的盒子 垂直居中 垂直

1、先走大盒子高度的一半 2、然后往回走自己高度的一半

圆角边框

场景:让盒子四个角变得圆润,增加页面细节,提升用户体验

border-radius:半径

可以是一个值、两个值、三个值、四个值
border-radius:  左上角  右上角  右下角  左下角;   顺时针

1、让正方形变成园的方法:宽度或者是高度的一半 或者直接border-radius:50%

.box {
    width: 200px;
    height: 200px;
    /* 让正方形变为圆的算法: 宽或者高度的一半 */
    /* border-radius: 100px; */
    /* border-radius: 50%; */
}

2、让长方形变成胶囊形状的方法:必须是像素,宽度或者高度的一半,较小值的那个。

 .box2 {
   width: 300px;
   height: 50px;
   border: 1px solid purple;
   /* border-radius: 50%; 不能这样写 */
   border-radius: 25px;
}
.box3 {
        width: 50px;
        height: 300px;
        border: 1px solid purple;
        /* border-radius: 50%; 不能这样写 */
        border-radius: 25px;
}

元素层级问题

不同的布局方式有不同的层级关系

  • 标准流<浮动<定位

不动定位之间的层级关系:

  • 相对、决定、固定默认的层级是相同的
  • 此时html中写在下面的元素层级会更高,就会覆盖上面的元素

更改定位元素的层级

z-index:数字;  没有单位  数字越大层级越高

注意点:

  1. 数字越大,层级约靠上。
  2. 只有定位的元素才有这个属性。
  3. 数字后面不跟单位。 font-weight: 400;也不带单位
  4. 数字是整数。 可以是 负数 可以是 0 可以是正数 比如 1.2.3.4
  5. 默认值是 auto 。 就是跟父级一样大。