位置: IT常识 - 正文

CSS: overflow-anchor 固定滚动到底部,随着页面内容增多滚动条自己滚动展示最新的内容

编辑:rootadmin
CSS: overflow-anchor 固定滚动到底部,随着页面内容增多滚动条自己滚动展示最新的内容

推荐整理分享CSS: overflow-anchor 固定滚动到底部,随着页面内容增多滚动条自己滚动展示最新的内容,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

overflow-anchorCSS中的属性相对较新,2017 年首次推出 Chrome ¹,2019 年推出 Firefox,现在 Edge在 2020 年推出 Chrome 过渡。幸运的是,它的使用在很大程度上是一种增强。这个想法是浏览器在默认情况下确实尝试不允许位置移动。然后,如果您不喜欢它的处理方式,您可以使用 将其关闭。所以一般来说,你从不碰它。overflow-anchor 但正如你可能怀疑的那样,我们可以利用这个小美来做一点 CSS 小把戏。即使我们添加新内容,我们也可以强制滚动元素保持固定在底部。

您需要检测何时使用 JavaScript 添加新内容并将滚动元素强制到底部。这是一种MutationObserver在 JavaScript 中使用的技术来监视新内容并强制滚动:

const scrollingElement = document.getElementById("scroller");const config = { childList: true };const callback = function (mutationsList, observer) { for (let mutation of mutationsList) { if (mutation.type === "childList") { window.scrollTo(0, document.body.scrollHeight); } }};const observer = new MutationObserver(callback);observer.observe(scrollingElement, config);

但我发现一个纯 CSS 的解决方案更有吸引力!上面的版本有一些我们稍后会介绍的用户体验缺陷。

这里的诀窍是浏览器默认已经做了滚动锚定。但是浏览器试图做的不是改变你的页面。因此,当添加可能会改变页面视觉位置的新内容时,他们会尝试防止这种情况发生。在这种不寻常的情况下,我们有点想要相反的东西。我们希望页面卡在页面底部并让视觉页面在视觉上移动,因为它被迫保持卡在底部。

CSS: overflow-anchor 固定滚动到底部,随着页面内容增多滚动条自己滚动展示最新的内容

下面是这个技巧的工作原理。首先是滚动父元素中的一些 HTML:

<div id="scroller"> <!-- new content dynamically inserted here --> <div id="anchor"></div></div>

所有元素自然都有一个overflow-anchor: auto;,这意味着当它们在屏幕上时,它们会试图阻止页面移动,但我们可以使用overflow-anchor: none;. 所以诀窍是针对所有动态插入的内容并将其关闭:

#scroller * { overflow-anchor: none;}

然后仅强制该锚元素具有滚动锚定,仅此而已:

#anchor { overflow-anchor: auto; height: 1px;}

现在,一旦该锚在页面上可见,浏览器将被迫将该滚动位置固定到它,并且由于它是该滚动元素中的最后一件事,因此保持固定在底部。

<div id="scroller"> <!-- new content dynamically inserted here --> <div id="anchor"></div></div><style>#scroller * { overflow-anchor: none;}#anchor { overflow-anchor: auto; height: 1px;}html { font-family: system-ui, sans-serif;}body { background-color: #7FDBFF; /* In case you need to kick off effect immediately, this plus JS */ /* height: 100.001vh; */}.message { padding: 0.5em; border-radius: 1em; margin: 0.5em; line-height: 1.1em; background-color: white;}</style><script>let scroller = document.querySelector('#scroller');let anchor = document.querySelector('#anchor');// https://ajaydsouza.com/42-phrases-a-lexophile-would-love/let messages = [ 'I wondered why the baseball was getting bigger. Then it hit me.', 'Police were called to a day care, where a three-year-old was resisting a rest.', 'Did you hear about the guy whose whole left side was cut off? He’s all right now.', 'The roundest knight at King Arthur’s round table was Sir Cumference.', 'To write with a broken pencil is pointless.', 'When fish are in schools they sometimes take debate.', 'The short fortune teller who escaped from prison was a small medium at large.', 'A thief who stole a calendar… got twelve months.', 'A thief fell and broke his leg in wet cement. He became a hardened criminal.', 'Thieves who steal corn from a garden could be charged with stalking.', 'When the smog lifts in Los Angeles , U. C. L. A.', 'The math professor went crazy with the blackboard. He did a number on it.', 'The professor discovered that his theory of earthquakes was on shaky ground.', 'The dead batteries were given out free of charge.', 'If you take a laptop computer for a run you could jog your memory.', 'A dentist and a manicurist fought tooth and nail.', 'A bicycle can’t stand alone; it is two tired.', 'A will is a dead giveaway.', 'Time flies like an arrow; fruit flies like a banana.', 'A backward poet writes inverse.', 'In a democracy it’s your vote that counts; in feudalism, it’s your Count that votes.', 'A chicken crossing the road: poultry in motion.', 'If you don’t pay your exorcist you can get repossessed.', 'With her marriage she got a new name and a dress.', 'Show me a piano falling down a mine shaft and I’ll show you A-flat miner.', 'When a clock is hungry it goes back four seconds.', 'The guy who fell onto an upholstery machine was fully recovered.', 'A grenade fell onto a kitchen floor in France and resulted in Linoleum Blownapart.', 'You are stuck with your debt if you can’t budge it.', 'Local Area Network in Australia : The LAN down under.', 'He broke into song because he couldn’t find the key.', 'A calendar’s days are numbered.',];function randomMessage() { return messages[(Math.random() * messages.length) | 0];}function appendChild() { let msg = document.createElement('div'); msg.className = 'message'; msg.innerText = randomMessage(); scroller.insertBefore(msg, anchor);}setInterval(appendChild, 1000);// To kick off effect immediately, this plus CSS// document.scrollingElement.scroll(0, 1);</script>

