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

这篇具有很好参考价值的文章主要介绍了【CSS】面试官问我视差滚动怎么实现?我懵了...。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🐱 个人主页:不叫猫先生
🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀!
💫优质专栏:vue3从入门到精通、TypeScript从入门到实践
📢 资料领取:前端进阶资料可以找我免费领取
🔥 摸鱼学习交流:我们的宗旨是在工作中摸鱼,摸鱼中进步,期待大佬一起来摸鱼(文末有我wx或者私信)。

视差滚动

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

1、background-attachment

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

属性值 含义
fixed 背景相对于视口固定。即使一个元素拥有滚动机制,背景也不会随着元素的内容
local 背景相对于元素的内容固定。如果一个元素拥有滚动机制,背景将会随着元素的内容滚动,并且背景的绘制区域和定位区域是相对于可滚动的区域而不是包含他们的边框。
scroll 背景相对于元素本身固定,而不是随着它的内容滚动(对元素边框是有效的)。

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

<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>

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

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轴移动位移不同,产生视觉差。

<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>

具体实现效果如下:
【CSS】面试官问我视差滚动怎么实现?我懵了...

🌟好书推荐

《深入理解设计模式》链接直达
本书系统介绍了23种设计模式,根据具体的实例形象化、具体化地进行了代码的编写和详细讲解,让那些本来对设计模式不太了解、一知半解、只有概念的读者,彻底了解和掌握常用的设计模式使用场景及使用方式,并掌握每个设计模式的UML结构和描绘方式。本书共23章,包括认识设计模式、单例模式、工厂模式、建造者模式、原型模式、适配器模式、装饰器模式、外观模式、桥接模式、组合模式、享元模式、代理模式、策略模式、命令模式、状态模式、模板方法模式、备忘录模式、中介者模式、观察者模式、迭代器模式、责任链模式、访问者模式、解释器模式。通过以上的知识,让你从模式小白直接升级为模式大神!本书所需源代码,均可通过本书配套下载链接获得。
【CSS】面试官问我视差滚动怎么实现?我懵了...文章来源地址https://www.toymoban.com/news/detail-454921.html

到了这里,关于【CSS】面试官问我视差滚动怎么实现?我懵了...的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 面试官问我为啥B+树一般都不超过3层?3层B+树能存多少数据?redo log与binlog的两阶段提交?

    我今天逛了一下CSDN,又发现了一条显眼的数据,大概是说 3层B+树足以容纳2000w条数据 。我当时就蒙了,3层对2000w,心想这B+树也太厉害了吧,由此勾起了我求知的欲望,我一定要搞明白他这2000w是怎么来的。 MySQL的执行流程如下图 前提: binlog本身不具备crash-safe能力 ,所以

    2024年02月11日
    浏览(41)
  • 想要吸引用户的眼球?试试CSS视差滚动,给你带来超级视觉盛宴

        🎬 江城开朗的豌豆 :个人主页  🔥 个人专栏  :《 VUE 》 《 javaScript 》  📝  个人网站  :《 江城开朗的豌豆🫛 》  ⛺️ 生活的理想,就是为了理想的生活 ! 目录  ⭐  专栏简介  📘  文章引言 一、是什么 二、实现方式 background-attachment transform:translate3D ⭐  写

    2024年02月07日
    浏览(38)
  • selenium--面试官问元素定位不到怎么办?工作中还在为元素定位不到而烦恼?看这一文就够了--内附解析跟代码解决案例

    from selenium import webdriver fox = webdriver.Firefox() fox.get(“https://qzone.qq.com/”) fox.find_element_by_id(‘switcher_plogin’).click() fox.find_element_by_id(‘u’).send_keys(‘清安无别事’) fox.find_element_by_id(‘p’).send_keys(‘欢迎入坑’) fox.quit() 看到此处代码,如果你想直接去定位,得到的就是: 所以

    2024年04月25日
    浏览(49)
  • selenium--面试官问元素定位不到怎么办?工作中还在为元素定位不到而烦恼?看这一文就够了--内附解析跟代码解决案例!让面试官对你刮目相看

    未切换句柄 ===== 切换句柄是什么意思呢。就是你从百度搜索到下面例子的京东界面,浏览器中打开了两个网页,你需要从百度的界面跳转到这么界面。如下: 这里元素定位输入框是id=key但是你会发现定位不到。 from time import sleep from selenium import webdriver fox = webdriver.Firefox() f

    2024年04月13日
    浏览(57)
  • selenium--面试官问元素定位不到怎么办?工作中还在为元素定位不到而烦恼?看这一文就够了--内附解析跟代码解决案例(1)

    fox = webdriver.Firefox() fox.get(“https://www.baidu.com”) fox.find_element_by_id(“kw”).send_keys(‘清安无别事’) fox.find_element_by_id(“su”).click() fox.find_element_by_xpath(‘/html/body/div[1]/div[4]/div[1]/div[3]/div[3]/h3/a/em’).click() sleep(2) fox.quit() 这里举例我想定位2021年01月_清欢无别事_这条超链接内容并

    2024年04月08日
    浏览(98)
  • 【CSS】旋转中的视差效果

    在这个示例中,我们使用 grid-template 属性来定义网格的结构。通过使用字符串,我们指定了网格的行和列,以及它们的名称。每一行和列都可以具有不同的大小和单位。 通过给每个网格项设置相应的 grid-area 值,我们将它们放置在指定的区域中。这里的区域名称对应于 grid-

    2024年02月13日
    浏览(60)
  • css 100vw、100vh出现滚动条怎么解决

    要搞清楚这个问题首先要知道这两个单位(vw、vh)是什么意思。vw(vh)是相对于浏览器的视口宽度(高度)的,100vh等于浏览器的视口宽度,设置vw和vh会在视口发生变化时重新计算宽度和高度。 那么问题来了,什么是浏览器的视口,来看下面一张图: 上面这张图中,红色线

    2024年01月25日
    浏览(53)
  • 一个资深测试工程师面试一来就问我这些题目

    德玛作为一个已经工作有10年经验的测试工程师,其间也辗转了几个大的互联网公司,虽然确实缺少了一些稳定性,但同时也积累了一些面试的经验,不才分享一些给大家。那么主要是针对测试工程师的一些总结,对于其他的工种,我可能会在别的文章中去总结一些面试技巧

    2024年02月09日
    浏览(50)
  • 【面试】面试官问的几率较大的网络安全面试题

    攻击者在HTTP请求中注入恶意的SQL代码,服务器使用参数构建数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。 用户登录,输入用户名 lianggzone,密码 ‘ or ‘1’=’1 ,如果此时使用参数构造的方式,就会出现 select * from user where name = ‘lianggzone’ and password = ‘’ or

    2024年02月01日
    浏览(51)
  • 面试官问:kafka为什么如此之快?

    天下武功,唯快不破。同样的,kafka在消息队列领域,也是非常快的,这里的块指的是kafka在单位时间搬运的数据量大小,也就是吞吐量,下图是搬运网上的一个性能测试结果,在同步发送场景下,单机Kafka的吞吐量高达17.3w/s,不愧是高吞吐量消息中间件的行业老大。 那究竟

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包