使用 position:sticky 实现粘性布局

1.什么是粘性布局

  • 这是一个结合了 position:relative 和 position:fixed 两种定位功能于一体的特殊定位,适用于一些特殊场景。
  • 元素先按照普通文档流定位,然后相对于该元素在流中的 flow root(BFC)和 containing block(最近的块级祖先元素)定位。
  • 而后,元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。

2.position:sticky 示例

{
    position: -webkit-sticky;
    position: sticky;
    top: 0;
}
image

3.生成规则

position:sticky 的生效是有一定的限制的,总结如下:
  • 须指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效。否则其行为与相对定位相同。
    • 1.设定为 position:sticky 元素的任意父节点的 overflow 属性必须是 visible,否则 position:sticky 不会生效。这里需要解释一下:
    • 2.如果 position:sticky 元素的任意父节点定位设置为 overflow:hidden,则父容器无法进行滚动,所以 position:sticky 元素也不会有滚动然后固定的情况。
    • 3.如果 position:sticky 元素的任意父节点定位设置为 position:relative | absolute | fixed,则元素相对父元素进行定位,而不会相对 viewprot 定位。
  • 达到设定的阀值。这个还算好理解,也就是设定了 position:sticky 的元素表现为 relative 还是 fixed 是根据元素是否达到设定了的阈值决定的。

4.兼容性

if (CSS.supports("position", "sticky") || CSS.supports("position", "-webkit-sticky")) {
    // 支持 sticky
}

5.特性(坑)

  • 1、sticky 不会触发 BFC。如果不知道 BFC 可以看这里
  • 2、样式表 z-index 无效。行内 style 写有效。
  • 3、sticky 是容器相关的,也就说 sticky 的特性只会在他所处的容器里生效。demo
    (即使元素已经到了达到了fixed的要求,但是不会跑到父元素之外,会优先被父元素的边界带着跑)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,179评论 1 92
  • 大家好,我是IT修真院深圳分院第06期学员,一枚正直善良的web程序员。 今天给大家分享一下,修真院官网 CSS任...
    不二先森zZ阅读 4,511评论 0 2
  • 1. 前言 前端圈有个“梗”:在面试时,问个css的position属性能刷掉一半人,其中不乏工作四五年的同学。在...
    YjWorld阅读 4,930评论 5 15
  • 1.盒模型是CSS的基石之一,它指定元素如何显示以及(在某种程度上)如何相互交互。页面上的每个元素被看作是一个矩形...
    garble阅读 620评论 0 0
  • 况且~况且~况且~ 今天我有一个朋友,坐着长途火车,从上海去云南, 今天我有一个朋友,坐着长途火车,从上海来广州,...
    黄點點阅读 840评论 0 2

友情链接更多精彩内容