发现一个有趣的滑动组件样式,并给它实现了

news2024/11/25 22:34:36

最近在浏览网站的时候看到一个有趣的滑动组件的样式,觉得很有趣。一时有兴趣就去用代码实现了一下:

这里我就不从零开始实现了,借用 Material UI Slider 快速实现,基本上就是重新写样式覆盖。

Material UI 上的 Slider 组件默认样式如下:

eb1754f21ec483dcc5a19a16b5b00357.png

很明显,这个和上面视频中的组件在样式上相差甚远。

首先我们来剖析下组成这个组件所需要的元素有哪些?打开浏览器的元素审查,我们找到和 Slider 组件相关的元素标签,会发现主要结构如下:

<span class="MuiSlider-root">
  <span class="MuiSlider-rail"></span>
  <span class="MuiSlider-track"></span>
  <span class="MuiSlider-thumb"></span>
</span>

这里略去一些无关紧要的元素,主要就是根元素下的类名为 MuiSlider-railMuiSlider-trackMuiSlider-thumb 的三个 span 标签组成。接下来我们也是主要围绕这三个元素进行样式重定义。

我们的教程会通过一步一步修改,逐步展示修改后的样式。

滑块高度

得益于 Material UI 组件的 sx 属性,可以自由地自定义该组件的样式。

<Slider
  sx={{
    height: 28
  }}
/>

6076212710608f5ed195206e2153b5ef.png

滑块的颜色

<Slider
  sx={{
    height: 28,
    color: 'rgba(220,220,220,1)'
  }}
/>

9cccdc63bb6f2081ecc79579c1d50f1c.png

稍稍改变下圆角的值,继续在 sx 下追加属性 borderRadius: '5px'

拖拽按钮的样式

原来的拖拽按钮是一个圆形的,我们要将它改为细长条样式。

<Slider
  sx={{
    height: 28,
    color: 'rgba(220,220,220,1)',
    borderRadius: '5px',
    '& .MuiSlider-thumb': {
      width: '2px',
      height: '20px',
      margin: '0 4px',
      borderRadius: 0,
      backgroundColor: 'currentColor',
      boxShadow: 'none',
      border: 'none',
      '&::before': { boxShadow: 'none' },
    }
  }}
/>

203f650d01eda002c66d5bcf44acd287.png

增加标签和当前值的显示

对于文字的显示,我们在采用和滑动组件同级,新增元素标签包裹,然后绝对定位,让它位于组件的上方。

b22ea915874afb6fda144c48e4909847.png

import { Box, Slider } from '@mui/material';


export default function CustomSlider() {
  const [score, setScore] = useState(45);
  return (
    <Box sx={{ position: 'relative', display: 'flex' }}>
      <Slider
        defaultValue={score}
        aria-label='Score'
        min={1}
        step={1}
        max={100}
        sx={{
          height: 28,
          color: 'rgba(220,220,220,1)',
          borderRadius: '5px',
          '& .MuiSlider-thumb': {
            width: '2px',
            height: '20px',
            margin: '0 4px',
            borderRadius: 0,
            backgroundColor: 'currentColor',
            boxShadow: 'none',
            border: 'none',
            '&::before': { boxShadow: 'none' },
          },
          '& .MuiSlider-rail': {
            position: 'relative'
          },
          '& .MuiSlider-track': {
            border: 'none'
          }
        }}
        onChange={(e, val) => setScore(val)}
      />
      <Box sx={{
        width: '100%',
        display: 'flex',
        position: 'absolute',
        height: '100%',
        top: 0,
        zIndex: 1,
        alignItems: 'center',
        justifyContent: 'space-between',
        padding: '0 8px',
        pointerEvents: 'none',
        fontSize: '11px',
        color: 'rgba(0,0,0,0.56)'
      }}>
        <span>Score</span>
        <span>{score}</span>
      </Box>
    </Box>
  )
}

