首页 > 其他分享 >【现代 CSS】标准滚动条控制规范 scrollbar-color 和 scrollbar-width

【现代 CSS】标准滚动条控制规范 scrollbar-color 和 scrollbar-width

时间:2024-06-12 10:12:23浏览次数:20  
标签:color 滚动条 width scrollbar 设置 CSS

Chrome 在 121 版本开始,原生支持了两个滚动条样式相关的样式 scrollbar-color 和 scrollbar-width。

要知道,在此前,虽然有 ::-webkit-scrollbar 规范可以控制滚动条,可是,::-webkit-scrollbar 是非标准特性,在 MDN 文档中都明确了不应该在生产环境使用它。

MDN - ::-webkit-scrollbar
Non-standard: This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

scrollbar-colorscrollbar-width 是官方标准,在 CSS Scrollbars Styling Module Level 1 规范中被提出。

本文,我们就将一起学习看看这两个属性的使用。

scrollbar-color 设置滚动条颜色

顾名思义,scrollbar-color 就是用于设置滚动条颜色的。

不过有意思的是,一个完整的滚动条,其实是有多个小组件组成的,所以能设置的颜色其实也有很多。

以非标准规范 ::-webkit-scrollbar 为例,它将滚动条拆分成了这么多个部分:

当然,新规范没有这么复杂,我们简化上述的图,可以得到这么一张图:

scrollbar-color 能够设置的,正是上图中的 track 和 thumb 的颜色:

  • 轨道(track)是指滚动条,其一般是固定的而不管滚动位置的背景。
  • 滑块(thumb)是指滚动条通常漂浮在轨道的顶部上的移动部分。

简单举个例子:

<div class="scroll-box">
  <p>
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis quaerat ipsam fugit fugiat cupiditate asperiores neque libero natus atque, suscipit error esse inventore numquam molestiae quas laborum eius debitis cum?
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis quaerat ipsam fugit fugiat cupiditate asperiores neque libero natus atque, suscipit error esse inventore numquam molestiae quas laborum eius debitis cum?
    ...
  </p>
</div>
.scroll-box {
    border: 1px solid #666;
    overflow: scroll;    
}

正常而言,当 <p> 标签内的内容足够多,溢出到开始滚动,则滚动条样式为:

此时,我们可以通过 scrollbar-color 设置滚动条的轨道颜色和滑块颜色:

.scroll-box {
    border: 1px solid #666;
    overflow: scroll;    
    scrollbar-color: #fff #000;
    // OR
    scrollbar-color: #000 #fff;
}

则,样式表现如下:

看图就非常好理解了,简单而言 scrollbar-color: #000 #fff,需要设置两个颜色,将第一种颜色应用于滚动条滑块,第二种颜色应用于滚动条轨道。

当然,上图是在 Windows 操作系统下的样式表现,我再补充一张在 macOS/iOS 操作系统下的样式表现效果:

由于 macOS/iOS 操作系统默认情况下,即便容器内是可滚动的,也不会显示滚动条,上述效果都是在 Hover 状态或者滚动状态下的效果。

并且,值得注意的是,大家可以发现,macOS/iOS 操作系统下滚动条轨道是透明的,无法被设置颜色,只能设置滚动条滑块的颜色

完整的 DEMO,你可以戳这里:CodePen Demo -- Scrollbar-color Demo

当然,值得注意的是。很多人看中文版的 MDN 文档(2024-04-06),会看到除了直接设置两个颜色值,以及上面的 auto 关键字,规范还提供了 lightdark 关键字:

{
  /* Keyword values */
  scrollbar-color: auto;
  scrollbar-color: dark;
  scrollbar-color: light;
}

在我实测过后,发现实际没有任何浏览器(用户代理)目前支持 lightdark 关键字。

中文文档存在一定的滞后性,还是推荐大家直接看英文文档:

scrollbar-width设置滚动条粗细

了解完 scrollbar-color 后,我们再来看看 scrollbar-width。这个从名字也很好理解,设置滚动条的宽度。

那是否和我们想象的一样,可以任意设置滚动条的宽度,甚至乎,可以定制化的设置滑块和轨道的宽度?

遗憾的是,在 CSS Scrollbars Styling Module Level 1 一期滚动条规范中,这个属性的功能被设置的非常弱。

不要说分别设置滑块和轨道的宽度,scrollbar-width 目前甚至不支持接受一个宽度数值。

什么意思呢?也就是,当前 scrollbar-width 只接收 3 个关键字:

