位置: 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常用功能)

  • icx41m倒置金相显微镜使用教程

    icx41m倒置金相显微镜使用教程

  • vivo手机怎么设置地震提示(vivo手机怎么设置桌面时间日期)

    vivo手机怎么设置地震提示(vivo手机怎么设置桌面时间日期)

  • 为什么对方微信封面是黑色(为什么对方微信头像换了我却看不到)

    为什么对方微信封面是黑色(为什么对方微信头像换了我却看不到)

  • 小米的息屏显示在哪里(小米开启息屏显示)

    小米的息屏显示在哪里(小米开启息屏显示)

  • 什么手机搭载了天玑1000(什么手机搭载了天机9000处理器)

    什么手机搭载了天玑1000(什么手机搭载了天机9000处理器)

  • 抖音的回关是什么意思(请问抖音回关是什么意思)

    抖音的回关是什么意思(请问抖音回关是什么意思)

  • 小米10没有呼吸灯,怎么知道来信息了(小米10没有呼吸灯怎么注意通知的)

    小米10没有呼吸灯,怎么知道来信息了(小米10没有呼吸灯怎么注意通知的)

  • 哔哩哔哩是什么样的网站(哔哩哔哩是什么平台,适合中学生吗)

    哔哩哔哩是什么样的网站(哔哩哔哩是什么平台,适合中学生吗)

  • oppor11怎么恢复闪充(oppor11怎么恢复照片)

    oppor11怎么恢复闪充(oppor11怎么恢复照片)

  • mqa52ch/a是什么版本(mqa52zaa是什么版本)

    mqa52ch/a是什么版本(mqa52zaa是什么版本)

  • 2kb的内存容量可以最多储存多少字(2kb内存最多储存多少个汉字)

    2kb的内存容量可以最多储存多少字(2kb内存最多储存多少个汉字)

  • 小爱同学 怎么关机(小爱同学怎么唤醒)

    小爱同学 怎么关机(小爱同学怎么唤醒)

  • 珍爱网账号异常是怎么回事(珍爱网账号异常怎么解决)

    珍爱网账号异常是怎么回事(珍爱网账号异常怎么解决)

  • opporenoace有红外吗(oppo reno ace 红外遥控)

    opporenoace有红外吗(oppo reno ace 红外遥控)

  • wifi是有线还是无线(wifi是有线还是无线怎么区分)

    wifi是有线还是无线(wifi是有线还是无线怎么区分)

  • win家庭版和专业版的区别(win家庭版专业版区别)

    win家庭版和专业版的区别(win家庭版专业版区别)

  • 微信收款信息如何共享(微信收款信息如何设置声音)

    微信收款信息如何共享(微信收款信息如何设置声音)

  • 苹果11怎么开启夜景模式(苹果11怎么开启电量百分比显示)

    苹果11怎么开启夜景模式(苹果11怎么开启电量百分比显示)

  • realmeq是什么牌子(realme是什么牌子是oppo吗)

    realmeq是什么牌子(realme是什么牌子是oppo吗)

  • 苹果x停产了吗(苹果x和苹果xs)

    苹果x停产了吗(苹果x和苹果xs)

  • 电脑待机密码怎么取消(电脑待机密码怎么设置win7)

    电脑待机密码怎么取消(电脑待机密码怎么设置win7)

  • 苹果短信回收站在哪(苹果短信回收站怎么没有了)

    苹果短信回收站在哪(苹果短信回收站怎么没有了)

  • 为什么三星s9卡顿严重(为什么三星s9卡不能用)

    为什么三星s9卡顿严重(为什么三星s9卡不能用)

  • 税盘维护费抵扣
  • 工会经费支付福利方案
  • 印花税5元贴花会计处理
  • 个税申报填写的工资是应发还是实发
  • 基本账户转到一类卡
  • 水果销售公司简介
  • 中小企业开业税务登记所需资料
  • 机动车丢失后怎么销户
  • 业务招待费支出扣除标准
  • 工资核算方式
  • 银行卡季度结息
  • 企业自主研发的成功案例
  • 用银行存款上交各种税费
  • 外购动产与不动产时增值税的区别
  • 暂估入库产品行程影响所得税汇算清缴吗
  • 计提资产减值准备是利好还是利空?
  • 母公司给子公司担保需要决议吗
  • 如何计算纳税调整增加额
  • 物业管理行业税点
  • 土地使用税如何计算缴纳
  • 销售佣金税点
  • 存货占比小有什么影响
  • 委托收款有哪些
  • 机械租赁有什么机械
  • 转让金融商品应交增值税怎么算
  • virtualbox打不开虚拟机
  • 收到招标公司开的发票
  • 主合同主体变更,从合同怎么处理
  • 工资薪金专项扣除项各多少
  • 初级会计应收账款例题
  • php转word
  • 应酬用的香烟
  • 个人住房5年后买卖如何交税?
  • 二手房转让中转什么意思
  • 分配税后利润会计分录
  • 递延收益摊销金额
  • [Vue warn]: Error in created hook: “TypeError: Cannot read properties of undefined (reading ‘$on‘)“
  • 关于php中一些字符的数据
  • 企业所得税法定税率是多少
  • axios用法示例
  • seq命令
  • 企业领用低值易耗品计入
  • 不计提工资直接发放可以吗
  • 销售产品用什么词形容
  • 企业所得税计提金额怎么算
  • MySQL的Query Cache原理分析
  • MySQL入门教程
  • 预付房租计入长期待摊费用吗
  • 跆拳道馆薪酬详细方案
  • 固定资产到期后继续使用称为什么
  • 跨月发票红冲怎么做账务处理
  • 房屋租赁合同印花税计税依据
  • 已开票未收款如何销往来账
  • 公司参赛获奖交啥税
  • 租房子租一半不租了违约金付的,房东不肯退钱怎么办
  • 税控盘费和服务费一样吗
  • 所得税费用为什么不计入营业利润
  • 当前旅游业
  • 年初未分配利润在利润表怎么填
  • 企业没有期初数据,会计怎么做账
  • windows server2014 安装 Mysql Applying Security出错的完美解决方法
  • windows vista
  • mac电脑如何下载app
  • win7系统出现蓝屏怎么进去桌面
  • linux ssh免密码
  • winxp系统怎么安装
  • 苹果预计10.1-15号到能准确吗
  • 毕竟近义词语
  • linux手动设置ip指令
  • win8电脑设置
  • javascript的基本语句
  • 用nodejs做的项目
  • Android AsyncTask简要分析
  • python元组和数组
  • 短信发送器
  • python3连接pg执行命令
  • 怎么删除天眼查诉讼信息
  • 税务年报截止日期2022
  • 房产税怎么申报操作流程视频
  • 房屋契税交错了能退吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设