前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【CSS】面试官问我视差滚动怎么实现?我懵了...

【CSS】面试官问我视差滚动怎么实现?我懵了...

原创
作者头像
coldPlayer
修改2023-11-10 08:40:27
2060
修改2023-11-10 08:40:27
举报
文章被收录于专栏:coldPlayer的前端专栏

视差滚动

视差滚动是一种效果,能够使不同层次的元素以不同的速度进行滚动,从而产生了视觉上的深度感和动态效果。可以通过两种方式来实现:background-attachmenttransform:translate3D

1、background-attachment

background-attachment:决定背景图像的位置是在视口内固定,或者随着包含它的区块滚动。

它的属性值的含义如下:

属性值

含义

fixed

背景相对于视口固定。即使一个元素拥有滚动机制,背景也不会随着元素的内容

local

背景相对于元素的内容固定。如果一个元素拥有滚动机制,背景将会随着元素的内容滚动,并且背景的绘制区域和定位区域是相对于可滚动的区域而不是包含他们的边框。

scroll

背景相对于元素本身固定,而不是随着它的内容滚动(对元素边框是有效的)。

对父元素css_demo设置overflow: scroll,当元素内容超出页面时滚动。子元素word随着页面滚动显示,对子元素bg设置background-attachment: fixed,使其在当前视口固定。

代码语言:javascript
复制
<template>
    <div class="css_demo">
        <div class="word">视差滚动</div>
        <div class="bg bg1"></div>
        <div class="word">二</div>
        <div class="bg bg2"></div>
        <div class="word">三</div>
        <div class="bg bg3"></div>
        <div class="word">四</div>
        <div class="bg bg4"></div>
        <div class="word">五</div>
        <div class="bg bg5"></div>
        <div class="word">六</div>
        <div class="bg bg6"></div>
        <div class="word">七</div>
        <div class="bg bg7"></div>
        <div class="word">八</div>
        <div class="bg bg8"></div>
        <div class="word">九</div>
        <div class="bg bg9"></div>
    </div>
</template>
<style lang='scss' scoped>
.css_demo {
    width: 100%;
    height: 100%;
    overflow: scroll;
    .bg {
        background-position: center center;
        background-size: cover;
        background-attachment: fixed;
        &.bg1 {
            background-image: url("/src/assets/img/1.jpeg");
        }
        &.bg2 {
            background-image: url("/src/assets/img/2.webp");
        }
        &.bg3 {
            background-image: url("/src/assets/img/3.webp");
        }
        &.bg4 {
            background-image: url("/src/assets/img/4.webp");
        }
        &.bg5 {
            background-image: url("/src/assets/img/5.webp");
        }
        &.bg6 {
            background-image: url("/src/assets/img/6.webp");
        }
        &.bg7 {
            background-image: url("/src/assets/img/7.webp");
        }
        &.bg8 {
            background-image: url("/src/assets/img/8.webp");
        }
        &.bg9 {
            background-image: url("/src/assets/img/9.webp");
        }
    }
}
div {
    height: 100%;
    width: 100%;
    background: rgba(0, 0, 0, 0.1);
    color: #fff;
    line-height: 100vh;
    text-align: center;
    font-size: 20vh;
}
</style>

实现效果如下:

在这里插入图片描述
在这里插入图片描述

2、transform:translate3D

涉及到的CSS属性如下:

  • transform 可以对元素进行变换(2d/3d),包括平移 translate、旋转 rotate、缩放 scale等
  • perspective 指定了观察者与 z=0 平面的距离,使具有三维位置变换的元素产生透视效果。z>0 的三维元素比正常大,而 z<0 时则比正常小,大小程度由该属性的值决定。元素涉及 3d 变换时,perspective可以让我们眼睛看到 3d 立体效果,有空间感。
  • transform-style 设置元素的子元素是位于 3D 空间中还是平面中。

通过设置transform-styleperspective,使该容器的子元素处在3D空间中,然后设置transform: translateZ使物体在滚动的时候在Y轴移动位移不同,产生视觉差。

代码语言:javascript
复制
<template>
    <div class="transform_container">
        <div class="container">
            <div class="one">一一一一</div>
            <div class="two">二二二二</div>
            <div class="three">三三三三三</div>
        </div>
    </div>
</template>
<style scoped lang="scss">
.transform_container {
    perspective: 1px;
    transform-style: preserve-3d;
    height: 100%;
    overflow-y: scroll;
    overflow-x: hidden;
}
.container {
    transform-style: preserve-3d;
    height: 150%;
    .one {
        font-weight: 600;
        transform: translateZ(-1px);
        position: absolute;
        top: 20%;
        left: 20%;
    }
    .two {
        font-weight: 600;
        transform: translateZ(-2px);
        position: absolute;
        top: 20%;
        left: 35%;
    }
    .three {
        font-weight: 600;
        transform: translateZ(-3px);
        position: absolute;
        top: 20%;
        left: 50%;
    }
}
</style>

具体实现效果如下:

在这里插入图片描述
在这里插入图片描述

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 视差滚动
    • 1、background-attachment
      • 2、transform:translate3D
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档