本文介绍: 将盒子定在某一个位置,自由的漂浮在其他盒子(包括标准流和浮动)的上面。


1、为什么使用定位

我们先来看一个效果,同时思考一下标准流或浮动能否实现类似的效果

1. 小黄色块图片移动引用户的眼球

在这里插入图片描述
2. 当我们滚动窗口时候盒子固定屏幕某个位置

在这里插入图片描述

结论:要实现以上效果标准浮动都无法快速实现

2、什么定位

盒子在某一个置,自由的漂浮在其他盒子(包括标准流和浮动)的上面 。

3、定位的构成

定位也是用来布局的,它有两部分组成:

定位 = 定位模式 + 边偏移

在这里插入图片描述

3.1、边偏移

简单说,我们定位盒子,是通过偏移来移动位置的。

在 CSS 中,通过 topbottomleftright 属性定义元素偏移:(方位名词)

3.1.1、top

top样式属性定义定位元素的上外边边界与其包含块上边界之间的偏移,非定位元素设置属性无效

3.1.1.1、属性

可以是负的,正的或者 null 表示

对于绝对定位元素元素外边边界与其包含块下边界之间的偏移。
对于相对定位定位的元素,元素的下边界离开其正常位置的偏移。

代表元素包含块的高度百分比

这个关键字表示

对于绝对定位元素,元素将忽略属性bottom属性为准,如果此时设置height: auto,将基于内容需要高度设置高度;如果bottom也为auto的话,元素的垂直位置就是它假如作为静态(即static)元素时该在的位置
对于相对定位元素,元素相对正常位置偏移量基于bottom属性;如果bottom也为auto的话,元素将不会有偏移。

3.1.1.2、注意点

top效果取决于元素的position属性

当topbottom同时指定时,并且 height没有指定或者指定auto的时候,topbottom​​​​​都会生效,在其他情况下,如果 height限制,则top属性会优先设置bottom属性则会被忽略

3.1.2、right

right样式属性定义了定位元素的右外边距边界与其包含块右边界之间的偏移,非定位元素设置此属性无效

3.1.2.1、属性值

可以是负的,正的或者 null 表示:

对于绝对定位的元素,元素右外边距边界与其包含块右边界之间的偏移。
对于相对定位定位的元素,元素的右边界离开其正常位置的偏移。

代表元素包含块的宽度百分比

这个关键字表示:

对于绝对定位元素,元素将忽略此属性而以left属性为准,如果此时设置width:auto,将基于内容需要宽度设置宽度;如果left也为auto的话,元素的水平位置就是它假如作为静态(即static)元素时该在的位置。
对于相对定位元素,元素相对正常位置的偏移量将基于left属性;如果left也为 auto的话,元素将不会有偏移。

3.1.2.2、注意点

right的效果取决于元素的position属性:

  1. 当position设置为absolutefixed时,right属性指定了定位元素右外边距边界与其包含块右边界之间的偏移。
  2. 当position设置为relative时,right属性指定了元素的右边界离开其正常位置的偏移。
  3. 当position设置为sticky时,如果元素在viewport里面right属性的效果和positionrelative等同;如果元素在viewport外面,right属性的效果和position为fixed等同。
  4. 当position设置为static时,right属性无效

left​​​​​​和right同时指定时,元素的位置会被重复指定。当容器是从左到右时,left的值会被优先设定;当容器从右到左时,right的值会被优先设定。

3.1.3、bottom

bottom样式属性定义了定位元素下外边距边界与其包含块下边界之间的偏移,非定位元素设置此属性无效

3.1.3.1、属性值

一个负值、空值或正值,代表了:

对于绝对定位的元素,元素下外边距边界与其包含块下边界之间的偏移。
对于相对定位定位的元素,元素的下边界离开其正常位置的偏移。

包含块高度百分比

  • auto

规定:

对于绝对定位元素,元素将忽略此属性而以top属性为准,如果此时设置height: auto,将基于内容需要高度设置宽度;如果top也为auto的话,元素的垂直位置就是它假如作为静态(即static)元素时该在的位置。
对于相对定位元素,元素相对正常位置的偏移量将基于top属性;如果top也为auto的话,元素将不会有偏移。

3.1.3.2、注意点

