CSS sticky妙用 实现大疆顶部广告栏效果

之前我只知道用JS监听事件实现顶部广告栏,今天复习CSS定位才发现sticky一行代码就解决了!

掘金不能嵌入视频所以就只能放图片了呜呜呜

  • 官网链接store.dji.com/cn (打开应该可以看到一个立即下载的广告 ,和固定顶部的菜单栏)

效果演示:

代码:

html 复制代码
  <style>
      body {
        margin: 0;
      }
      .wrapper {
        height: 60px;
        background-color: rgba(250, 250, 250, 0.7);
        position: sticky;//粘性定位
        top: 0;//当用户滚动页面时,当满足指定的偏移位置元素会变为固定定位,直到其滚动容器达到定义的阈值。
        color: rgba(0, 0, 0, 0.7);
        text-align: center;//文字居中,其实这个可以不要
        display: flex; /* 使用 Flexbox布局 */
        justify-content: center; /* 水平居中 */
        align-items: center;/* 垂直居中 */
      }
      .back{
        height: 200px;
        background-color: rgba(154, 226, 233, 0.7);
      }
      .box1 {
        height: 100px;
        width: 100vw;
        background: #f9d9d9;
        position: sticky;//粘性定位
        top: 0;//元素在static和fixed之间切换
        display: flex;//flex布局
        justify-content: center;//水平居中
        align-items: center;//垂直居中
        color: rgba(0, 0, 0, 0.8);
      }
      .box2{
        height: 10000px;
      }
    </style>
  </head>
  <body>
    <div class="back">
      <div class="wrapper">
        <header>大疆商城App 立即下载 ×</header>
      </div>
    </div>
    <div class="box1">
      <header>DJI    光影夏日  好礼相至   (搜索icon)(个人信息icon)</header>
    </div>
    <div class="box2">
         <header>这里是商品信息   商品信息</header>
    </div>
  </body>

顺便复习一下css五种定位方式吧

  1. static

    • 默认值 。元素按照正常的文档流进行定位,不会受到 toprightbottomleft 属性的影响。
    • 元素会在页面中按照顺序依次排列。
  2. relative

    • 元素相对于其正常位置进行定位。
    • 可以使用 toprightbottomleft 属性来移动元素,但它仍然占据原始空间。原始空间保留,其他元素不会占据它的位置。
    • 示例:position: relative; top: 10px; 会使元素从其正常位置向下移动 10 像素。
  3. absolute

    • 元素相对于最近的已定位的祖先元素进行定位(如果祖先元素没有定位,则相对于初始包含块,即浏览器窗口)。
    • 使用 toprightbottomleft 属性进行精确定位。
    • 元素脱离文档流,其他元素会占据它原来的位置。
    • 示例:position: absolute; top: 50px; left: 100px; 会使元素相对于最近的已定位祖先元素的左上角移动。
  4. fixed

    • 元素相对于浏览器窗口进行定位,不会随着页面滚动而移动。
    • 使用 toprightbottomleft 属性进行精确定位。
    • 元素脱离文档流,其他元素会占据它原来的位置。
    • 示例:position: fixed; top: 0; right: 0; 会将元素固定在浏览器窗口的右上角。
  5. sticky

    • 元素在正常文档流中(static)和固定定位(fixed)之间切换,具体取决于滚动位置。
    • 它是相对于最近的滚动祖先元素进行定位。
    • 当用户滚动页面时,如果满足指定的偏移位置(通过 toprightbottomleft 属性设置),元素会变为固定定位,直到其滚动容器达到定义的阈值。
    • 示例:position: sticky; top: 20px; 会使元素在其父容器的顶部距离 20 像素时变为固定定位。

总结:

  • static: 默认定位,不脱离文档流。
  • relative: 相对定位,移动元素但保留原始空间。
  • absolute: 绝对定位,相对于最近的已定位祖先元素,脱离文档流。
  • fixed: 固定定位,相对于浏览器窗口,脱离文档流。
  • sticky: 粘性定位,在 staticfixed 之间切换。

再复习一下Flex布局

Flexbox 的基本概念

1. Flex 容器和 Flex 项目

  • Flex 容器 (Flex Container):使用 display: flexdisplay: inline-flex 创建的容器。
  • Flex 项目(Flex Items):Flex 容器内的直接子元素。

2. 主轴和交叉轴

  • 主轴 (Main Axis):Flex 容器的主轴默认是水平的,可以通过 flex-direction 改变方向。
  • 交叉轴(Cross Axis):垂直于主轴的轴。

Flex 容器的属性

  1. display

    • flex:定义一个块级 Flex 容器。
    • inline-flex:定义一个内联级 Flex 容器。
  2. flex-direction

    • 决定主轴的方向。
    • 取值:row(默认值,水平,从左到右)、row-reverse(水平,从右到左)、column(垂直,从上到下)、column-reverse(垂直,从下到上)。
  3. flex-wrap

    • 决定 Flex 项目是否换行。
    • 取值:nowrap(默认值,不换行)、wrap(换行)、wrap-reverse(换行,反方向)。
  4. justify-content

    • 决定项目在主轴上的对齐方式。
    • 取值:flex-start(默认值,起始对齐)、flex-end(结束对齐)、center(居中对齐)、space-between(两端对齐,项目之间的间隔相等)、space-around(项目两侧的间隔相等)、space-evenly(项目之间和项目与边框的间隔相等)。
  5. align-items

    • 决定项目在交叉轴上的对齐方式。
    • 取值:flex-start(起始对齐)、flex-end(结束对齐)、center(居中对齐)、baseline(基线对齐)、stretch(默认值,拉伸对齐)。
  6. align-content

    • 决定多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
    • 取值:flex-startflex-endcenterspace-betweenspace-aroundstretch(默认值)。

Flex 项目的属性

  1. order

    • 决定项目的排列顺序,默认值为 0,可以是负值。
  2. flex-grow

    • 决定项目的放大比例,默认值为 0,表示如果有多余空间也不放大。
  3. flex-shrink

    • 决定项目的缩小比例,默认值为 1,表示如果空间不足,该项目将缩小。
  4. flex-basis

    • 决定项目的初始大小,默认值为 auto
  5. align-self

    • 允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性。
    • 取值:auto(默认值,继承 align-items 的值)、flex-startflex-endcenterbaselinestretch
相关推荐
y***5488几秒前
前端构建工具扩展,Webpack插件开发
前端·webpack·node.js
4***14901 分钟前
前端构建工具多页面配置,Webpack与Vite
前端·webpack·node.js
网络点点滴11 分钟前
标签的ref属性
前端·javascript·vue.js
天若有情6731 小时前
前端 vs 后端:入行软件行业,我该如何选择?哪个更“简单”?
前端·后端·软件开发·职业·就业·选择
小画家~1 小时前
第二十八:golang Time.time 时间格式返回定义结构体
java·前端·golang
Cobyte2 小时前
17. Vue3 业务组件库按需加载的实现原理
前端·javascript·vue.js
粥里有勺糖2 小时前
视野修炼-技术周刊第127期 | Valdi
前端·javascript·github
前端世界2 小时前
从零搭建 ASP.NET 单文件 Web 项目:一个能真用的 BookShop 管理页实战
服务器·前端·asp.net
码上成长2 小时前
Vue Router 3 升级 4:写法、坑点、兼容一次讲透
前端·javascript·vue.js
BBB努力学习程序设计2 小时前
响应式页面设计与实现:让网站适配所有设备的艺术
前端·html