当前位置: 首页 > 知识库问答 >
问题:

如何在Material-UI的TableSortText组件中自定义彩色文本和图标?

慕容成文
2023-03-14

我要做的是:

我试图向用户提供一个选项,通过传入一个包含属性的样式对象,如HeadCellColorHeadCellBackgroundColorBodyCellColorBodyCellBackgroundColor等,为TableHeadTableBody中的单元格着色,从而为我的EnhancedTable组件提供自定义样式。

TableHead组件中,我使用了TableSortLabel,其方式与在此material-ui文档示例中所做的类似:https://material-ui.com/components/tables/#sorting-amp-selection

我希望自定义颜色的文本和箭头图标在悬停和当活动的基础上,由用户提供的道具。

让我们看看TableSortLabel在不同情况下的颜色:文本的颜色最初是灰色的,没有箭头。当鼠标悬停在上面时,会出现一个灰色箭头,文本变为黑色。单击它时,活动状态被设置,灰色箭头变为黑色,文本永久变为黑色,直到活动状态被移除。

到目前为止我所尝试的:

const useStyles = makeStyles({
  tableSortLabel: props => ({
    backgroundColor: "blue",
    color: props.headCellColor,
    fill: props.headCellColor,
    "&:hover": {
      backgroundColor: "blue"
    }
  })
});

function EnhancedTableHeadCell(props) {
  const { isActive, onHoverSortState, clickHandler, ...otherProps } = props;
  const classes = useStyles(props.styles);

  return (
    <FancyTableCell styles={props.styles} {...otherProps}>
      <TableSortLabel
        active={isActive}
        classes={{
          icon: classes.tableSortLabel,
          active: classes.tableSortLabel
        }}
        direction={onHoverSortState}
        onClick={clickHandler}
      >
        {props.children}
      </TableSortLabel>
    </FancyTableCell>
  );
}

这是它在浏览器中的样子:https://i.postimg.cc/fw7w2mrb/c1.jpg

第一个是正常标头,第二个是悬停状态,第三个是单击时(活动状态)。

我们可以观察到,在所有三种情况下(正常、悬停、活动),文本颜色完全不受colorcss属性的影响。悬停时,backgroundcolor只影响图标而不影响文本。但是,我们可以看到backgroundcolor在文本处于活动状态时会影响文本。所有的事情都按照图标的预期进行。唯一的问题是案文。

我怎么可能做错呢?我怎样才能解决我的问题?

共有2个答案

沃博裕
2023-03-14

您的问题的解决方案如下:

MuiTableSortLabel: {
      root: {
        color: textPrimary,

        // if you want to have icons visible permanently
        // '& $icon': {
        //   opacity: 1,
        //   color: primaryMain
        // },

        "&:hover": {
          color: primaryMain,

          '&& $icon': {
            opacity: 1,
            color: primaryMain
          },
        },
        "&$active": {
          color: primaryMain,

          // && instead of & is a workaround for https://github.com/cssinjs/jss/issues/1045
          '&& $icon': {
            opacity: 1,
            color: primaryMain
          },
        },
      },
    }

我通过我的ThemeProvider全局使用这种重新样式,但您当然可以在单个组件中单独使用“WithStyles”HOC(参见示例中的“BootStrapButton”)

弓玉书
2023-03-14

对我起作用的是:

const StyledTableSortLabel = withStyles((theme: Theme) =>
createStyles({
    root: {
      color: 'white',
      "&:hover": {
        color: 'white',
      },
      '&$active': {
        color: 'white',
      },
    },
    active: {},
    icon: {
      color: 'inherit !important'
    },
  })
)(TableSortLabel);

您可以参考以下内容来提高css的特异性:https://material-ui.com/customization/components/#伪类

 类似资料:
  • 问题内容: 我们想更改Material-ui自动完成组件上的文本颜色,轮廓和填充。 代码如下: 我们可以通过这样的代码更改TextInput颜色 但是以这种方式应用样式会影响“自动完成”功能(它会失去自动完成功能,其行为类似于普通的TextField)。 我们尝试了许多样式和className选项都无济于事。 感谢任何建议。 问题答案: 这是您尝试过的方法(在样式上可以使用,但破坏了自动完成功能)

  • 问题内容: 如何在Python中将彩色文本输出到终端? 问题答案: 这在某种程度上取决于您所使用的平台。最常见的方法是打印ANSI转义序列。举一个简单的例子,这是Blender构建脚本中的一些python代码: 要使用这样的代码,您可以执行以下操作 或者,使用Python3.6 +: 这将在包括OS X,Linux和Windows的Unix上运行(前提是您使用ANSICON,或者在Windows

  • 我需要定制: 背景未选中 选中文本颜色 文本颜色未选中

  • 我正在使用IText7从html字符串生成pdf。现在,我需要对段落应用自定义颜色和自定义字体或字体系列。 如何使用Itext7实现这一点? 谢谢

  • 我们为应用程序设计了一些自定义控件,如CustomButton、CustomTexView等。这些控件定义应用程序的主题并具有标准大小。现在我们正计划在我们的项目中使用SwiftUI。如何在SwiftUI结构中使用这些自定义控件? 即。 }

  • 跟着这个答案https://stackoverflow.com/a/55113171/324969这个答案https://stackoverflow.com/a/60686826/324969. 如果我按下Ctrl,逗号,在设置中搜索“颜色”,单击settings.json中的