• css效果之吸顶效果


    使用定位实现

    1. 一般我们使用position:sticky来进行实现
    2. 他相当于relativefixed相结合
      • 在页面滚动过程中,含有粘性定位的元素到父元素的距离达到一定要求的时候,他的属性就会由relative变为fixed
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Documenttitle>
        <style>
            #container{
                position: relative;
                width: 200px;
                height: 200px;
                border: 1px solid black;
                overflow: auto;
            }
            #header{
                height: 100px;
                position:sticky;
                top: 0;
                background-color: red;
            }
        style>
    head>
    <body>
        <div id="container">
            <div id="header">
                固定的头部
            div>
            <div id="inner">
                你好 <br>
                ...
            div>
        div>
    body>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    请多写几行 你好
    然后,运行demo,我们会发现头部固定了在这里插入图片描述

    缺点

    1. 当前代码的兼容性不太好
    2. 不会触发BFC 点击
    3. 样式表 zindex 无效。行内 style 写有效。

    获取DOM位置实现

    他的核心是当达到一定的条件后,将盒子的定位属性改为fixed

    条件

    1. 滚动的元素和固定的元素之间的差值为0的时候

    步骤

    1. 我们可以使用offsetTop这个属性来进行获取相关的位置,他是用来获取相对于父级定位的偏移量的属性,关于offsetTop这个属性,点击
    2. 监听滚动事件,每一次滚动获取滚动条滚动的距离,关于scrollTop 点击
    3. 滚动的距离与偏移的距离作对比,如果滚动的距离大于等于偏移的距离,那么直接设置吸顶盒子的属性为fixed

    代码

    <head>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            #container {
                width: 200px;
                height: 200px;
                border: 1px solid black;
                overflow: auto;
                position: relative;
            }
    
            #header {
                height: 100px;
                background-color: red;
                width: inherit;
            }
        style>
    head>
    
    <body>
        <div id="container">
            <div id="header">
                固定的头部
            div>
            <div id="inner">
                你好 <br>
                ...
            div>
        div>
        <script>
            // 选中要吸顶的盒子
            const headerEle = document.getElementById("header")
            // 获取盒子的距离
            const _headerTop = headerEle.offsetTop
            const _container = document.getElementById("container")
            // 监听事件
            _container.onscroll = () => {
                const _scrollTop = _container.scrollTop
                console.log(_scrollTop, _headerTop)
                // 距离比较
                if (_scrollTop >= _headerTop) {
                    headerEle.style.position = "fixed"
                    headerEle.style.top = 0
                    headerEle.style.left = 0
                }
            }
        script>
    body>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
  • 相关阅读:
    API接口接入电商平台采集阿里巴巴平台数据按关键字搜索商品指南
    05_TCP并发服务器
    听GPT 讲Rust源代码--library/core/src(6)
    Python学习笔记第三十六天(NumPy 高级索引)
    JVM阶段(1)-运行时数据区
    代码随想录算法训练营第五十九天| 647.回文子串 、516.最长回文子序列
    FutureTask源码深度剖析
    Python —— hou.Node class
    【GCC编译优化系列】GCC链接失败的错误提示 undefined reference to ‘xxx‘ 可能还有一种情况你没注意到?
    Go学习需要了解知识
  • 原文地址:https://blog.csdn.net/youhebuke225/article/details/126937520