点击原文查看效果更佳。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2128948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试产品经理,怎样描述过往经历,才能让面试官印象深刻?

金三银四求职季&#xff0c;你是不是也有面试的冲动&#xff01;但面试并不是头脑一热就能取得好结果&#xff0c;在此之前&#xff0c;必须得有周全的准备&#xff0c;才能应对好面试官的“连环问”&#xff01; 所以&#xff0c;给大家分享这篇产品经理面试干货文章&#xf…

【数学建模】相关系数

第一部分&#xff1a;相关系数简介 总体与样本&#xff1a; 总体&#xff1a;指研究对象的全体&#xff0c;比如全国人口普查数据。样本&#xff1a;从总体中抽取的一部分个体&#xff0c;如通过问卷调查收集的学生数据。 皮尔逊相关系数&#xff1a; 总体皮尔逊相关系数&…

GPIO(General Purpose Input/Output)输入/输出

GPIO最简单的功能是输出高低电平&#xff1b;GPIO还可以被设置为输入功能&#xff0c;用于读取按键等输入信号&#xff1b;也可以将GPIO复用成芯片上的其他外设的控制引脚。 STM32F407ZGT6有8组IO。分别为GPIOA~GPIOH&#xff0c;除了GPIOH只有两个IO&#xff0c;其余每组IO有…

cesium.js 入门到精通(5)

现在我们看这个地图是 属于一个平面的 如果我们想把这个弄成 那种真实的高低起伏的 山脉 或者 其他的建筑显示 我们可以使用 添加地形 terrainProvider: new Cesium.CesiumTerrainProvider({url: "./terrains/gz",}), 这是一个参数 配置 地形 整体代码 <templa…

vba发邮件:如何设置自动化发送电子邮件?

vba发邮件的技巧有哪些&#xff1f;VBA如何调用outlook发邮件&#xff1f; VBA发邮件功能是一个非常实用的工具&#xff0c;能够帮助用户自动发送电子邮件&#xff0c;减少手动操作的时间和错误。AokSend将详细介绍如何通过VBA发邮件来实现自动化发送电子邮件的设置。 VBA发邮…

macOS上谷歌浏览器的十大隐藏功能

谷歌浏览器&#xff08;Google Chrome&#xff09;在macOS上拥有一系列强大而隐蔽的特性&#xff0c;这些功能能显著提高您的浏览体验。从多设备同步到提升安全性和效率&#xff0c;这些被低估的功能等待着被发掘。我们将逐步探索这些功能&#xff0c;帮助您最大化利用谷歌浏览…

让人眼前一亮的软件测试简历,收不到面试邀请算我输

不知道大家的简历是不是都写成下面这样 根据需求文档进行需求分析 熟悉业务流程&#xff0c;明确测试点 根据测试点设计测试用例 参与评审测试用例 提交和回归跟踪缺陷&#xff0c;确认修复完成之后关闭Bug 通过使用Fiddler进行抓包分析并定位前后端Bug 使用简单的SQL语…

【北京迅为】《STM32MP157开发板使用手册》- 第二十五章Cortex-M4 GPIO_LED实验

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

什么是线程池?从底层源码入手,深度解析线程池的工作原理

导航&#xff1a; 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码解析 目录 一、什么是线程池&#xff1f; 1.1 基本介绍 1.2 创建线程的两种方式 1.2.1 方式1&#xff1a;自定义线程池…

山峰个数【python实现】

思路见此处 def get_mountain_peaks(height):peak_count 0n len(height)if n 0:#如果一个山高都没有&#xff0c;return 0return 0for i in range(1,n-1):if height[i] > height[i-1] and height[i] > height[i1]:peak_count 1if height[0] > height[1] and n &g…

TimedRotatingFileHandler 修改 suffix 后 backupCount 设置失效无法自动删除文件

本文主要分析 TimedRotatingFileHandler 在实际使用中 backupCount 设置未生效的问题。源码分析显示&#xff0c;文件删除依赖于后缀 suffix 的正则匹配&#xff0c;如果自定义了 suffix 格式&#xff0c;必须同步更新 extMatch 的正则表达式&#xff08;保证正则表达式可以正常…

