如何利用CSS来美化滑动输入条?自定义样式方法浅析

如何利用css来美化滑动输入条(input range)?下面本篇文章给大家介绍一下利用纯 css 自定义滑动输入条样式的方法,希望对大家有所帮助!

如何利用CSS来美化滑动输入条?自定义样式方法浅析

关于原生 input range 滑动输入条如何自定义样式一直都是我心里的一道坎,一般情况下,可以很轻易的美化到这个程度。(推荐学习:css视频教程)

1.png

为什么很容易呢?因为这些都是有对应的伪元素可以修改的

立即学习“前端免费学习笔记(深入)”;

::-webkit-slider-container {  /*可以修改容器的若干样式*/}::-webkit-slider-runnable-track {  /*可以修改轨道的若干样式*/}::-webkit-slider-thumb {  /*可以修改滑块的若干样式*/}

可是,偏偏没有已滑过部分的样式,如果要定义下面这样的样式,单纯的 CSS 可能没办法实现了

2.png

注意:Firefox 有单独的伪类可以修改,本文讨论的是 Chrome 实现方案

一、我的实现思路

既然没有专门的伪元素可以修改已滑过部分的颜色,而且只有滑块是可动的,是不是可以在滑块上下手呢?

假设滑块左边有一个矩形,是跟随滑块一起的,

3.gif

当这个矩形足够长时,能够完全覆盖左边的轨道,在可视范围内,是不是就可以表示左边的已滑过部分了呢?示意如下(左边半透明表示滑动条之外)

4.gif

尝试过伪元素的想法,像这样

::-webkit-slider-thumb::after{  /*本想绘制一个足够长的矩形*/}

可惜,伪元素里并不能再次生成伪元素。

所以,如何在元素之外绘制一个矩形呢?

二、通过 border-image 在元素之外绘制图形

有哪些方式可以在元素之外绘制图形呢?想了一下,有 box-shadowoutline,但是好像并不适合这种情况,我们需要绘制的是一个尺寸可控的矩形,而这两种方式都不能很好地控制形状。那还有其他方式吗?

还真有!前两天刚看到张鑫旭老师的一篇文章:被低估的border-image属性,其中有一个特性就是在元素之外构建图像,并且不占据任何空间。赶紧试试,这里绘制一个宽度为99vw的矩形(足够覆盖滑动条就行了),代码如下

