css定位

271 阅读4分钟

一.为什么需要定位

要让盒子在某个盒子内自由的移动或者固定到屏幕中的某个位置,浮动是无法实现的,浮动只能让多个块级盒子在一行中没有缝隙的排列,那么这时我们就要用到定位。

二.定位的定义和组成

定位是指将盒子定在某个位置,所以定位也是在摆放盒子,按照定位的方式移动。
定位=定位模式+边偏移
定位模式用于指定一个元素在文档中的定位方式,边偏移则决定了该元素的最终位置。

三.定位模式

1.静态定位

元素的默认定位方式,无定位
语法:选择器{position:static;}

  • 静态定位按照标准流特性摆放位置,没有边偏移
  • 在布局中很少用到
2.相对定位

在元素移动位置时,是相对于该元素原来的位置计算
语法:选择器{position:relative;}

  • 元素是相对于自己原来的位置移动的(移动位置的时候参照点是自己原来的位置)
  • 原来在标准流的位置继续占有,后面的盒子仍然以标准流的形式对待它(不脱标,继续保留原来的位置,最典型的应用是给绝对定位当父元素)
3.绝对定位

元素在移动时是相对于它祖先元素来说的
语法:选择器{position:absolute;}

  • 如果没有祖先元素或祖先元素没有定位,则以浏览器为准定位(Document文档)
  • 如果祖先元素有定位(相对、绝对、固定),则以最近一级的有定位的祖先元素为参照点移动位置
  • 绝对定位不再占有原先的位置(脱标)
拓展:“父相子绝”的由来

顾名思义:子元素是绝对定位,则父元素要用相对定位。

  • 子元素绝对定位,不会占有位置,可以放到父元素盒子的任何一个地方,不会影响到兄弟元素
  • 父盒子需要加定位限制子盒子在其内的显示
  • 父盒子布局时需要占有位置,因此要是相对定位
4.固定定位

元素固定于浏览器可视区的位置
应用:可以在页面浏览器页面滚动时元素的位置不发生改变
语法:选择器{position:fixed;}

  • 以浏览器的可视窗口为参考点移动元素,跟父元素没有关系,不随滚动条而滚动
  • 固定定位不再占有原先的位置(脱标,其实也可以看作是一种特殊的绝对定位)
拓展:固定定位小技巧--固定在版心右侧位置
  1. 让固定定位的盒子left:50%,走到浏览器可视区(版心)的一半位置
  2. 让固定定位的盒子margin-left:版心宽度的一半距离

联想截图_20231104161057.png

5.粘性定位

可以认为是相对定位和固定定位的混合
语法:选择器{position:sticky;top:10px;}

  • 以浏览器的可视窗口为参考点移动元素(固定定位特点)
  • 占有原先位置(相对定位特点)
  • 必须添加top、left、right、bottem其中一个才有效

联想截图_20231104144654_proc.jpg

四.定位叠放次序

使用定位布局时,可能会出现盒子层叠的情况,此时,可以使用z-index来控制盒子的前后次序(z轴)
语法:选择器{z-index:1;}

  • 数值可以是正整数、负整数或0,默认是auto,数值越大盒子越靠上
  • 如果属性相同,则按照书写顺序,后来居上
  • 数字后面不能加单位
  • 有定位的盒子才有z-index属性

五.定位拓展

1. 绝对定位的盒子居中

加了绝对定位的盒子不能用margin:0 auto;实现水平居中,可用以下方式:

  • left:50%; 让盒子的左侧移动到父元素水平中心位置
  • margin-left:-100px; 让盒子向左移动自身宽度的一半
2.定位特殊特性
  • 绝对定位和固定定位也和浮动类似
  • 行内元素添加绝对或固定定位,可以设置高度和宽度
  • 块级元素添加绝对或固定定位,如果不加高度和宽度,默认大小是内容大小
3.脱标的盒子不会触发外边距塌陷

浮动元素、固定定位、绝对定位的元素都不会触发外边距合并的问题

4.绝对定位、固定定位会完全压住盒子

浮动元素不同,只会压住它下面标准流的盒子,但是不会压住标准流盒子中的文字(图片),因为浮动最初目的就是为了做文字环绕效果,但是绝对定位和固定定位会压住下面标准流盒子的所有内容

联想截图_20231104164712_proc.jpg