如何在选中时覆盖 Material UI 开关组件的样式?

2023-11-21

我想控制开关组件的颜色,无论是在选中还是未选中时。默认情况下它是红色的。我希望当开关状态为“球形旋钮”时为黄色checked: true我希望它是灰色的,什么时候checked: false

I must通过使用来实现样式createMuiTheme and ThemeProvider由于项目的性质,我无法直接在组件上使用类。

我尝试在这里遵循他们定制的紫色旋钮的样式示例:https://codesandbox.io/s/x8bz8来源:https://material-ui.com/components/switches/

不幸的是,我无法弄清楚如何在检查时控制球的颜色(它总是回落到默认的红色)。我已经成功设置了选中和未选中时轨道的颜色,并且我还能够在未选中时设置球的颜色。有人可以帮我弄清楚如何在检查球时将颜色样式应用到球上吗?

我做了一个 CodeSandbox,我一直在其中乱搞:https://codesandbox.io/s/material-demo-b6153

 const theme = createMuiTheme({
    overrides: {
      MuiSwitch: {
        switchBase: {
          color: "#ccc", // this is working
          "&$checked": { // this is not working
            color: "#f2ff00"
          }
        },
        track: { // this is working
          opacity: 0.2,
          backgroundColor: "#fff",
          "$checked$checked + &": {
            opacity: 0.7,
            backgroundColor: "#fff"
          }
        }
      }
    }
  });

  return (
    <ThemeProvider theme={theme}>
      <FormGroup>
        <FormControlLabel
          control={
            <Switch
              checked={state.checkedA}
              onChange={handleChange}
              name="checkedA"
            />
          }
          label="Custom color"
        />
      </FormGroup>
    </ThemeProvider>
  );

我也尝试过这个:

checked: {
  "& + $bar": {
    opacity: 1.0,
    backgroundColor: "rgb(129, 171, 134)" // Light green, aka #74d77f
  }
},

在这个回答中提出了一个有点类似的问题:选中时如何正确使用 MUISwitch“栏”颜色的主题覆盖?但这似乎不起作用,无论出于何种原因,可能是 MUI 版本的差异,或者因为在内部创建时样式不同createMuiTheme.


Switch 默认使用辅助颜色.

然后将拇指的颜色控制在colorSecondaryCSS。这里有默认样式对于该类:

  /* Styles applied to the internal SwitchBase component's root element if `color="secondary"`. */
  colorSecondary: {
    '&$checked': {
      color: theme.palette.secondary.main,
      '&:hover': {
        backgroundColor: fade(theme.palette.secondary.main, theme.palette.action.hoverOpacity),
        '@media (hover: none)': {
          backgroundColor: 'transparent',
        },
      },
    },
    '&$disabled': {
      color: theme.palette.type === 'light' ? theme.palette.grey[400] : theme.palette.grey[800],
    },
    '&$checked + $track': {
      backgroundColor: theme.palette.secondary.main,
    },
    '&$disabled + $track': {
      backgroundColor:
        theme.palette.type === 'light' ? theme.palette.common.black : theme.palette.common.white,
    },
  },

您可以使用以下内容调整主题中选中的颜色(显示覆盖拇指和轨道):

  const theme = createMuiTheme({
    overrides: {
      MuiSwitch: {
        switchBase: {
          // Controls default (unchecked) color for the thumb
          color: "#ccc"
        },
        colorSecondary: {
          "&$checked": {
            // Controls checked color for the thumb
            color: "#f2ff00"
          }
        },
        track: {
          // Controls default (unchecked) color for the track
          opacity: 0.2,
          backgroundColor: "#fff",
          "$checked$checked + &": {
            // Controls checked color for the track
            opacity: 0.7,
            backgroundColor: "#fff"
          }
        }
      }
    }
  });

Edit customize Switch via theme


对于 MUI v5

对于 v5,传递给的对象的结构createTheme改变了。另一个变化是primary现在是默认颜色而不是secondary, 所以colorPrimary样式需要被覆盖而不是colorSecondary.

这是 v5 的等效代码:

import React from "react";
import FormGroup from "@mui/material/FormGroup";
import FormControlLabel from "@mui/material/FormControlLabel";
import Switch from "@mui/material/Switch";
import { createTheme, ThemeProvider } from "@mui/material/styles";

export default function CustomizedSwitches() {
  const [state, setState] = React.useState({
    checkedA: true
  });

  const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
    setState({ ...state, [event.target.name]: event.target.checked });
  };

  const theme = createTheme({
    components: {
      MuiSwitch: {
        styleOverrides: {
          switchBase: {
            // Controls default (unchecked) color for the thumb
            color: "#ccc"
          },
          colorPrimary: {
            "&.Mui-checked": {
              // Controls checked color for the thumb
              color: "#f2ff00"
            }
          },
          track: {
            // Controls default (unchecked) color for the track
            opacity: 0.2,
            backgroundColor: "#fff",
            ".Mui-checked.Mui-checked + &": {
              // Controls checked color for the track
              opacity: 0.7,
              backgroundColor: "#fff"
            }
          }
        }
      }
    }
  });

  return (
    <ThemeProvider theme={theme}>
      <FormGroup>
        <FormControlLabel
          control={
            <Switch
              checked={state.checkedA}
              onChange={handleChange}
              name="checkedA"
            />
          }
          label="Custom color"
        />
      </FormGroup>
    </ThemeProvider>
  );
}

Edit customize Switch via theme

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在选中时覆盖 Material UI 开关组件的样式? 的相关文章

  • JavaScript 中的 ParseFloat 函数

    当我添加两个文本框值时1 001 and 0 001然后我做了一个parseFloat I get 1 0019999999 我要它1 002 你能帮助我吗 JavaScriptNumber http www w3schools com j
  • 如何在D3节点中放置图像?

    到目前为止 我已经创建了这些 D3 节点 用于创建可折叠的层次树 到目前为止 这些节点的颜色为 AA1C1C 深红色 以表明如果您单击它们 它们将扩展到更多节点 我想要做的是在节点中使用图像中的位置 这对于所有用户来说都是一个加号 以知道它
  • 单击元素外部时触发事件的指令

    我知道有很多问题都在问类似的事情 但没有人真正解决我的问题 我正在尝试构建一个指令 当鼠标单击当前元素外部时 该指令将执行表达式 为什么我需要这个功能 我正在构建一个应用程序 在这个应用程序中 有 3 个下拉菜单 5 个下拉列表 如选择的
  • HTML5 Audio Element 无法在 IOS 11 设备上的 safari 中播放 mp3 直播

    我是一家广播公司的网络开发人员 自 iOS 11 发布以来 我们收到了一些用户投诉 称我们的音频直播流无法再在 IOS 11 设备上播放 为了将流嵌入我们的网站 我们使用 HTML5 AudioElement 在 iOS 11 的 iPho
  • 代理阻止网络套接字?如何绕行

    我有一个用 Python 编写的正在运行的 websocket 服务器 来自https github com opiate SimpleWebSocketServer https github com opiate SimpleWebSoc
  • 图像未完整显示在身体背景上

    例子 http jsbin com opokev 20 http jsbin com opokev 20 完整图片 http i53 tinypic com 347a8uu jpg http i53 tinypic com 347a8uu
  • 如何为 Apollo 的 React HOC 定义 props 接口?

    我正在尝试使用 Apollo 的 React HOC 来获取数据并将其传递给我的组件 但出现以下错误 Argument of type typeof BrandList is not assignable to parameter of t
  • 将 JSON 字符串传递给 Django 模板

    我一直在用头撞墙 试图找出为什么我无法将从 Django 模型生成的 JSON 字符串传递到模板的 javascript 静态文件中 事实证明 问题不在模型级别 使用serializers serialize 在脚本本身中放入相同的字符串将
  • 背景大小不起作用

    这是我的 CSS banner text BG background 00A7E1 url images sale tag png left center no repeat important background size 20px 2
  • 输入号码时自动格式化 SSN

    我有一个文本字段 用户输入 SSN 号码 输入自身时 它应该格式化 就像关于文本字段的更改 它应该格式化999 999 999以这种方式在显示器本身上 kottenator 的脚本几乎已经完成 但它每隔 3 位数字就中断该值 而不是 3 位
  • 如何列出特定服务器的所有成员?

    我的代码是 const list client guilds find id 335507048017952771 for user of list users console log user 1 username 这实际上没有任何作用
  • queue.js 是如何工作的?

    我一直试图理解如何Mike Bostock 的queue js https github com mbostock queue blob master queue js有效 但我看不出它是如何工作的 我不明白的部分是代码如何设法继续执行回调
  • EaselJS Alpha 遮罩滤镜

    我对 Canvas 还很陌生 我一直在尝试将图像颠倒过来EaselJS Alpha 蒙版 http www createjs com demos easeljs alphamaskreveal示例 以便初始图像清晰 并且您可以paint是模
  • CSS - 最大宽度和椭圆

    我有一个包含文本的跨度 我希望跨度扩大到最大 500px 以容纳里面的文本 达到最大值后 我希望文本为任何溢出最大宽度的文本显示省略号 这可能吗 我尝试了以下方法 但这并没有达到目的 Thanks position absolute top
  • 在成功回调之前修改 JSONP 结果

    我想从外部服务加载一些 JSON 数据 然而 它提供 foo bar useful 而我真正关心的是 有用 的部分 我需要将那部分传递给success打回来 我正在尝试使用Deferred一次从多个数据源加载 类似this https st
  • 如何控制谷歌地图标记的不透明度

    我需要根据时间使一些标记半透明 有什么方法可以控制标记的 CSS 不透明度吗 或者是否可以可靠地找出标记的 DOM 元素 我使用 Google 地图 API v3 标记的不透明度可以设置为marker setOptions opacity
  • 在 gulp 和 browsersync 问题中观看新文件

    我使用 browsersync 在文件更改时重新加载浏览器 而且它工作完美 但是当我创建新文件 例如 html scss js 时 bowsersync 不起作用 如何解决这个问题 gulpjs Browser Sync gulp task
  • Twitter 引导选项卡和 JavaScript 事件

    我正在一个项目中使用 twitter bootstrap 特别是它的选项卡功能 http twitter github com bootstrap javascript html tabs http twitter github com b
  • 显示对象内容 - JS/jQuery

    With this data events 返回 object Object 我需要看看里面到底发生了什么 我找到了这个 var Finder each this data events function i n Finder Name i
  • 如何从 vue 组件调用 App.vue 中的方法

    我有一个 vue 组件和一个 vue 元素声明 如下所示 Vue component todo item template li This is a todo li methods test function I am getting an

随机推荐

  • Tomcat 7“严重:子容器在启动期间失败”

    基本上 我写了一个springMVC应用程序 对于 Spring 来说 我的方式是新手方法 该项目在 Tomcat 6 上运行良好 我的 Tomcat 服务器无法启动并引发以下异常 Apr 29 2012 3 41 00 PM org ap
  • 将 viewbag 与 jquery 一起使用 - asp.net mvc 3

    我在控制器中将 ViewBag IsLocal 设置为 true 我想使用 jquery 检查 ViewBag 值并显示警报 Code if ViewBag IsLocal true alert yeah 我从来没有收到警报 当我使用 Fi
  • Rails 中用户指定的动态模型字段

    有谁知道 gem 或允许用户向模型添加字段的良好实现 Ex 用户希望向联系人模型添加 内部注释 字段 在界面中 他们只需选择 新字段 gt 类型 文本 Thanks 抱歉 我不知道有任何插件可以做到这一点 但我有一个实施建议 这个想法是添加
  • 如何强制焦点编辑文本

    我阅读了有关如何设置要聚焦的对象的问题 但我似乎找不到我想要做的事情的答案 使用 On Focus Listener 我完成了以下操作 Ehour setOnFocusChangeListener new OnFocusChangeList
  • QML - 启动时主窗口位置(屏幕中心)

    我可以如何执行以下操作 我想在开始时在中央屏幕上显示我的主窗口 如果使用 QtQuick 可以这样做 import QtQuick 2 2 import QtQuick Controls 1 1 import QtQuick Window
  • 在Python中创建“反向”列表的最佳方法? [复制]

    这个问题在这里已经有答案了 在Python中 创建一个新列表的最佳方法是什么 该列表的项目与其他列表的项目相同 但顺序相反 我不想修改现有列表 这是我想到的一种解决方案 new list list reversed old list 复制也
  • 生成随机SQL Server 2008时间测试数据

    我正在尝试生成一个大型数据集 其中包括 SQL Server 2008 中的时间数据类型 我的表中已经有一些非时间数据 所以我想将整个过程保留在 T SQL 中并使用插入到 select 从一个表中获取部分数据 并将其与一些生成的数据 包括
  • 在 Android 启动器中托管小部件

    我正在为 android 制作一个启动器 但我被困在小部件部分 我在互联网上搜索了大约一个半小时 试图弄清楚如何在我的应用程序中托管小部件 但没有运气 我已经浏览了一些库存启动器和 ADW 启动器代码 但两者都只有数英里的代码 这是我第一次
  • 我无法安装回形针

    我是 Rails 新手 我需要安装 Peperclip https github com thoughtbot paperclip 但我不能 我已经查看了我能找到的所有教程 但我无法找到错误在哪里 我安装了 ImageMagick 并遵循
  • 增加字体真棒图标

    我在使用一些字体很棒的图标时遇到了一些麻烦 我正在尝试增加其中一些的大小 但由于某种原因 我似乎没有做任何事情 这是我的html div class span5 bookBuild div class well well small h4
  • 如何在 Javascript 中按 15 分钟间隔对 json 集合进行分组

    假设我们在 Javascript 中有一个这样的集合 date Fri 02 May 2014 19 05 00 GMT value abc date Fri 02 May 2014 23 43 00 GMT value jkl date
  • 显示自 master 的原始分支点以来 git 分支中的所有提交

    我正在寻找一种方法来查看自分支点 并包括它 以来活动分支上的所有提交 并希望自主分支以来 例如这样的情况 A B C D master E F branch A 我想要获得提交 F E 和 B 而 F 是 HEAD And for A B
  • Google Apps 脚本电子表格评论自动化

    今天我有一个关于 Google Apps 脚本的问题 特别是电子表格 我已经看过文档了here 是的 有关a的文档Sheet在电子表格中 但我一直无法找到我要找的东西 这是西奇 1 当在 Google 电子表格中编辑单元格时 我的函数会设置
  • 安装和运行 rcpp 时出错

    我对 R 还很陌生 所以对一个愚蠢的问题表示歉意 我正在尝试让 rcpp 运行 但我陷入了 R 的无限循环 要求我重新安装 RTools 我大致遵循了以下代码这篇博文 虽然第一次休息时我手动安装了所有东西 随后我又重新安装了几次 我正在运行
  • Java:负数右移

    我对负数的右移操作感到非常困惑 这是代码 int n 15 System out println Integer toBinaryString n int mask n gt gt 31 System out println Integer
  • 通过特定位置和经度获取屏幕坐标(android)

    我有一个增强现实的应用程序 其中存储了地铁 加油站 名胜古迹等信息以及相应的纬度和经度 现在 根据设备的方向 我将在设备的相机视图中显示每个站点的标记 类似于 Layar 和 Wikitude 找了三天没有间断 也没有找到人解释如何解决这个
  • 为什么 kinect 颜色和深度无法正确对齐?

    我已经研究这个问题很长一段时间了 并且我的创造力已经结束 所以希望其他人可以帮助我指明正确的方向 我一直在使用 Kinect 并尝试将数据捕获到 MATLAB 幸运的是 有很多方法可以做到这一点 我目前正在使用http www mathwo
  • 所有系统引用都缺少 Visual Studio 2013 NuGet Async

    我在 Visual Studio 2013 中设置了一个解决方案 团队项目 并且有一段时间为 NET Framework 4 0 安装了一个可用的 NuGet Microsoft Bcl 异步包 今天 当打开项目时 无法找到所有默认的 NE
  • 在@RequestParam中绑定列表

    我以这种方式从表单发送一些参数 myparam 0 myValue1 myparam 1 myValue2 myparam 2 myValue3 otherParam otherValue anotherParam anotherValue
  • 如何在选中时覆盖 Material UI 开关组件的样式?

    我想控制开关组件的颜色 无论是在选中还是未选中时 默认情况下它是红色的 我希望当开关状态为 球形旋钮 时为黄色checked true我希望它是灰色的 什么时候checked false I must通过使用来实现样式createMuiTh