simplify the life

一个样式问题引发的对 overflow 属性的再度学习

最近开发碰到一个 bug,其实把它写成最小 demo 很简单,大概这样:

点击查看代码
<!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>
    .box {
      margin: 200px;
      width: 100px;
      height: 100px;
      border: 1px solid black;
      overflow: scroll;
    }
  </style>
</head>
<body>
  <div class="box">
    hello world
  </div>
</body>
</html>

在我这边展示良好

但是在 UE 那边却显示了莫名的滚条

后来发现他是外接了鼠标,外接鼠标去掉就又正常了。通过 google 我们发现这在 mac 里是可设置的(系统偏好设置 -> 通用 -> 显示滚动条)

如果选择﹝滚动时﹞,那么一直都是符合预期的结果,只有滚动时才会显示滚条;如果选择﹝始终﹞,那么不滚动时也会显示滚条,如果选择﹝根据鼠标或触摸板自动显示﹞,我猜测是没外接鼠标时和选择﹝滚动时﹞一致,外接时和选择﹝始终﹞一致了

以上解决了我们表现为啥不一致的问题,但是没有解决为啥明明没溢出,却还是显示了滚条的问题

这个就和 CSS overflow 属性有关了,我们将 overflow: scroll 改成 overflow: auto 就符合预期了

其实两者很好区别,都是溢出时候会滚动,只是设置 overflow: scroll 后会强行加上滚条(不管你真实有没有溢出),但是设置 overflow: auto 时只会在需要的时候加上滚条,很显然 auto 更加合适


开发中真实的场景是希望给 Table 组件定高展示,溢出时滚动,但是滚动条放在整个 table 的右侧其实有点奇怪(对整个 table 设置 overflow 属性),我们更希望是只对 tbody 进行滚动,其实是有 scroll 属性能够解决这个问题的,还是应该多读文档啊

posted on 2023-03-03 08:27  lessfish  阅读(172)  评论(0)    收藏  举报

导航