可以在webkit滚动条上使用过渡吗?我试过:
div#main::-webkit-scrollbar-thumb {
background: rgba(255,204,102,0.25);
-webkit-transition: background 1s;
transition: background 1s;
}
div#main:hover::-webkit-scrollbar-thumb {
background: rgba(255,204,102,1);
}
但是它不起作用。或者有没有可能创建一个类似的效果(没有javascript)?
Here is a jsfiddle showing the rgba transition problem
7条答案
按热度按时间8dtrkrch1#
使用Mari M的
background-color: inherit;
技术和-webkit-background-clip: text;
技术可以很容易地实现。现场演示; https://jsfiddle.net/s10f04du/
wmvff8tz2#
这里有另一个基于回复的想法。你可以使用color代替background-color,然后使用box-shadow来给拇指上色。你可以使用
-webkit-text-fill-color
来给文本上色:https://codepen.io/waterplea/pen/dVMopv
xsuvu9jc3#
**简答:**不能,不能在
::-webkit-scrollbar
上使用transition
**详细回答:**在CSS中有完全实现类似效果的方法。
说明:
1.我们需要创建一个可以滚动的外部容器,然后创建一个内部容器。
1.外部容器将有一个
background-color
属性。这个属性将匹配我们想要为滚动条过渡的颜色。1.内容器将与外容器的高度相匹配,并且将具有遮蔽外容器的
background-color
。1.滚动条的
background-color
将继承外部容器的。transition
属性将应用于外部容器的background-color
。这里的一个主要缺点是你必须做一些遮罩。如果你的背景不是纯色,这可能有点麻烦,因为内部容器很可能需要匹配。如果这不是一个担心,这将为你工作。下面的代码将所有这些放在一起,用于一个带有 * 水平 * 滚动组件的页面。
超文本标记语言
CSS
备注:
max-width
来匹配你的内部容器的width
,否则你可能会在超大的显示器上看到一些奇怪的东西。当浏览器的宽度大于水平滚动的内容宽度时,这是一个极端的情况。这是假设你使用的是水平滚动,就像示例代码所做的那样。fdbelqdn4#
根据@brillout的回答,如果我们转换
border-color
而不是background-color
,我们可以避免使用background-clip: text
,如果您有任何嵌套文本,则会留下一些片段。详细说明:
1.把你的内容放在一些 Package 器div中,然后在你的 Package 器上添加一个到
border-color
的过渡来改变悬停时的颜色。1.在滚动条中添加一个内嵌边框,并将其宽度设置为足以填充整个元素。
1.在滚动条上设置
border-color: inherit
。现在,当我们将鼠标悬停在 Package 器上时,边框颜色会发生变化。 Package 器没有边框,所以我们看不到任何变化。但是,滚动条继承了该颜色,所以滚动条颜色会发生变化。
下面是最重要的代码。完整的示例可以在this fiddle和下面的代码片段中找到。
bvn4nwqk5#
一个干净的解决方案可以通过在背景中使用的CSS变量的动画来实现。请注意,为了能够动画CSS变量,您需要使用
@property
设置它们。w8rqjzmb6#
我被@waterplea的回答所启发。
默认情况下,文本阴影会继承文本颜色。使用此功能可以很好地实现我想要的效果。
yvgpqqbh7#
让scrollbar继承容器的
background-color
并使用transition更改容器background-color
也可以。但它有一个缺点,即容器的背景颜色也会改变。这使得该方法非常不可用。您可以使用内部容器和掩蔽来避免这个问题,但它太多了。相反,您可以通过在容器上使用
background-image
来避免这个缺点,以便在改变background-color
之后容器的背景不会改变。Codepen示例:https://codepen.io/sbijay777/pen/poxvGdB