Tailwind CSS 自定义滚动条

在真实的企业级开发中,如果想要实现自定义滚动条样式,虽然可以通过引入第三方 JavaScript 滚动条插件来实现,但为了区区一个滚动条增加项目体积显然不够优雅。

如果使用了 Tailwind CSS,我们完全可以使用纯 CSS 伪元素 的方式来实现。

Tailwind CSS 自定义滚动条原理

在 Webkit 内核的浏览器(如 Chrome、Edge、Safari)中,修改滚动条主要依赖以下 3 个伪元素:

  • ::-webkit-scrollbar:整个滚动条的尺寸(宽度和高度)。
  • ::-webkit-scrollbar-track:滚动条的轨道(背景)。
  • ::-webkit-scrollbar-thumb:滚动条的滑块(可以被拖动的部分)。

在 Tailwind CSS 中,最规范的做法是在全局样式文件中,使用 @utility 指令来将这些伪元素封装成自定义工具类(如下所示),然后在 HTML 中像普通类名一样直接使用。

/* 使用 @utility 封装一个名为 scrollbar-lvye 的工具类 */
@utility scrollbar-lvye {
    /* 兼容 Firefox  */
    scrollbar-width: thin;
    scrollbar-color: #10b981 #ecfdf5;

    /* 兼容 Webkit 内核浏览器 */
    &::-webkit-scrollbar {
        width: 8px;
        height: 8px;
    }
    &::-webkit-scrollbar-track {
        background-color: #ecfdf5;
        border-radius: 9999px;
    }
    &::-webkit-scrollbar-thumb {
        background-color: #10b981;
        border-radius: 9999px;
    }
    &::-webkit-scrollbar-thumb:hover {
        background-color: #059669;
    }
}

Tailwind CSS 自定义滚动条示例

接下来,我们通过一个简单的例子来讲解一下如何使用 Tailwind CSS 来自定义滚动条样式。

示例:自定义滚动条

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
    <script src="https://unpkg.com/@tailwindcss/browser@4"></script>
    <style type="text/tailwindcss">
        @utility scrollbar-lvye {
            /* 兼容 Firefox  */
            scrollbar-width: thin;
            scrollbar-color: #10b981 #ecfdf5;

            /* 兼容 Webkit 内核浏览器 */
            &::-webkit-scrollbar {
                width: 8px;
                height: 8px;
            }
            &::-webkit-scrollbar-track {
                background-color: #ecfdf5;
                border-radius: 9999px;
            }
            &::-webkit-scrollbar-thumb {
                background-color: #10b981;
                border-radius: 9999px;
            }
            &::-webkit-scrollbar-thumb:hover {
                background-color: #059669;
            }
        }
    </style>
</head>
<body class="p-10 bg-green-50">
    <div class="w-full max-w-sm bg-white rounded-3xl shadow-sm border border-emerald-100 overflow-hidden">
        <div class="p-4 bg-emerald-500 text-white font-bold text-center">
            匆匆
        </div>
        <div class="h-64 p-6 overflow-y-auto scrollbar-lvye text-emerald-900/80 leading-relaxed space-y-4">
            <p>燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候。但是,聪明的,你告诉我,我们的日子为什么一去不复返呢?——是有人偷了他们罢:那是谁?又藏在何处呢?是他们自己逃走了罢——如今又到了哪里呢?</p>
            <p>……</p>
            <p>在逃去如飞的日子里,在千门万户的世界里的我能做些什么呢?只有徘徊罢了,只有匆匆罢了;在八千多日的匆匆里,除徘徊外,又剩些什么呢?过去的日子如轻烟,被微风吹散了,如薄雾,被初阳蒸融了;我留着些什么痕迹呢?我何曾留着像游丝样的痕迹呢?我赤裸裸来到这世界,转眼间也将赤裸裸地回去罢?但不能平的,为什么偏要白白走这一遭啊?</p>
            <p>你聪明的,告诉我,我们的日子为什么一去不复返呢?</p>
        </div>
    </div>
</body>
</html>

页面效果如下图所示。

Tailwind CSS 自定义滚动条

分析:

在这个例子中,我们在 style 标签中使用 @utility 指令封装了一个 “scrollbar-lvye” 类名。该类用于集中处理复杂的伪元素逻辑(包含了 widthbackground-color 以及 border-radius 等)。

然后在 HTML 代码中,我们只需要为指定元素加上这个 “scrollbar-lvye” 类名,就可以轻松实现自定义滚动条样式了。

上一篇: Tailwind CSS 折叠面板

下一篇: CSS 教程

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号