这里有两个小警告......

请注意,锚必须有一定的大小。我们在height这里使用以确保它不是没有大小的折叠/空元素,这会阻止它工作。为了使滚动锚定起作用,页面必须至少滚动一次才能开始。

第二个更难。一种选择是根本不处理它,您可以等待用户滚动到底部,效果从那里开始起作用。实际上这很好,因为如果他们从底部滚动,效果就会停止工作,这就是你想要的。在上面的 JavaScript 版本中,请注意即使您尝试向上滚动,它也会迫使您进入底部,这就是 Ryan 的意思,这并不是一件容易正确的事情。

如果您需要立即启动效果,诀窍是让滚动元素立即可滚动,例如:

body { height: 100.001vh;}

然后立即触发一个非常轻微的滚动:

document.scrollingElement.scroll(0, 1);

这应该可以解决问题。这些行可在上面的演示中取消注释并尝试。

本文链接地址:https://www.jiuchutong.com/zhishi/293130.html 转载请保留说明!

上一篇:GPT模型总结【模型结构及计算过程_详细说明】(gpt详解)

下一篇:swiper获取当前数组滑动的inex(vue)(swiper.js常用功能)

  • 抖音@别人会被好友知道吗(抖音@别人会被别的好友知道吗)

    抖音@别人会被好友知道吗(抖音@别人会被别的好友知道吗)

  • 红米k40打字声音怎么关(红米k40手机打字声音关闭)

    红米k40打字声音怎么关(红米k40手机打字声音关闭)

  • ios14怎么在桌面显示时间(ios14怎么在桌面上放照片)

    ios14怎么在桌面显示时间(ios14怎么在桌面上放照片)

  • 微信钱包的查看方法是什么(微信钱包查看密码)

    微信钱包的查看方法是什么(微信钱包查看密码)

  • 苹果手机抹掉后怎么激活(苹果手机抹掉后微信数据怎样恢复)

    苹果手机抹掉后怎么激活(苹果手机抹掉后微信数据怎样恢复)

  • 华为p30尺寸是多少(华为p30手机尺寸长,宽多少几寸)

    华为p30尺寸是多少(华为p30手机尺寸长,宽多少几寸)

  • 华为荣耀20pro手机相册拼图怎么拼(华为荣耀20pro手机怎么开空调)

    华为荣耀20pro手机相册拼图怎么拼(华为荣耀20pro手机怎么开空调)

  • 电钻充电器绿灯一直亮(电钻充电器绿灯不亮怎么回事)

    电钻充电器绿灯一直亮(电钻充电器绿灯不亮怎么回事)

  • 手机可以连接电视吗(手机可以连接电脑的wifi吗)

    手机可以连接电视吗(手机可以连接电脑的wifi吗)

  • 回收站中的文件可以改名吗(如何还原回收站中的文件)

    回收站中的文件可以改名吗(如何还原回收站中的文件)

  • 光纤的特点(下列哪个不是光纤的特点)

    光纤的特点(下列哪个不是光纤的特点)

  • 为什么word里面照片只显示一行(为什么word里面打字后面的字会消失)

    为什么word里面照片只显示一行(为什么word里面打字后面的字会消失)

  • 微信黑夜模式在哪里关闭(微信黑夜模式在哪里开苹果手机)

    微信黑夜模式在哪里关闭(微信黑夜模式在哪里开苹果手机)

  • 微信投诉群群主可以看见吗(微信投诉群群主会怎么样)

    微信投诉群群主可以看见吗(微信投诉群群主会怎么样)

  • ipad迷你a2133是几代(ipad mini a2133是什么型号)

    ipad迷你a2133是几代(ipad mini a2133是什么型号)

  • 手机号拉黑了打电话提示什么(手机号拉黑了打电话提示关机吗)

    手机号拉黑了打电话提示什么(手机号拉黑了打电话提示关机吗)

  • 固态硬盘无法读取怎么办(固态硬盘无法读取什么原因)

    固态硬盘无法读取怎么办(固态硬盘无法读取什么原因)

  • 苹果手机apple id建议验证失败(苹果手机apple id无法退出登录)

    苹果手机apple id建议验证失败(苹果手机apple id无法退出登录)

  • 天猫小黑盒的加入规则(天猫小黑盒在哪儿)

    天猫小黑盒的加入规则(天猫小黑盒在哪儿)

  • 三星s10屏幕耐划吗(三星s10屏幕老化快不快)

    三星s10屏幕耐划吗(三星s10屏幕老化快不快)

  • reno2前置摄像头多少(opporeno2前置摄像头)

    reno2前置摄像头多少(opporeno2前置摄像头)

  • 为什么手机应用会停止运行(为什么手机应用很少,内存却满了)

    为什么手机应用会停止运行(为什么手机应用很少,内存却满了)

  • 删除朋友圈全部一起删怎么删(删除朋友圈全部消息怎么删)

    删除朋友圈全部一起删怎么删(删除朋友圈全部消息怎么删)

  • 华为网盘在哪里打开(华为的网盘在什么地方)

    华为网盘在哪里打开(华为的网盘在什么地方)

  • 旅游住宿有什么问题
  • 一般增值税怎么开票的
  • 什么情况下进项税额需要转出
  • 研发支出管理制度
  • 培训费的其他费用是什么
  • 个体经营所得税核定征收2023标准
  • 印花税票吧
  • 个人所得税怎么算公式是什么
  • 高新技术企业所得税减免怎么算
  • 企业租赁集体土地种植经济林如何补偿
  • 出口退税的发票怎么做账
  • 固定资产清理先提折旧再清理吗
  • 营改增后房产土地作价入股该如何做税务处理?
  • 公司成立后有哪些开支
  • 企业只有收入没有支出是否违规
  • 政府机关税号是1开头的吗
  • 清包工开票详细名称
  • 公司账户转入另一个公司的投资款怎么做账?
  • 资产增加,负债增加
  • 小规模纳税人建筑行业
  • 小规模财报是按年报吗
  • 2019年一般纳税人附加税减免政策
  • 委托加工物资成本计入
  • 商标续展费用入什么科目
  • 鸿蒙工具栏在哪里
  • 债券利息收入的分录
  • 成本核算的意义是什么
  • win10安装版u盘安装
  • OS X Yosemite系统怎么样 OS X Yosemite功能介绍
  • 小规模纳税人免征增值税的账务处理
  • laravel自动生成接口文档
  • win11触摸板不能用
  • directx安全吗
  • 日记账登记错了怎么办
  • php数组函数 菜鸟
  • 建筑业主营业务收入二级科目有哪些
  • 购买用友财务软件
  • 委托加工物资如何转入生产成本
  • framework core
  • 招聘退休人员北京宿管
  • php获取当前定位
  • 其他权益工具投资公允价值变动计入什么科目
  • 独立核算的分公司可以享受小微企业吗
  • 行政事业单位慰问外单位
  • 增值税退税怎么退
  • SQL Server 2008 R2 应用及多服务器管理
  • 生产设备改扩建会计分录
  • 税前扣除的意思
  • 主营业务成本包括哪些
  • 库存现金太多违反什么规定
  • 企业基建工程
  • 为取得固定资产而发生的什么支出可计入固定资产成本
  • 车辆购置税如何账务处理
  • 其他应交款 其他应付款
  • 为什么记账能省钱
  • 财务软件无形资产有哪些
  • 企业年度报告中的什么信息由企业选择是否向社会公示
  • mysql 的replace into实例详解
  • [视频]看科学家如何将纯净水变成金属
  • mac自带中文输入法
  • macbookpro如何语音输入
  • windows语音识别
  • 如何给win7系统升级
  • 在Linux下HTTPie工具的使用教程
  • win7删除文件
  • win8如何禁止电脑自动安装软件
  • win8系统咋样
  • 安卓音游吃音
  • android yield
  • opengl transform
  • js setTimeout opener的用法示例详解
  • 安卓系统休眠设置在哪
  • javascript中函数
  • 原生js实现ajax步骤
  • unity-3d
  • 手把手教你自己做菜
  • 东莞税务申报日期
  • 职工教育经费可以结转吗
  • 税务如何稽查
  • 浙江增值税发票勾选认证流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设