国庆出游季,南卡Runner Pro5骨传导耳机让旅途更完美!

国庆长假将至&#xff0c;无论是计划一场远行还是近郊的户外活动&#xff0c;一款适合的耳机都能让旅途更加愉快。南卡Runner Pro5骨传导耳机以其独特的设计和功能&#xff0c;成为了国庆出行的理想伴侣。 首先&#xff0c;骨传导耳机通过颅骨传递声音&#xff0c;避免了传统耳…

从理论到实战:人才培养基地如何缩短职场适应期?

在当今竞争激烈的职场环境中&#xff0c;从校园到职场的过渡对于许多新人来说充满挑战。而人才培养基地正以其独特的方式&#xff0c;努力缩短这一职场适应期。 人才培养基地首先注重理论与实践的结合。不再是单纯的知识灌输&#xff0c;而是将理论教学与实际操作紧密相连。 实…

JAVA——方法重载

方法的重载&#xff1a;多个方法在同一个类&#xff0c;方法名相同&#xff0c;参数/参数类型/参数数量不同 返回值不能作为重载条件 public class demo9_12_2 {public static void main(String[] args) {//调用&#xff0c;方法的签名getMax();getMax(10);getMax(10.9F);}//…

如何在Word中复制整页内容并保持原有格式不变?

在日常处理工作时&#xff0c;我们经常需要在Word文档中复制和粘贴内容&#xff0c;特别是在处理报告方案等文档时&#xff0c;保持复制内容的格式不变显得尤为重要。本文将详细介绍如何在Word中复制整页内容并保持原有格式不变&#xff0c;确保文档的整洁性和一致性。 方法一&…

修改jupyter notebook 默认浏览器(不动配置文件,改系统默认浏览器)

最开始把联想浏览器切到EDGE就是用的修改系统的默认浏览器。不知怎么的现在搜到的方法都是在说修改配置文件&#x1f613;。 不想动配置文件&#xff0c;平时对默认浏览器没有特殊要求的&#xff0c;可以用这个方法。 这里是把默认浏览器改成联想浏览器&#xff0c;电脑也是联…

【学习笔记】SSL密码套件的选择

往期介绍了TLS/SSL中4种密码套件&#xff0c;分别是Key Exchang、Authentication、Encryption和Hashing&#xff0c;每种密码套件下又包含多种协议。 当我们部署SSL证书时&#xff0c;我们需要选择自己支持哪种密码套件。我们可能想要用最安全的&#xff0c;但我们的潜在客户可…

一文弄懂FLink状态及checkpoint源码

一文弄懂Flink重要源码 1. Flink 状态源码1.1 valueState源码1.1.1 Update方法1.1.2 Value 方法 2. checkPoint 源码分析2.1 SourceStreamTask的checkpoint实现2.1.1 JobManager端checkpoint调度2.1.2 ScheduledTrigger定时触发checkpoint2.1.3 SourceStreamTask的Checkpoint执…

搭建 WordPress 及常见问题与解决办法

浪浪云活动链接 &#xff1a;https://langlangy.cn/?i8afa52 文章目录 环境准备安装 LAMP 堆栈 (Linux, Apache, MySQL, PHP)配置 MySQL 数据库 安装 WordPress配置 WordPress常见问题及解决办法数据库连接错误白屏问题插件或主题冲突内存限制错误 本文旨在介绍如何在服务器上…

推荐一款非常强大的表单校验库:React Hooks Form

React Hooks Form react-hook-form 是一个专注于管理 React 表单状态的库。它的核心理念是利用 React Hooks 来简化表单的处理过程。与其他表单管理库相比&#xff0c;它的优势在于性能和简洁性。它不需要在每次输入更改时重新渲染整个表单组件&#xff0c;从而提高了性能。 …