CSS问题 — — 定位 层级

参考资料:https://www.mscto.com/css/433758.html (css定位position引发的层级关系问题详解)
https://developer.mozilla.org/zh-CN/docs/Web/CSS/position

postion属性

概念:用于指定一个元素在文档中的定位方式
常见语法:static | relative | absolute | sticky | fixed

取值

  • static:该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。此时 top, right, bottom, left 和 z-index 属性无效。就是所谓的默认布局。
    CSS问题 — — 定位 层级_第1张图片
  • relative 相对定位
    该关键字下,元素先放置在未添加定位时的位置,再在不改变页面布局的前提下调整元素位置(因此会在此元素未添加定位时所在位置留下空白)。position:relative 对 table-*-group, table-row, table-column, table-cell, table-caption 元素无效。
    通俗的说就是相对于自身原本的位置的偏移,不影响其他元素的布局。
    CSS问题 — — 定位 层级_第2张图片
  • absolute 绝对定位 非常常用
    元素会被移出正常文档流,并不为元素预留空间,通过指定元素相对于最近的非 static 定位祖先元素的偏移,来确定元素位置。绝对定位的元素可以设置外边距(margins),且不会与其他边距合并。
    CSS问题 — — 定位 层级_第3张图片
  • fixed 固定定位
    元素会被移出正常文档流,并不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。打印时,元素会出现在的每页的固定位置。fixed 属性会创建新的层叠上下文。当元素祖先的 transform, perspective 或 filter 属性非 none 时,容器由视口改为该祖先。
  • sticky 粘性定位
    元素根据正常文档流进行定位,然后相对它的最近滚动祖先(nearest scrolling ancestor)和 containing block (最近块级祖先 nearest block-level ancestor),包括table-related元素,基于top, right, bottom, 和 left的值进行偏移。偏移值不会影响任何其他元素的位置。
    该值总是创建一个新的层叠上下文(stacking context)。注意,一个sticky元素会“固定”在离它最近的一个拥有“滚动机制”的祖先上(当该祖先的overflow 是 hidden, scroll, auto, 或 overlay时),即便这个祖先不是真的滚动祖先。这个阻止了所有“sticky”行为(详情见Github issue on W3C CSSWG)。
    粘性定位可以被认为是相对定位和固定定位的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。

涨知识:绝对定位元素填充可用空间

大多数情况下,height和width 被设定为auto的绝对定位元素,按其内容大小调整尺寸。但是,被绝对定位的元素可以通过指定top和bottom ,保留height未指定(即auto),来填充可用的垂直空间。 它们同样可以通过指定left 和 right并将width 指定为auto来填充可用的水平空间。

举例说明:

下面例子就是,宽度固定,但是高度没有设置,通过top,bottom的值,使得高度自动填充。
CSS问题 — — 定位 层级_第4张图片
CSS问题 — — 定位 层级_第5张图片
补充:如果 top 和 bottom 都被指定(严格来说,这里指定的值不能为 auto ),top 优先。
如果指定了 left 和 right ,当 direction设置为 ltr(水平书写的中文、英语)时 left 优先, 当direction设置为 rtl(阿拉伯语、希伯来语、波斯语由右向左书写)时 right 优先。
如果宽度不为auto的情况下设置left和right,宽度不会因为left和right值改变。

层叠上下文

https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context

你可能感兴趣的:(CSS问题 — — 定位 层级)