Wang's blog Wang's blog
首页
  • 前端文章

    • HTML教程
    • CSS
    • JavaScript
  • 前端框架

    • Vue
    • React
    • VuePress
    • Electron
  • 后端技术

    • Npm
    • Node
    • TypeScript
  • 编程规范

    • 规范
  • 我的笔记
  • Git
  • GitHub
  • VSCode
  • Mac工具
  • 数据库
  • Google
  • 服务器
  • Python爬虫
  • 前端教程
更多
收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Wang Mings

跟随大神,成为大神!
首页
  • 前端文章

    • HTML教程
    • CSS
    • JavaScript
  • 前端框架

    • Vue
    • React
    • VuePress
    • Electron
  • 后端技术

    • Npm
    • Node
    • TypeScript
  • 编程规范

    • 规范
  • 我的笔记
  • Git
  • GitHub
  • VSCode
  • Mac工具
  • 数据库
  • Google
  • 服务器
  • Python爬虫
  • 前端教程
更多
收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • CSS

    • 常用css
    • sass用法
    • viewport详解
    • css各种布局
    • a标签小妙用
    • flex布局语法
    • CSS-function汇总
    • CSS变量的使用
    • css使用小技巧
    • css重置样式表
    • CSS之animation动画
    • 隐藏元素的方法
    • 项目上使用微标
    • CSS之transition过渡
    • flex布局案例-基础
    • flex布局案例-骰子
    • css模块化实现教程
    • Flex布局教程语法篇
    • 粘性定位sticky的用途
    • flex布局案例-圣杯布局
    • flex布局案例-网格布局
    • css实现滚动视觉差效果
      • 什么是视差滚动?
      • 实现方式
      • background-attachment: fixed
      • transform: translate3d
    • flex布局案例-输入框布局
    • 伪元素表单控件默认样式重置
    • 水平垂直居中的几种方式-案例
    • 从box-sizing属性入手,了解盒子模型
    • 文字在一行或多行时超出显示省略号
    • 如何根据系统主题自动响应CSS深色模式
    • 「css技巧」使用hover和attr()定制悬浮提示-demo
    • 「布局技巧」图片未加载前自动撑开元素高度
  • Npm

  • Vue

  • HTML

  • Node

  • Yaml

  • React

  • 框架

  • 规范

  • Electron

  • JS演示

  • VuePress

  • JavaScript

  • TypeScript

  • 微信小程序

  • TypeScript-axios

  • 前端
  • CSS
wangmings
2022-07-19
目录

css实现滚动视觉差效果

# css实现滚动视觉差效果

# 什么是视差滚动?

视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果。

视差效果, 最初是一个天文术语。当我们看着繁星点点的天空时,较远的恒星运动较慢,而较近的恒星运动较快。当我们坐在车里看着窗外时,我们会有相同的感觉。远处的山脉似乎没有动,附近的稻田很快过去了。许多游戏使用视差效果来增加场景的三维度。说的简单点就是,滚动屏幕时,网页中元素的位置会发生变化。但是不同的元素位置变化的速度不同,导致网页中产生分层元素的错觉。

# 实现方式

css 中主要有两种实现方式:

  • background-attachment: fixed

  • transform: translate3d

# background-attachment: fixed

background-attachment CSS 属性决定背景图像的位置是在视口内固定,还是随着包含它的区块滚动

它一共有三个属性:

  • fixed: 键字表示背景相对于视口固定。即使一个元素拥有滚动机制,背景也不会随着元素的内容滚动, 而是相对可视窗口固定。
  • local: 此关键字表示背景相对于元素的内容固定。如果一个元素拥有滚动机制,背景将会随着元素的内容滚动。
  • scroll: 此关键字表示背景相对于元素本身固定, 而不是随着它的内容滚动。

下面我们使用 background-attachment: fixed 来实现视差滚动,看一下示例:

# transform: translate3d

这里解释下使用transform: translate3d来实现视差滚动的原理:

  1. 给容器设置上transform-style: preserve-3d和perspective: xpx,那么处于这个容器下的子元素就会处于 3D 空间中;

  2. 给子元素分别设置不同的transform: translateZ(),这时不同子元素在 3D Z 轴方向距离屏幕的距离也就不一样;

  3. 滚动滚动条,由于子元素设置了不同的transform: translateZ(),那么他们滚动的上下距离translateY相对屏幕(我们的眼睛),也是不一样的,这就达到了滚动视差的效果。

总结下来就是: 父容器设置transform-style: preserve-3d和perspective: xpx,子元素设置不同的transform: translateZ()

注:这里我们用到了transform: translateZ() 负数,就是元素相对我们的视觉变远了,它就变小了,这时想要同等大小的话,我们就可以使用salce() 放大他, 就看起来一样, Z轴的距离就不一样了,这样滚动起来就有视觉差效果了

参考文章: 滚动视差让你不相信“眼见为实” (opens new window)

编辑 (opens new window)
flex布局案例-网格布局
flex布局案例-输入框布局

← flex布局案例-网格布局 flex布局案例-输入框布局→

最近更新
01
theme-vdoing-blog博客静态编译问题
09-16
02
搜索引擎
07-19
03
友情链接
07-19
更多文章>
Theme by Vdoing | Copyright © 2019-2022 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式