::-webkit-slider-thumb {    -webkit-appearance: none;    appearance: none;    width: 20px;    height: 20px;    border-radius: 50%;    background-color: #f44336;    border: 1px solid transparent;    margin-top: -8px;    border-image: linear-gradient(#f44336,#f44336) 0 fill / 8 20 8 0 / 0 0 0 99vw; /*绘制元素外矩形*/}

效果如下

5.gif

注意几点:

border-image 要想生效,必须指定border,这里设置的是border: 1px solid transparent;

矩形是通过线性渐变绘制的 linear-gradient(#f44336,#f44336)

border-image 中8 20 8 0表示border-image-width,距离上、右、下、左的距离,由于滑块自身大小是 20 * 20,所以这个可以确定高度是 4 (20 – 8- 8),位置是滑块自身的最左边(距离右边是20)

border-image 中 0 0 0 99vw表示 border-image-outset扩展大小,这里指的是向左扩展99vw的距离

接下来通过overflow:hidden隐藏外面的部分就可以了

::-webkit-slider-container {    /*其他样式*/    overflow: hidden;}

6.gif

完整代码可以访问:input range

https://codepen.io/xboxyan/pen/YzERZyE

下面附上完整代码(最近codepen貌似不太稳定)

[type="range"] {    -webkit-appearance: none;    appearance: none;    margin: 0;    outline: 0;    background-color: transparent;    width: 500px;}[type="range"]::-webkit-slider-runnable-track {    height: 4px;    background: #eee;}[type="range" i]::-webkit-slider-container {    height: 20px;    overflow: hidden;}[type="range"]::-webkit-slider-thumb {    -webkit-appearance: none;    appearance: none;    width: 20px;    height: 20px;    border-radius: 50%;    background-color: #f44336;    border: 1px solid transparent;    margin-top: -8px;    border-image: linear-gradient(#f44336,#f44336) 0 fill / 8 20 8 0 / 0px 0px 0 2000px;}

三、还是有一些局限

上面的实现成本其实是很低的,相比常规的实现基础上,仅仅增加了1行用于绘制元素之外的矩形。

border-image: linear-gradient(#f44336,#f44336) 0 fill / 8 20 8 0 / 0px 0px 0 2000px;

但是,由于是通过超出隐藏的方式裁剪掉多出的部分,使得滑动条边缘是“一刀切”的,所以,如果要求滑动条带有圆角,这种实现方式就不行了

7.png

如果还有好的想法欢迎留言讨论

四、简单总结一下

关于border-image-outset 这个属性,其实之前已经在 MDN 上见识过了,但只是简单了解,还觉得很鸡肋,现在看来,这些属性不是没什么用,只是没有碰到适合应用的场景。下面简单总结一下:

滑动条有 3 个伪元素可以自定义容器、轨道、滑块

伪元素里不能再嵌套伪元素了

元素之外绘制有 box-shadow、outline、border-image 3种方法

border-image 可以使用任意格式图片,包括 CSS 渐变

这个方案不能实现圆角

当然这些思路都只是“偏方”,像 Firefox 就完全支持自定义样式了,可惜桌面端还是 Chrome 的天下,只能慢慢期待一下 Chrome 后面的更新了。最后,如果觉得还不错,对你有帮助的话,欢迎点赞、收藏、转发❤❤❤

(学习视频分享:web前端)

以上就是如何利用CSS来美化滑动输入条?自定义样式方法浅析的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1623786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 08:24:10
下一篇 2025年12月24日 08:24:27

相关推荐

  • css3怎么设置rotate旋转点

    在css3中,可以利用“transform-origin”属性设置rotate旋转元素时的旋转点,该属性用于更改转换元素的位置,可以改变旋转的中心点,语法为“transform-origin: x-axis y-axis z-axis;”。 本教程操作环境:windows10系统、CSS3&…

    2025年12月24日
    000
  • css3如何让盒子水平居中

    css3让盒子水平居中的方法:1、使用margin属性,给盒子元素添加“margin: 0 auto;”样式即可水平居中;2、利用flex弹性布局来实现水平居中;3、利用position和transform属性实现水平居中。 本教程操作环境:windows7系统、CSS3&&HTML…

    2025年12月24日 好文分享
    000
  • 如何将css文件设置为utf-8

    在css中,可以利用“@charset”规则来将字符编码设置为“utf-8”,该规则可以指定样式文件中使用的字符编码,语法为“@charset “UTF-8”;”;“@charset”规则必须是样式表中的第一个元素,前面不得有任何字符。 本教程操作环境:windows7系统、…

    2025年12月24日
    000
  • 手把手教你使用CSS制作动态饼图(附代码)

    css如何制作饼图?下面本篇文章手把手教你使用css制作动态饼图,希望对大家有所帮助! 饼图是常见的组件,可让你显示整体的各个部分,你可以将它们用于许多不同的场景。你会发现很多关于构建这样一个组件的文章,但它们通常要么依赖于 SVG,要么依赖于大量的 HTML 元素。在这篇文章中,我将向你展示如何使…

    2025年12月24日 好文分享
    000
  • 一文详解如何css实现动态弧形线条长短变化的Loading动画

    如何使用css 实现动态线条 loading 动画?下面本篇文章介绍一下使用css实现动态弧形线条长短变化的loading动画的3种方法,希望对大家有所帮助! 有群友问我,使用 CSS 如何实现如下 Loading 效果: 这是一个非常有意思的问题。 立即学习“前端免费学习笔记(深入)”; 我们知道…

    2025年12月24日 好文分享
    000
  • 实例详解之怎样使用css实现3D穿梭效果

    本篇文章给大家带来了怎样使用css来实现星际3d穿越效果的问题,希望对大家有帮助。 使用 CSS 3D 实现星际 3D 穿梭效果 这个技巧,我在 奇思妙想 CSS 3D 动画 | 仅使用 CSS 能制作出多惊艳的动画? 也有提及过,感兴趣的可以一并看看。 假设我们有这样一张图形: 立即学习“前端免费…

    2025年12月24日 好文分享
    000
  • 十分钟教会你仅使用一个div配合css实现饼状图

    本篇文章给大家带来了关于怎样使用一个div配合css实现病状图的相关问题,希望对大家有帮助。 完整的代码请滑到文末。 我们只使用一个div,仅采用css实现饼状图。 HTMl 结构 立即学习“前端免费学习笔记(深入)”; 60% 我们添加了几个 css 的变量: –p:进度条的百分比(纯…

    2025年12月24日 好文分享
    000
  • 聊聊利用CSS实现九宫格布局的几种方法!

    本篇文章给大家分享利用css实现九宫格布局的几种方法,并介绍一下nth-of-type 与 nth-child 的区别,希望对大家有所帮助! 最近几天刷面经常看见一道题,“九宫格布局”。自己尝试用几种办法实现了九宫格布局,发现这里面涉及了挺多的 css 知识,记录一下。 我觉得这篇文章讲得很好,大家…

    2025年12月24日 好文分享
    000
  • 深入解析自定义的CSS重置样式

    本篇文章带大家深入解析下自定义的css重置样式,研究下其中的每一条规则,并分析下使用该规则的原因,希望对大家有所帮助! 每当我开始一个新项目时,首要的任务就是处理 CSS 语言中的那些边边角角的问题。为了解决这些问题,通常会使用自定义的一组基础样式。 在过去很长一段时间,我使用的是来自 Eric M…

    2025年12月24日 好文分享
    000
  • 手把手教你使用纯CSS仿AntDesign的Logo彩蛋效果

    怎么实现 ant design官网的logo彩蛋效果?本篇文章就来分析一下实现原理,带大家一起使用纯css来一步步实现 ant design官网logo彩蛋效果,希望对大家有所帮助! 最近项目中 Ant Design 接入比较多,还是非常不错的。不知道大家有没有发现这样的效果,在官网上,如果鼠标放在…

    2025年12月24日 好文分享
    000
  • 深入浅析css中的层叠上下文

    本篇文章带大家聊聊css中的层叠上下文,通过示例来比较一下层叠等级,希望对大家有所帮助! 前段时间,公司开始推进低代码平台业务,我有幸的参与其中。在这期间牵扯到了css的层叠上下文,并给我带来了一定的困扰,为了更好的实现业务逻辑,我觉得好好的深入研究一下css的层叠上下文。想必大家都知道网页是二维空…

    2025年12月24日 好文分享
    000
  • 浅析CSS中的5种设计模式,聊聊vue项目中CSS目录代码的作用

    本篇文章带大家聊聊css中的5种设计模式,并介绍一下vue3项目中个css style目录中的代码作用,希望对大家有所帮助! 工作了几年,发现在项目中经常存在如下问题: 1.模块拆分不合理2.变量和函数命名不知所云3.缺少注释或者是写了一堆描述不清的内容4.重复的代码遍布各个角落等 因为这些不良的编…

    2025年12月24日
    000
  • 鲜为人知!用css做极光效果

    本篇文章给大家分享使用css实现极光效果,其中主要步骤包括绘制深色背景、使用渐变画出极光的轮廓、旋转拉伸等等相关问题,希望对大家有帮助。 .g-aurora { … transform: rotate(45deg) scaleX(1.4); mix-blend-mode: color-dodge…

    2025年12月24日
    000
  • 你了解 Transition 吗?一起来深入了解下Transition!

    你了解 transition 吗?你可能并不了解 transition?下面本篇文章就来通过图文结合的方式带大家深入了解一下transition,希望对大家有所帮助! 这篇文章我们深入学习 Transition 动画。没错,CSS3 Transition 动画。你可能会问,不是很简单吗,这什么好讲的…

    2025年12月24日 好文分享
    000
  • 快速提升开发技能的 20 个 CSS 小技巧

    本篇文章给大家分享20 个 css 小技巧,用于快速提升开发技能,快来收藏吧,希望对大家有所帮助! flexbox 内容换行 当我们使用 flexbox 布局的时候,默认情况下,在容器宽度不够时,可能就会出现这样的情况。 这个主要是因为 flex-wrap 的默认值是 nowrap,所以我们需要这样…

    2025年12月24日 好文分享
    000
  • HTML+CSS+JS实现雪花飘扬(代码分享)

    使用html+css+js如何实现下雪特效?下面本篇文章给大家分享一个html+css+js实现雪花飘扬的示例,希望对大家有所帮助。 很多南方的小伙伴可能没怎么见过或者从来没见过下雪,今天我给大家带来一个小Demo,模拟了下雪场景,首先让我们看一下运行效果 可以点击看看在线运行:http://hai…

    2025年12月24日 好文分享
    000
  • 手把手带你使用纯CSS实现饼状图

    如何仅使用一个 div 配合 css 实现饼状图?下面本篇文章就来给大家看看实现方法,希望对大家有所帮助。 本文为译文「意译」完整的代码请滑到文末。 我们只使用一个div,仅采用css实现饼状图。 HTMl 结构 60% 我们添加了几个 css 的变量: –p:进度条的百分比(纯数字,不带%),饼…

    2025年12月24日 好文分享
    000
  • css怎么降低背景透明度

    css降低背景透明度的方法:1、使用opacity属性,只需要给背景元素设置“opacity: 透明度值;”样式即可;2、使用filter属性,只需要给背景元素设置“filter: opacity(透明度值);”样式即可。 本教程操作环境:windows7系统、CSS3&&HTML5…

    2025年12月24日
    000
  • 怎么用css样式把图片改为灰色

    在css中,可以利用filter属性来把图片改为灰色,该属性可以给图片添加滤镜效果,只需要给图片元素添加“filter: grayscale(灰度数值%);”样式即可将图片设置为灰色。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 在css中,…

    2025年12月24日
    000
  • css怎么实现图片放大缩小动画

    方法:1、使用“@keyframes 动画名称{}”规则和“transform:scale(缩放比例);”语句创建放大缩小动画;2、使用“图片元素{animation:动画名称 时间 infinite;}”语句缩放动画应用于图片元素中。 本教程操作环境:windows7系统、CSS3&&am…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信