【问题标题】:Bootstrap 4 prevent clipping on overflowing row with horizontal scrollBootstrap 4 防止在水平滚动的溢出行上剪裁
【发布时间】:2019-08-01 14:50:27
【问题描述】:

我为所有包含的col 创建了一个水平滚动的row

我使用了这个问题的答案:Bootstrap 4 horizontal scroller div

但是,我发现container 里面的元素被剪掉了。现在,在某些 OS-浏览器组合(例如 MacOS+Chrome)上,滚动条是隐藏的,除非它被鼠标悬停,并且在测试中我们的一个用户无法找到下一个(剪辑的)col 元素。

我想知道如何“取消剪辑”超出容器宽度的元素,以便用户可以立即看到需要滚动的更多内容。

编辑:

相关代码来自this answer,也发在codepen

编辑 2:

注意,我想防止容器在滚动时移动。

【问题讨论】:

  • 你能贴出你尝试过的代码吗?
  • 代码在链接的问题中,我没有复制它,因为我不想假装它是我的代码。
  • 我不太明白这个问题。你的意思是因为水平滚动而被剪裁了吗?
  • container 宽度之外的元素被隐藏(被剪掉了正确的术语吗?)我想让它们保持可见,以便人们可以看到,还有更多元素水平滚动时可以到达。
  • 我更新了我的问题,因为链接太不具体了。

标签: css scroll bootstrap-4 overflow clipping


【解决方案1】:

保持隐藏的滚动条是 OSX 的一项功能,如果用户希望滚动条保持可见,则必须选择退出。您无法采取任何措施来迫使它们保持可见。但是您可以明确地设置它们的样式,以便至少显示 chrome 和 safari。

您可以测试 Mac Os 和 chrome / safari 组合,因为这是特定于平台的问题。然后您可以覆盖滚动条的样式。这会强制显示它。

.testimonial-group > .row {
  overflow-x: scroll;
  white-space: nowrap;
}

.testimonial-group > .row::-webkit-scrollbar-track
{
   box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 
   border-radius: 10px;
   background-color: #F5F5F5;
}


.testimonial-group > .row::-webkit-scrollbar
{
  width: 0px;
  height: 12px;
  background-color: #F5F5F5;
}

.testimonial-group > .row::-webkit-scrollbar-thumb
{
   border-radius: 10px;
   box-shadow: inset 0 0 6px rgba(0,0,0,.3);
   background-color: #555;
}

【讨论】:

  • 从问题中打开 codepen 时,滚动条在我的 OSX 上也隐藏在 Firefox 和 Safari 上。添加您发布的 css 使滚动条实际上​​消失了 =0(重现:OSX 10.14.3、Chrome 72.0.3626.119、FF 65.0.1、Safari 12.0.3)
  • 啊,是的,因为我还设置了 overflow-x 来滚动。我编辑了我的帖子以澄清。
  • 这是有效的。但是,我想等到赏金期结束,看看是否仍有解决方案可以防止在滚动活动时剪辑元素。如果没有任何可行的答案,我会接受这个作为折衷解决方案。
  • 是的,请保持打开状态,如果有其他方法可以在 OSX 上强制滚动条,我也想知道。
【解决方案2】:

正如您所说,您希望它是表格响应式的,其中所有 div 默认采用与父级可用宽度相等的宽度,那么您不应该使用col-sm-4。 具有此类的 div 将具有父级的 33.33% 宽度,而您的其他 div 肯定不会因此而可见。

因此,对于响应式 div,您可以通过这种方式编辑此代码。 Added link for Codepen here.

<div class="container testimonial-group">
 <div class="row text-center flex-nowrap">
 <div class="col">1</div><!--
  --><div class="col">2</div><!--
  --><div class="col">3</div><!--
  --><div class="col">4</div><!--
  --><div class="col">5</div><!--
  --><div class="col">6</div><!--
  --><div class="col">7</div><!--
  --><div class="col">8</div><!--
  --><div class="col">9</div>
 </div>
</div>

CSS

/* The heart of the matter */
.testimonial-group > .row {
  white-space: nowrap;
}
.testimonial-group > .row > .col-sm-4 {
  display: inline-block;
  float: none;
 }

 /* Decorations */
.col { color: #fff; font-size: 48px; padding-bottom: 20px; padding-top: 18px; 
}
.col:nth-child(3n+1) { background: #c69; }
.col:nth-child(3n+2) { background: #9c6; }
.col:nth-child(3n+3) { background: #69c; }

【讨论】:

  • 感谢您的贡献。不幸的是,这也会导致容器通过水平滚动来移动。对table-responsive 的引用只是为了举例说明它的行为方式。
  • 我刚刚检查过,我认为table-responsive 在这里是一个不好的参考。我只是真的想在滚动时防止剪辑。
【解决方案3】:

您需要覆盖默认的滚动条颜色和行为

.row {
  overflow-x: scroll;
  scroll-behavior: smooth;
  align-items: left;
  justify-content: left;
  flex-direction: row;
}
.col-sm-4 {
 display: inline;
 align-items: left;
 justify-content: left;
}
/*scroll bar style all brwosers expet IE && Firefox*/
::-webkit-scrollbar {
  width: 8px;
    background-color: rgba(255,255,255,.4);
}

::-webkit-scrollbar-track {
  -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
    border-radius: 10px;
    background-color: rgba(255,255,255,.4);
}

::-webkit-scrollbar-thumb {
  border-radius: 10px;
    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
    background-color: #787c7d;
}

否则你可以用 JS 而不是 css 来做

【讨论】:

  • 但这也只是操纵滚动条。这可能是一种替代解决方案,但我仍然想看看是否可以规避剪辑。
  • 我认为这更像是用户体验问题而不是代码问题。您有一些横向滚动的内容,但没有迹象表明可以滚动。滚动条是一个很好的指示,但是 OSX 已经删除了它们,即使你可以强制它们回到 webkit 中,仍然会留下 FF。当用户开始与元素交互时,您似乎希望滚动的可能性变得明显。所以这仍然留下了它未被发现的可能性。为什么不只是暴露第四个盒子的一部分。
  • 暴露第 4 个盒子的想法已经在我的脑海中,但是如何使用 Bootstrap 的 12 大小的网格和 5 以下的元素来实现这一点?
猜你喜欢
  • 2021-02-12
  • 2018-08-16
  • 2018-05-23
  • 2019-08-17
  • 2020-03-16
  • 1970-01-01
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多