求助,神奇的 css,为何 overflow 了也没有左右滚动条?

2021-06-22 17:10:40 +08:00
 sillydaddy

设置父 div 的 overflow 为 scroll,如果它的子 div 的 left 设置为 100(从右侧 overflow),那么父 div 就有左右滚动条;如果 left 设置为-100(从左侧 overflow)就没有滚动条了。

这是为什么呢?难道从左侧 overflow 和从右侧 overflow 还有区别吗?(测试了 chrome 和 firefox 都是这样的)


没有左右滚动条:

<div style="position:relative; left:400px;overflow:scroll;width:200px;height:200px;background:red">

 <div style="position:relative; left:-100px;top:100px;width:200px;height:200px;background:blue">
 </div>

</div>

有左右滚动条(与上面的唯一的区别是 left 由-100px 改为了 100px):

<div style="position:relative; left:400px;overflow:scroll;width:200px;height:200px;background:red">

 <div style="position:relative; left:100px;top:100px;width:200px;height:200px;background:blue">
 </div>

</div>
1853 次点击
所在节点    React
8 条回复
fzhyzamt
2021-06-22 17:20:40 +08:00
你加上这个试试
```html
div {
direction: rtl;
}
```
sillydaddy
2021-06-22 17:26:54 +08:00
@fzhyzamt
这样就反过来了,left=-100px 有滚动条,left=100px 就没有了。哈哈。
kop1989
2021-06-22 17:31:35 +08:00
没有时间去细翻 CSS Overflow Module Level 3 ( https://drafts.csswg.org/css-overflow-3/#propdef-overflow

以下说一下我的揣测:
1 、当默认情况下,html 的左上角为 0,0,而且元素方向是由左到右。
2 、overflow 应该是针对父容器的元素方向来解释的。换句话说,默认情况下,overflow 的原点是左上角的 0,0 只处理右下方向的溢出。
3 、同理,当你给一个网页的元素负值时,浏览器的 scrollBar 也不会自动出现(即 0,0 位置不会改变)
Kenmin
2021-06-22 17:32:15 +08:00
滚动条位置不能为负数……
kop1989
2021-06-22 17:34:24 +08:00
4 、scrollBar 的起点应该是基于父元素 0,0 而来的。
cloverliang9721
2021-06-22 17:40:23 +08:00
https://developer.mozilla.org/zh-CN/docs/Web/CSS/overflow

MDN 文档上说:overflow: scroll; /* 由浏览器定夺,如果内容被修剪,就会显示滚动条 */

我猜是因为你设置负数,在浏览器解析的时候认为这个元素不在可视范围内了不算是修剪,所有没有滚动条

![image.png]( https://i.loli.net/2021/06/22/lPqN4rfDHXJZjL9.png)
sillydaddy
2021-06-22 18:07:11 +08:00
@kop1989
@Kenmin
@cloverliang9721
应该是这样的
DL9412
2021-06-22 18:08:38 +08:00
根据 https://drafts.csswg.org/css-overflow-3/#scrollable-overflow-region 的描述,and the scrollable overflow rectangle is the minimal rectangle whose axes are aligned to the box’s axes and that contains the scrollable overflow area.
大致意思是可滚动溢出区域是根据盒模型的轴方向计算出的最小矩形?

然后关于盒模型的轴定义,我只找到了 https://drafts.csswg.org/css-writing-modes-3/#logical-directions,这里面两个 start 的定义就是盒模型的一端,对 end 的定义实在没看懂。

大致上来说就是盒子的轴在默认情况下就是从左端开始的?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/785128

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX