十一.网页布局-CSS定位

CSS 定位的基本类型(position)

position 属性用来指定一个元素在网页上的位置,一共有 5 种定位方式,即 position 属性主要有五个值。

1.static (默认值)

  • static 是 position 属性的默认值。如果省略 position 属性,浏览器就认为该元素是 static 定位。
  • 这时浏览器会按照源码的顺序,决定每个元素的位置,这称为”正常的页面流”(normal flow)。每个块级元素占据自己的区块(block),元素与元素之间不产生重叠,这个位置就是元素的默认位置。
  • 该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。此时  top, right, bottom, left  和  z-index  属性无效;

2.相对定位(relative)

  • 相对定位就是相对于自己以前在标准流中的位置(即 static 时的位置)来移动;它必须搭配 top、bottom、left、right 这四个属性一起使用,用来指定偏移的方向和距离;

注意点:

  • 由于相对定位是不脱离标准流的, 所以在相对定位中是区分块级元素/行内元素/行内块级元素
  • 由于相对定位是不脱离标准流的, 并且相对定位的元素会占用标准流中的位置, 所以当给相对定位的元素设置 margin/padding 等属性的时会影响到标准流的布局

应用场景:

  • 1 用于对元素进行微调
  • 2 配合后面学习的绝对定位来使用

3.绝对定位(absolute)

绝对定位元素的容纳快是position属性值不为static的最近的祖辈元素,如果都没有,就是相对于 body。

注意点:

  • 1.脱离标准流的

  • 2.相对定位和绝对定位配合 left: 0;right: 0; top: 0; bottom: 0;使用

规律:

  • 1.如果一个绝对定位的元素有祖先元素, 并且祖先元素也是定位流, 而且祖先元素中有多个元素都是定位流, 那么这个绝对定位的元素会以离它最近的那个定位流的祖先元素为参考点;

  • 2.如果一个绝对定位的元素是以 body 作为参考点, 那么其实是以网页首屏的宽度和高度作为参考点, 而不是以整个网页的宽度和高度作为参考点;

  • 3.一个绝对定位的元素会忽略祖先元素的 padding;

  • 4.默认情况下绝对定位的元素会以 body 作为参考点, 所以会随着浏览器的宽度高度的变化而变化

  • 5.子绝父相: 子元素用绝对定位, 父元素用相对定位

**如何让绝对定位的元素水平居中?**
只需要设置绝对定位元素的 left:50%;
然后再设置绝对定位元素的 margin-left: -元素宽度的一半 px;

4.固定定位(fixed)

  • 固定定位和前面学习的背景关联方式很像, 背景定位可以让背景图片不随着滚动条的滚动而滚动, 而固定定位可以让某个盒子不随着滚动条的滚动而滚动;
  • 表示,相对于视口(viewport,浏览器窗口)进行偏移,即定位基点是浏览器窗口。这会导致元素的位置不随页面滚动而变化,好像固定在网页上一样。
  • 它如果搭配 top、bottom、left、right 这四个属性一起使用,表示元素的初始位置是基于视口计算的,否则初始位置就是元素的默认位置。

注意点:

固定定位的元素是脱离标准流的, 不会占用标准流中的空间,所以也不区分行内/块级/行内块级。

5.sticky(粘连定位)

  • 元素可以被固定于页面指定位置,但并不一定始终固定于此位置。

  • 定位位置可以通过 top、bottom、left 与 right 属性设置,但是此位置是一个临界值,也就是说元素只有达到设置的这个临界值才会固定,其他位置并不会固定。

  • 跟前面四个属性值都不一样,它会产生动态固定效果,很像 relative 和 fixed 的结合:一些时候是 relative 定位(定位基点是自身默认位置),另一些时候自动变成 fixed 定位(定位基点是视口)。

  • sticky 生效的前提是,必须搭配 top、bottom、left、right 这四个属性一起使用,不能省略,否则等同于 relative 定位,不产生”动态固定”的效果。原因是这四个属性用来定义"偏移距离",浏览器把它当作 sticky 的生效门槛。它的具体规则是,当页面滚动,父元素开始脱离视口时(即部分不可见),只要与 sticky 元素的距离达到生效门槛,relative 定位自动切换为 fixed 定位;等到父元素完全脱离视口时(即完全不可见),fixed 定位自动切换回 relative 定位;

  • 页面向下滚动时,工具栏变成固定位置,始终停留在页面头部(fixed 定位);等到页面重新向上滚动回到原位,工具栏也会回到默认位置。

6.z-index属性(定位元素的可见性)

  • z-index 属性的作用是专门用于控制定位流元素的覆盖关系的;默认情况下所有的元素都有一个默认的 z-index 属性, 取值是 0.

注意:

    • 1.默认情况下定位流的元素会盖住标准流的元素;
    • 2.默认情况下定位流的元素后面编写的会盖住前面编写的
    • 3.如果定位流的元素设置了 z-index 属性, 那么谁的 z-index 属性比较大, 谁就会显示在上面;

从父现象:

  • 1.1 如果两个元素的父元素都没有设置 z-index 属性, 那么子元素谁的 z-index 属性比较大谁就显示在上面
  • 1.2 如果两个元素的父元素设置了 z-index 属性, 那么子元素的 z-index 属性就会失效, 也就是说谁的父元素的 z-index 属性比较大谁就会显示在上面;

7.层叠上下文

  • 层叠上下文(stacking context),是 HTML 中一个三维的概念,相当于Z轴,用来控制堆叠元素的显示优先顺序。
  • 如果一个元素含有层叠上下文,(也就是说它是层叠上下文元素),我们可以理解为这个元素在 Z 轴上就“高人一等”,最终表现就是它离屏幕观察者更近。
层叠顺序:
  • “层叠顺序” (stacking order)表示元素发生层叠时按照特定的顺序规则在 Z 轴上垂直显示。由此可见,前面所说的“层叠上下文”和“层叠等级”是一种概念,而这里的“层叠顺序”是一种规则。
同一个堆叠上下文元素在 Z 轴的排列:

背景或边框 < z-index负值 < 块级元素 < 浮动元素 < 行内、行内块元素 < position z-index:auto/0 < position z-index正值

  • 下面列举的从小到大排序:

    • 创建推叠上下文的元素的背景和边框
    • 堆叠级别(z-index,stack level)为负值的堆叠上下文
    • 常规流非定位的块盒
    • 非定位的浮动盒子
    • 常规流非定位行盒
    • 任何 z-index 是 auto 的定位子元素,以及 z-index 是 0 的堆叠上下文
    • 堆叠等级为正值的堆叠上下文
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享