48

简单地说,这就是我想要的(在 Webkit 浏览器上使用-webkit-scrollbar获得):

这就是我在 Opera 上得到的(Firefox 也不将边框半径应用于滚动条,但仍应用边框):

有没有一种简单的方法可以让滚动条下的边框不消失?

我不需要-webkit-scrollbar的花哨风格,但我希望页面看起来干净且对称......

4

5 回答 5

41

我一直有同样的问题。这不是最优雅的解决方案,但只需在外盒内放置一个较小的 div,这样滚动条就不会与外盒重叠。

就像从这支笔复制的这段代码:

.box {
  height: 200px;
  width: 250px;
  border-radius: 10px;
  border: 2px solid #666;
  padding: 6px 0px;
  background: #ccc;
}

.box-content {
  height: 200px;
  width: 250px;
  overflow: auto;
  border-radius: 8px;
}
<div class="box">
  <div class="box-content">
    <ol>
      <li>test</li>
      <li>test</li>
      <li>test</li>
      <li>test</li>
      <li>test</li>
      <li>test</li>
      <li>test</li>
      <li>test</li>
      <li>test</li>
      <li>test</li>
      <li>test</li>
      <li>test</li>
      <li>test</li>
      <li>test</li>
      <li>test</li>
      <li>test</li>
    </ol>
  </div>
</div>

于 2013-07-05T14:47:36.280 回答
38

将需要滚动的内容放在一个divwith 中overflow: auto。在该内容周围div放置一个div带有圆角和overflow: hidden.

现在您可以看到滚动条,但它的外角是隐藏的,并且不会干扰外层的圆角div

例子:

// Insert placeholder text
document.querySelector('.inner').innerHTML = 'Text<br>'.repeat(20);
.outer {
  width: 150pt;
  border: 1px solid red;
  border-radius: 15pt;
  overflow: hidden;
}

.inner {
  height: 200px;
  overflow-y: auto;
}
<div class="outer">
    <div class="inner">
        <!-- lots of text here -->
    </div>
</div>

于 2014-03-10T08:48:52.787 回答
24

谷歌在展示他们的网络应用程序时实现了类似的东西。

在此处输入图像描述

在检查元素和复制粘贴的帮助下,我得到了下面的代码。

ul::-webkit-scrollbar-thumb {
  background-color: red;
  border: 4px solid transparent;
  border-radius: 8px;
  background-clip: padding-box;  
}

ul::-webkit-scrollbar {
  width: 16px;
}

ul {
  overflow-y: scroll;
  margin: 0;
  padding: 0;
  width: 350px;
  max-height: 300px;
  background-color: #ddd;

  border-radius: 8px;
}

li {
  list-style-type: none;
  padding: 13px;
}
<ul>
  <li>google.com</li>
  <li>facebook.com</li>
  <li>twitter.com</li>
  <li>instagram.com</li>
  <li>linkedin.com</li>
  <li>reddit.com</li>
  <li>whatsapp.com</li>
  <li>tumblr.com</li>
  <li>skype.com</li>
</ul>

我不认为自己是 CSS 专家,所以希望有人能解释这些事情是如何工作的。

或者您可以查看 MDN 上的文档:

于 2020-01-09T14:38:18.910 回答
0

修身圆角

@-moz-document url-prefix() {
    .scrollbar {
        overflow: auto;
        width: 0.5em !important;
        scroll-behavior: smooth !important;
        -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3) !important;
        background-color: darkgrey !important;
        outline: 1px solid slategrey !important;
        border-radius: 10px !important;
    }
}

::-webkit-scrollbar {
    width: 0.5em !important;
    scroll-behavior: smooth !important;
}

::-webkit-scrollbar-track {
    -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3) !important;
}

::-webkit-scrollbar-thumb {
    background-color: darkgrey !important;
    outline: 1px solid slategrey !important;
    border-radius: 10px !important;
}
<div class="scrollbar" style="height: 600px">
   <h1>Scrollbar is slim with rounded corners</h1>
   <br/>
   <br/>
   <br/>
   <br/>
   <h1>Scrollbar is slim with rounded corners</h1>
   <br/>
   <br/>
   <br/>
   <br/>
   <h1>Scrollbar is slim with rounded corners</h1>
</div>

于 2019-04-26T11:12:30.680 回答
-1

如果你能提供一个小提琴会很好。不过,您应该尝试将容器上的 box-sizing 更改为border-box(如果尚未完成):

box-sizing: border-box;
于 2013-07-05T14:45:13.940 回答