欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前端基础总结之css 05_定位

程序员文章站 2022-03-30 11:53:50
...

知识导航:

  • 何为定位
  • 定位的分类及其特点
  • 定位应用
  • 定位是否也改变显示模式

1. 何为定位

分别看下面的效果图:
图一
前端基础总结之css 05_定位
图二
前端基础总结之css 05_定位

像图一左下角的可以随着页面的滚动,但自身位置可以保持在浏览器可视位置相对不变的小导航栏;图二压在轮播图上边的几个小圆点。这两种效果使我们前几篇所用技术无法办到的。

也许你会想浮动也可以使盒子脱标,压在其标准流盒子的上方。但这里我很遗憾的告诉你,浮动的盒子是无法压住图片和文字的

定位的重要性油然而生。

详解:
定位也是用来布局的,他有两部分组成。定位模式、边偏移

先说边偏移:

简单来说我们定位的盒子,是通过边偏移来移动位置的。定位的盒子有了边偏移才有了价值

边偏移属性 示例 描述
top top: 80px 顶端偏移量,定义元素相对于其父元素上边线的距离
bottom bottom: 80px 底部偏移量,定义元素相对于其父元素下边线的距离
left left: 80px 左侧偏移量,定义元素相对于其父元素左边线的距离
right right: 80px 右侧偏移量,定义元素相对于其父元素右边线的距离

定位模式

在 CSS 中,通过 position 属性定义元素的定位模式,语法如下:

选择器 { position: 属性值; }
语义
static 静态定位
relative 相对定位
absolute 绝对定位
fixed 固定定位

2. 定位的分类及其特点

如上边position的不同属性值,即代表的四种定位方式。

2.1 静态定位(static) - 了解

  • 静态定位是元素的默认定位方式,无定位的意思。就是标准流的样子,这种我们无需理会
  • 静态定位在布局时我们几乎不用的

2.2 相对定位(relative) - 重要

相对定位是元素相对于它原来在标准流中的位置来说的。

示例:

代码

给与第二个盒子相对定位看其特点。
<style>
    div {
        width: 200px;
        height: 200px;
        background-color: yellow;
    }
    
    .demo {
        position: relative;
        top: 150px;
        left: 150px;
        background-color: red;
    }
</style>

<body>
    <div class="demo02"></div>
    <div class="demo"></div>
    <div class="demo03"></div>
</body>

效果图:
前端基础总结之css 05_定位
发现其特点如下:

  • 相对于自己原来在标准流中位置来移动的
  • 原来在标准流的区域位置继续占有

2.3 绝对定位(absolute) - 重要

绝对定位是元素以带有定位的父级元素为参照来移动位置。
示例

仍是将二号盒子设置定位看其特点
<style>
    div {
        width: 200px;
        height: 200px;
        background-color: yellow;
    }
    
    .demo {
        position: absolute;
        top: 150px;
        left: 150px;
        background-color: red;
    }
</style>
<body>
    <div class="demo02">01</div>
    <div class="demo">02</div>
    <div class="demo03">03</div>
</body

效果图:
前端基础总结之css 05_定位
发现其特点:

  • 脱标,不占位置,且不保留其位置
  • 父元素无定位,则以浏览器为参照
  • 父元素要有定位,元素以结构距离最近(嵌套关系最近的)已经定位(绝对、固定或相对定位)的祖先元素进行定位。即假设爷爷父亲均有定位,则参照物为父亲

定位口诀 —— 子绝父相,绝对定位元素要求一个有定位的父级来管教。那么我们的父级元素使用相对定位再合适不过了。如果父级也使用绝对定位,那么试想一下。子是绝对定位已经脱标,且不保留其原来位置父元素也是绝对定位,性质和儿子一样脱标,不保留原来位置。那么在他们下面的标准流盒子自然而然挤了上来

2.4 固定定位(fixed) - 重要

固定定位是绝对定位的一种特殊形式,所以它也是完全脱标 —— 完全不占位置;
但它的不同在于参照物是浏览器的可视窗口(简单认为浏览器全屏时我们的屏幕)

它和父元素没有任何关系,单独使用即可。且其特点就是不随滚动条滚动。效果类似于一般网站下面的返回顶部按钮。
使用就是写一个盒子,给与position:fixed;写上边偏移即可。比较简单不做示例了

3. 定位应用

3.1 使绝对定位的盒子居中

举例:水平居中(竖直居中同理)
步骤:

  1. left:50%
  2. magin-left:盒子宽度的一般
    解释:我们要实现的效果
    前端基础总结之css 05_定位
    开始时:前端基础总结之css 05_定位
    left:50%即走到距父亲盒子左边一半的距离
    前端基础总结之css 05_定位
    显然走过了,往回走呗。left越大,距父左越远。我们走过了,走过的距离是小盒子宽度的一半。那么再走回这个距离就可以了。即left的值为-小盒子宽度一半
    (如果你是新手你这样理解,left:50%用具体数。假设现在是left:1000px。即现在的位置是距分左端1000px,但是这个位置是走过了的。实际位置假设900px达到效果。那么我们就得left:-100px。即从即左1000的位置减掉了100)
    实现效果:前端基础总结之css 05_定位

3.2 堆叠顺序(z-index)

在使用定位布局时,可能会出现盒子重叠的情况。即有这样三个盒子
前端基础总结之css 05_定位
三个盒子都加了绝对定位之后:
前端基础总结之css 05_定位
它们默认的是后来者居上,即2盖住1,3盖住2 。但我想让1号盒子显示出来该怎么办
解决:
css中有一个z-index 层叠等级属性可以调整盒子的堆叠顺序
使用:前端基础总结之css 05_定位
前端基础总结之css 05_定位
z-index 的特性如下:

  • 属性值为正整数、负整数或0,默认值是 0,数值越大,盒子越靠上;
  • 数字后面不能加单位。
  • 只能应用于相对定位绝对定位固定定位的元素,其他标准流浮动静态定位无效。

4. 定位是否也改变显示模式

绝对定位和固定定位也和浮动类似, 默认将盒子转化为行内块
并且:
浮动元素、绝对定位(固定定位)元素的都不会触发外边距合并的问题。(为解决外边距塌陷又有了一种方法)

小结

定位模式 是否脱标占有位置 移动位置基准 模式转换(行内块) 使用情况
静态static 不脱标,正常模式 正常模式 不能 几乎不用
相对定位relative 不脱标,占有位置 相对自身位置移动 不能 基本单独使用
绝对定位absolute 完全脱标,不占有位置 相对于定位父级移动位置 要和定位父级元素搭配使用
固定定位fixed 完全脱标,不占有位置 相对于浏览器移动位置 单独使用,不需要父级