{
  /* Keyword values */
  scrollbar-width: auto;
  scrollbar-width: thin;
  scrollbar-width: none;
}
  • scrollbar-width: auto:系统默认的滚动条宽度。
  • scrollbar-width: thin:系统提供的瘦滚动条宽度,或者比默认滚动条宽度更窄的宽度
  • scrollbar-width: none:不显示滚动条,但是该元素依然可以滚动

简单示意图如下:

完整的 DEMO,你可以戳这里:CodePen Demo -- Scrollbar-width Demo

总结一下

可以看到,其实就目前 scrollbar-width 而言,其能力还是属于比较鸡肋的。相对正常的样式,仅仅多了一种瘦版样式选择以及提供了无滚动条模式。

当然,整个 scrollbar-colorscrollbar-width 相较于非标准的 ::-webkit-scrollbar 规范已经是非常大的一步跨越。只是其功能的丰富性和全面性还需要等待。

最后

好了,本文到此结束,希望对你有帮助

标签:color,滚动条,width,scrollbar,设置,CSS
From: https://www.cnblogs.com/coco1s/p/18243384

相关文章

  • 三、线刷ColorOS
    参考:如何从LineageOS切换到ColorOS1.安装高通驱动从大侠阿木提供的第三方工具集合中下载高通驱动包QDLoaderHS-USBDriver,安装时选择第一项WWW那个即可。检查是否安装成功:安装完成后重启,到“计算机管理”→“设备管理器”中,点击上方“查看”-“显式隐藏设备”,如果能在......
  • WPF button mouseover background change color
    <Applicationx:Class="WpfApp142.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-nam......
  • 前端菜鸡流水账日记 -- checkbox二级菜单滚动条设置
    下午好哇,今天二更咯,这次想说的是一个ElemenuUI中的一个组件--checkbox多选框,管网的地址是https://element.eleme.cn/#/zh-CN/component/installation,关于这个的具体的写法,感兴趣的小伙伴可以去管网看看,很快就能找到的我今天要记录的是关于他的二级菜单当盒子的内容过多时,超......
  • 裁剪的3种方式,CSS 如何隐藏移动端的滚动条?
    在移动端开发中,经常会碰到需要横向滚动的场景,例如这样的但很多时候是不需要展示这个滚动条的,也就是这样的效果,如下你可能想到直接设置滚动条样式就可以了,就像这样::-webkit-scrollbar{display:none;}目前来看好像没什么问题,但在某些版本的iOS上却无效(具体待测试),滚......
  • perfers-color-scheme 使用简单介绍
    perfers-color-scheme简介prefers-color-scheme媒体查询属性用于检测用户操作系统是否使用深色模式。属性值dark表示用户操作系统使用深色模式light表示用户操作系统使用浅色模式no-preference表示用户操作系统没有偏好,或者操作系统不支持该属性示例@media(prefers......
  • 弹窗中的vxe-table的横向滚动条不灵敏
    问题:弹窗是基于el-dialog封装的,里面嵌套了vxe-table,开发过程中没发现不灵敏最近才发现切换点击详情弹窗时有时候点击空白点不中,拖中也拖动不了定位问题:1.可能是z-index层级问题造成了遮挡,F12调整层级没效果2.当F12调整时.el-scrollbar__bar.is-horizontal里面有个样式positi......
  • css12 CSS HEX Colors
    https://www.w3schools.com/css/css_colors_hex.aspAhexadecimalcolorisspecifiedwith:#RRGGBB,wheretheRR(red),GG(green)andBB(blue)hexadecimalintegersspecifythecomponentsofthecolor.HEXValueInCSS,acolorcanbespecifiedusingahex......
  • css11 CSS RGB Colors
    css11CSSRGBColorshttps://www.w3schools.com/css/css_colors_rgb.aspAnRGBcolorvaluerepresentsRED,GREEN,andBLUElightsources.RGBValueInCSS,acolorcanbespecifiedasanRGBvalue,usingthisformula:rgb(red,green,blue)Eachparameter(......
  • css10 CSS Colors
    https://www.w3schools.com/css/css_colors.asp Colorsarespecifiedusingpredefinedcolornames,orRGB,HEX,HSL,RGBA,HSLAvalues.CSSColorNamesInCSS,acolorcanbespecifiedbyusingapredefinedcolorname: <!DOCTYPEhtml><html&g......
  • ColoredBox child 是 Scaffold 颜色失效
    在Flutter中,Scaffold小部件有自己的一组属性来管理其外观,包括背景颜色。当你将Scaffold作为ColoredBox的子小部件时,Scaffold的backgroundColor属性将覆盖ColoredBox的颜色。要解决这个问题,你可以直接设置Scaffold的backgroundColor属性,而不是使用ColoredBox。如......