bottom的效果取决于元素的position属性:

  1. 当position设置为absolute或fixed时,bottom属性指定了定位元素下外边距边界与其包含块下边界之间的偏移。
  2. 当position设置为relative时,bottom属性指定了元素的下边界离开其正常位置的偏移。
  3. 当position设置为sticky时,如果元素在viewport里面,bottom属性的效果和position为relative等同;如果元素在viewport外面,bottom属性的效果和position为fixed等同。
  4. 当position设置为static时,bottom属性无效

当 top和bottom同时指定时,并且 height没有被指定或者指定为auto或100%的时候,top和bottom都会生效,在其他情况下,如果 height限制,则top属性会优先设置,bottom属性则会被忽略

3.1.4、left

left属性定义了定位元素的左外边距边界与其包含块左边界之间的偏移,非定位元素设置此属性无效

3.1.4.1、属性值

可以是负的,正的 或者 null 表示:

对于绝对定位的元素,元素左外边距边界与其包含块左边界之间的偏移。
对于相对定位定位的元素,元素的左边界离开其正常位置的偏移。

代表元素包含块的宽度百分比

  • auto

这个关键字表示:

对于绝对定位元素,元素将忽略此属性而以right属性为准,如果此时设置width: auto,将基于内容需要宽度设置宽度;如果right也为auto的话,元素的水平位置就是它假如作为静态(即static)元素时该在的位置。
对于相对定位元素,元素相对正常位置的偏移量将基于right属性;如果right也为auto的话,元素将不会有偏移。

3.1.4.2、注意点

left的效果取决于元素的position属性:

  1. 当position设置为absolute或fixed时,left属性指定了定位元素左外边距边界与其包含块左边界之间的偏移。
  2. 当position设置为relative时,left属性指定了元素的左边界离开其正常位置的偏移。
  3. 当position设置为sticky时,如果元素在viewport里面,left属性的效果和position为relative等同;如果元素在viewport外面,left属性的效果和position为fixed等同。
  4. 当position设置为static时,left属性无效

当left和right​​​​​​同时指定时,元素的位置会被重复指定。当容器是从左到右时,left的值会被优先设定;当容器从右到左时,right的值会被优先设定。

3.1.5、注意点

注意

  1. topbottom 不要同时使用
  2. leftright 不要同时使用

3.2、定位模式(position)

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

选择器 {
  position: 属性值;
}

定位模式是有不同分类的,在不同情况下,我们用到不同的定位模式

在这里插入图片描述

