惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
雷峰网
雷峰网
量子位
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
T
Tailwind CSS Blog
月光博客
月光博客
博客园 - 【当耐特】
博客园_首页
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
The Cloudflare Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
人人都是产品经理
人人都是产品经理
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活
CSS overscroll-behavior让滚动嵌套时父滚动不触发 « 张鑫旭...
张鑫旭,zhangxinxu · 2020-01-05 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=9191
本文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可以联系授权。

小鱼儿占位图

子元素滚动外面不滚动

web网页开发中,滚动嵌套还是很常见的。

例如我现在写这篇文章的wordpress后台的分类目录就有一个局部滚动条。

滚动条嵌套示意

在默认情况下,里面的滚动条滚到到底部边缘然后再继续滚动的时候,父滚动条会继续跟着滚动。

GIF示意如下:

滚动到边界后继续滚动示意

但是,有时候我们希望里面的滚动条滚动到底部之后,就没有然后,这样可以方便实现其他一些交互,例如滚动到底部继续Loading加载。

或者单纯就是希望就里面的局部区域安安静静地滚动,不会影响外面页面的大滚动条,例如上面分类目录滚动条,或者下拉列表里面的滚动条。

该如何实现呢?

此时可以使用CSS overscroll-behavior属性。

overscroll-behavior属性简介

CSS overscroll-behavior属性可以设置DOM元素滚动到边缘时候的行为。

语法

overscroll-behavior: [ contain | none | auto ]{1,2}

支持1~2个值,因此,下面写法都是OK的:

/* 单个关键字值 */
overscroll-behavior: auto;     /* 默认值 */
overscroll-behavior: contain;
overscroll-behavior: none;

/* 两个值,分别表示x方向和y方向 */
overscroll-behavior: auto contain;

参数

各个关键字词的含义如下:

auto
默认值。就是我们默认看到的滚动行为表现,滚动到边缘后继续滚动外部的可滚动容器。
contain
默认的滚动溢出行为只会表现在当前元素的内部(例如“反弹”效果或刷新),不会对相邻的滚动区域进行滚动。例如创建了一个浮层,浮层滚动(带弹性效果),但是底层元素不会滚动。
none
相邻的滚动区域不会发生滚动,并且会阻止默认的滚动溢出行为。

containnone的行为差异体现主要在移动端。

兼容性

目前Safari浏览器尚不支持,Chrome和Firefox浏览器均支持,IE浏览器则有近似效果属性-ms-scroll-chaining代替,不过需要window 8及其以上版本的系统:

overscroll-behavior兼容性表

由于本身属于体验增强的属性,因此可以在实际项目上大胆使用,浏览器支持自然体验更上一层楼,浏览器如果不支持也就是保持现在这个样子而已。

案例

做了个demo方便大家体验overscroll-behavior这个属性的效果,使用最爱的深天空蓝框一个局部滚动容器,如下图所示:

滚动区域示意

滚动这个小容器会发现滚动到底部的时候,会发现页面无法再继续滚动了,如下GIF所示(点击播放,340KB):

滚动到底部不再滚动GIF示意

整个交互过程没有任何JavaScript代码的参与,就一行简简单单普普通通的CSS代码——overscroll-behavior:contain

zxx-scroll {
    display: block;
    width: 280px; height: 200px;
    padding: .5em 1em;
    margin: 5em auto;
    border: solid deepskyblue;
    overflow: auto;
    overscroll-behavior: contain;
    -ms-scroll-chaining: contain;
}

眼见为实,您可以狠狠的点击这里:CSS overscroll-behavior窗体滚动阻止demo

其他相关语法

和CSS overflow属性类似,CSS overscroll-behavior也支持分解为overscroll-behavior-xoverscroll-behavior-y两个独立CSS属性,分别表示水平滚动和垂直滚动的边界行为。

语法和CSS overscroll-behavior类似,这里不进一步展开。

三、结语及其他滚动相关CSS属性

目前CSS overscroll-behavior在PC项目中利用价值反而更大一些,因为在移动端Safari浏览器是个大头。

如果要想让Safari浏览器也有边界滚动阻止行为,需要借助JavaScript代码了,这个可以参考我之前写过的一篇文章“web移动端浮层滚动阻止window窗体滚动JS/CSS处理”。

纵观下来,我发现CSS这门语言中和滚动相关的CSS属性真的是好多,有之前介绍过的scroll-behavior,还有专门的Scroll Snap模块

分别用来滚动平滑,滚动定位加上本文的滚动边界,真是整整齐齐一家人。

本文介绍的overscroll-behavior虽然是新特性,但是却可以在实际项目中放心使用,速速用起来吧。

好了,就说这么多。

本文不需要赞赏,也不需要关注,只要分享即可。

本文为原创文章,欢迎分享,勿全文转载,如果实在喜欢,可收藏,永不过期,且会及时更新知识点及修正错误,阅读体验也更好。
本文地址:https://www.zhangxinxu.com/wordpress/?p=9191

(本篇完)