当前位置: 首页 > news >正文

纯CSS锚点过渡效果,CSS3的属性scroll-behavior: smooth;

今天有小伙伴询问如何在锚点中加入过渡效果,按照惯性思维会想到scrollTop或者其他可以实现的插件,有其他小伙伴提到了scroll-behavior: smooth然后查了一下这个样式功能感觉还可以:

scroll-behavior属性包括: smooth | auto;
auto: 默认值,表示滚动框立即滚动到指定位置。 smooth 表示允许滚动时采用平滑过渡,而不知直接滚动到相应位置,最常见的比如回到顶部按钮和锚点。

然后就在caniuse查了下浏览器支持情况:在这里插入图片描述
非IE情况下兼容都还不错。
话不多说直接上例子:

锚点滚动

<!DOCTYPE html>
<html lang="en">

<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>纯CSS的锚点滚动特效</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    ul,
    li {
      list-style: none;
    }

    a {
      text-decoration: none;
    }

    html,
    body {
      position: relative;
      width: 100%;
      height: 100%;
      overflow: hidden;
    }

    .box {
      width: 100%;
      height: 100%;
      display: flex;
      overflow: hidden;
    }

    /* 左边 */
    .left {
      width: 180px;
    }

    .left .anchor {
      display: block;
      width: 100%;
      line-height: 60px;
      text-align: center;
      font-size: 18px;
    }

    /* 右边 */
    .right {
      width: calc(100% - 180px);
      height: 100%;
      overflow: auto;
      /* 主要CSS内容 平滑滚动 scroll-behavior: smooth */
      /* 注意:要在需要滚动的地方加该属性 */
      scroll-behavior: smooth;
    }

    .right .main-box {
      width: 100%;
      height: 500px;
      box-sizing: border-box;
      padding: 20px 10px;
      border: 3px solid #666;
    }
  </style>
</head>

<body>
  <div class="box">
    <div class="left">
      <a class="anchor" href="#li1">这是1个li</a>
      <a class="anchor" href="#li2">这是2个li</a>
      <a class="anchor" href="#li3">这是3个li</a>
      <a class="anchor" href="#li4">这是4个li</a>
      <a class="anchor" href="#li5">这是5个li</a>
      <a class="anchor" href="#li6">这是6个li</a>
    </div>
    <ul class="right">
      <li class="main-box" id="li1">这是第1个li</li>
      <li class="main-box" id="li2">这是第2个li</li>
      <li class="main-box" id="li3">这是第3个li</li>
      <li class="main-box" id="li4">这是第4个li</li>
      <li class="main-box" id="li5">这是第5个li</li>
      <li class="main-box" id="li6">这是第6个li</li>
    </ul>
  </div>
</body>

</html>

lable和input的焦点

<!DOCTYPE html>
<html lang="en">

<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>Document</title>
  <style>
    .demo {
      padding-top: 20px;
      padding-bottom: 20px;
      text-align: center;
    }

    .box {
      width: 20em;
      height: 10em;
      line-height: 10em;
      /* 注意:要在需要滚动的地方加该属性 */
      scroll-behavior: smooth;
      overflow: hidden;
      margin: auto;
    }

    .list {
      height: 100%;
      background: #ddd;
      text-align: center;
      position: relative;
      font-size: 8em;
    }

    .list>input {
      position: absolute;
      top: 0;
      height: 100%;
      width: 1px;
      border: 0;
      padding: 0;
      margin: 0;
      clip: rect(0 0 0 0);
    }

    .click {
      display: inline-block;
      width: 2em;
      height: 2em;
      line-height: 2em;
      border: 1px solid #ccc;
      background: #f7f7f7;
      color: #333;
      font-size: 1em;
      font-weight: bold;
      text-align: center;
      text-decoration: none;
      cursor: pointer;
      margin: 0.5em;
    }

    .bg-orange {
      background-color: #fccba2;
    }

    .bg-olive {
      background-color: #b9f2d8;
    }

    .bg-blue {
      background-color: #89c6fc;
    }
  </style>
</head>

<body>
  <!-- 使用label和input的切换demo -->
  <div class="demo">
    <div class="box">
      <div class="list"><input id="one" readonly />1</div>
      <div class="list bg-blue"><input id="two" readonly />2</div>
      <div class="list bg-olive"><input id="three" readonly />3</div>
      <div class="list bg-orange"><input id="four" readonly />4</div>
    </div>
    <div>
      <label class="click" for="one">1</label>
      <label class="click" for="two">2</label>
      <label class="click" for="three">3</label>
      <label class="click" for="four">4</label>
    </div>
  </div>
</body>

</html>

置顶

置顶操作就不写demo了给一些代码片段,原理与上方一样
html部分

<html id="top">
  <body>
     <a href="#top">跳转到页面顶部</a>
  </body>
</html>

css部分

<style>
html {
	scroll-behavior: smooth;
}
</style>

注意:要在需要滚动的地方加该属性


以上内容就是对CSS3属性scroll-behavior: smooth的描述,如有问题欢迎留言讨论

相关文章:

  • 手撕前端面试题【javascript~文件扩展名、分隔符、单向绑定、判断版本、深浅拷贝、内存泄露等】
  • 谷粒学苑项目后台管理系统
  • 数据分析之Numpy学习
  • es6的学习
  • CDGA|商业银行要强化数据风险管理
  • 怎么进行你的代码优化 编译器怎么优化你的代码
  • vue实战-Search模块开发(大体步骤)
  • C#基础--特殊的集合
  • 吴恩达2022机器学习_第二部分高级学习算法笔记
  • DGL教程
  • FAST-LIO2代码解析(五)
  • 苦卷28天,阿里P8给我的Alibaba面试手册,终于成功踹开字节大门
  • Vue:v-on、v-bind、v-model、@click、:model用法以及区别(附代码实例)
  • 手写Sping IOC(基于Setter方法注入)
  • 一、SpringBoot前置(从0搭建Maven项目)
  • 网络传输文件的问题
  • [NodeJS] 关于Buffer
  • 《Java编程思想》读书笔记-对象导论
  • eclipse(luna)创建web工程
  • EventListener原理
  • java正则表式的使用
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Magento 1.x 中文订单打印乱码
  • python 装饰器(一)
  • 开源SQL-on-Hadoop系统一览
  • 盘点那些不知名却常用的 Git 操作
  • 前端性能优化--懒加载和预加载
  • 前嗅ForeSpider教程:创建模板
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 小程序01:wepy框架整合iview webapp UI
  • 用jquery写贪吃蛇
  • Semaphore
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​人工智能书单(数学基础篇)
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #1014 : Trie树
  • #QT(串口助手-界面)
  • #单片机(TB6600驱动42步进电机)
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)ObjectiveC 深浅拷贝学习
  • (转)创业的注意事项
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ./configure、make、make install 命令
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 表达式计算:Expression Evaluator
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [BZOJ1089][SCOI2003]严格n元树(递推+高精度)