3.2.1、静态定位(static

  • 静态定位是元素的默认定位方式,无定位的意思。它相当于 border 里面none, 不要定位的时候用。
  • 静态定位按照标准特性摆放位置,它没有边偏移。
  • 静态定位布局时我们几乎不用的。

3.2.2、相对定位(relative

  • 相对定位是元素相对于它原来在标准流中的位置来说的。(自恋型)

效果图

在这里插入图片描述
相对定位的特点:

  • 相对于自己原来在标准流中位置来移动的。
  • 原来在标准流的区域继续占有,后面的盒子仍然以标准流的方式对待它。

3.2.3、绝对定位(absolute)

绝对定位是元素以带有定位的父级元素来移动位置。(拼爹型)

  1. 完全脱标——完全不占位置;
  2. 父元素没有定位,则以浏览器为准定位(Document 文档)。

在这里插入图片描述

  1. 父元素要有定位
  • 将元素依据最近的已经定位(绝对、固定或相对定位)的父元素(祖先)进行定位。
    在这里插入图片描述
    绝对定位的特点:

  • 绝对是以带有定位的父级元素来移动位置 (拼爹型),如果父级都没有定位,则以浏览器文档为准移动位置。

  • 不保留原来的位置,完全是脱标的。

因为绝对定位的盒子是拼爹的,所以要和父级搭配一起来使用

定位口诀 —— 子绝父相

后面我们再讲解定位口诀的由来

3.2.4、固定定位(fixed

固定定位绝对定位的一种特殊形式:(认死理型)如果说绝对定位是一个矩形,那么固定定位就类似于正方形

  1. 完全脱标——完全不占位置;
  2. 只认浏览器的可视窗口 —— 浏览器可视窗口 + 边偏移属性 来设置元素的位置;

跟父元素没有任何关系;单独使用
不随滚动条滚动

提示:IE6等低版本浏览器支持固定定位。

注意:

固定定位应用场景
固定浏览器可视窗口某个位置的布局

3.2.5、粘性定位(sticky

粘性定位可以被认为是相对定位和固定定位的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。

须指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效。否则其行为与相对定位相同。

通俗来讲就是设定了top、bottom、left、right了,超过这个值为为固定定位。

#one {
  position: sticky;
  top: 10px;
}

viewport 视口滚动到元素 top 距离小于 10px 之前,元素为相对定位。之后,元素将固定在与顶部距离 10px 的位置,直到 viewport 视口回滚阈值以下。

应用场景

粘性定位常用于定位字母列表头部元素。标示 B 部分开始的头部元素在滚动 A 部分时,始终处于 A 的下方。而在开始滚动 B 部分时,B 的头部会固定在屏幕顶部,直到所有 B 的项均完成滚动后,才被 C 的头部替代。

示例

  <div class="box">
  </div>
* {
  padding: 0;
  margin: 0;
}

body {
  height: 2000px;
}

.box {
  position: sticky;
  top: 10px;
  margin: 100px auto;
  width: 30px;
  height: 90px;
  background-color: pink;
}

在这里插入图片描述

4、子绝父相的由来

刚才咱们说过,绝对定位,要和带有定位的父级搭配使用,那么父级要用什么定位呢?

子绝父相 —— 子级绝对定位,父级要用相对定位。

子绝父相是使用绝对定位的口诀,要牢牢记住

疑问为什么布局时,子级元素使用绝对定位时,父级元素就要用相对定位呢?

观察下图,思考一下在布局时,左右两个方向箭头图片以及父级盒子的定位方式

在这里插入图片描述
在这里插入图片描述
分析

  1. 方向箭头叠加在其他图片上方,应该使用绝对定位,因为绝对定位完全脱标,完全不占位置。
  2. 父级盒子应该使用相对定位,因为相对定位不脱标,后续盒子仍然以标准流的方式对待它。

如果父级盒子也使用绝对定位,会完全脱标,那么下方的广告盒子会上移,这显然不是我们想要的。

结论父级要占有位置,子级要任意摆放,这就是子绝父相的由来。

5、绝对定位的盒子居中

注意绝对定位/固定定位的盒子不能通过设置 margin: auto 设置水平居中

在使用绝对定位时要实现水平居中,可以按照下图方法

在这里插入图片描述

  1. left: 50%;:让盒子的左侧移动到父级元素的水平中心位置
  2. margin-left: -100px;:让盒子向左移动自身宽度的一半

盒子居中定位示意图

在这里插入图片描述

6、堆叠顺序(z-index

在使用定位布局时,可能出现盒子重叠的情况

加了定位的盒子,默认后来者居上,后面的盒子会压住前面的盒子。

应用 z-index 层叠等级属性可以调整盒子的堆叠顺序。如下图所示

在这里插入图片描述
z-index特性如下

  1. 属性值正整数整数0默认值是 0,数值越大,盒子越靠上;
  2. 如果属性值相同,则按照书写顺序,后来居上
  3. 数字后面不能加单位
  4. auto:盒子不会创建一个新的本地堆叠上下文。在当前堆叠上下文生成的盒子的堆叠层级和父级盒子相同。

注意z-index 只能应用相对定位绝对定位固定定位的元素,其他标准流浮动静态定位无效。

7、定位改变display属性

我们已经 了解 display显示模式,可以改变显示模式有以下方式

所以说,一个行内的盒子,如果加了浮动固定定位绝对定位,不用转换,就可以给这个盒子直接设置宽度高度等。

同时注意:

浮动元素、绝对定位(固定定位)元素的都不会触发外边距合并问题。(我们以前是用padding border overflow解决的)

也就是说,我们给盒子改为了浮动或者定位,就不会有垂直外边距合并的问题了。

写在最后

如果你感觉文章不咋地//(ㄒoㄒ)//,就在评论留言作者继续改进;o_O???
如果你觉得该文章有一点点用处,可以给作者点个赞;\*^o^*//
如果你想要和作者一起进步,可以微信扫描二维码关注前端老L~~~///(^v^)\~~~
谢谢各位读者们啦(^_^)∠※!!!

原文地址:https://blog.csdn.net/weixin_62277266/article/details/122771394

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_31434.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注