当前位置: 首页 > 面试题库 >

Material-UI 4.1.2样式选择SelectInput

朱英范
2023-03-14
问题内容

我想更改SelectInput的样式。我正在使用基于类的组件。我是这样设置的:

const QuoteListStyle = {
  color: "#eceff1",
  borderBottom: "1px solid #90caf9",
  "&:hover:not($disabled):not($focused):not($error) $underline": {
    borderBottom: "2px solid #90caf9"
  },
  width: "196px",
  marginTop: "1rem"
};

然后在渲染中,我在“选择”部分中有此部分:

<FormControl>
                    <Select
                      style={QuoteListStyle}
                      value={this.state.quoteListName}
                      onChange={this.handleChange}
                      displayEmpty={true}
                      renderValue={
                        this.state.quoteListName > 0
                          ? undefined
                          : () => <em>{this.state.quoteListName}</em>
                      }
                    >
                      <MenuItem value="" disabled>
                        <em>Select a Quote List</em>
                      </MenuItem>

                      {data.me.quoteList.map(item => {
                        return (
                          <MenuItem value={item.name} key={item.name}>
                            {item.name}
                          </MenuItem>
                        );
                      })}
                    </Select>
                  </FormControl>

我正在使用仅带有下划线的基本Select组件。我想更改下划线的颜色和大小。我在源代码中看过这里:

https://github.com/mui-org/material-ui/blob/master/packages/material-
ui/src/Select/SelectInput.js

我需要什么来控制下划线?我在组件加载时看到了我想要的下划线。悬停无法正常工作。从“选择”中选择一个项目后,我会在顶部看到我的样式,但默认样式在下面,并且我可以看到其中一些颜色。

我可以使用替代来做到这一点。这是我的主题代码:

const theme = createMuiTheme({
  palette: {
    primary: {
      main: "#90caf9",
      contrastText: "#f5f5f5"
    },
    secondary: {
      main: "#19857b"
    },
    error: {
      main: "#f44336"
    },
    background: {
      default: "#102027",
      paper: "#37474f"
    },
    text: {
      primary: "#eceff1",
      secondary: "#90caf9"
    },
    button: {
      borderColor: "#90caf9"
    }
  },
  overrides: {
    MuiOutlinedInput: {
      root: {
        "& $notchedOutline": {
          borderColor: "#90caf9"
        },
        "&:hover:not($disabled):not($focused):not($error) $notchedOutline": {
          borderColor: "#90caf9",
          borderWidth: 2
        },
        "&$focused $notchedOutline": {
          borderColor: "#90caf9"
        }
      },
      notchedOutline: {}
    },
    MuiSelect: {
      icon: {
        fill: "#90caf9"
      }
    }
  }
});

export default theme;

我还查看了devtools,发现了这一点:

<div class="MuiSelect-root MuiSelect-select MuiSelect-selectMenu MuiInputBase-input MuiInput-input MuiInputBase-inputSelect" aria-pressed="false" tabindex="0" role="button" aria-haspopup="true"><em>Tech</em></div>

我不确定如何使用它来定位我想要的东西。


问题答案:

您不能"&:hover:not($disabled):not($focused):not($error) $underline"以内联样式定位其他规则或伪类(例如)。相反,您需要使用CSS类(例如,通过makeStyles用于功能组件,或者withStyles可以与类和功能组件一起使用)。

您需要自定义的样式在Input中。下面是一个如何自定义下划线的示例。

您可以在我的相关答案中阅读有关此内容的更多信息:

    import React from "react";
    import ReactDOM from "react-dom";

    import FormControl from "@material-ui/core/FormControl";
    import InputLabel from "@material-ui/core/InputLabel";
    import Select from "@material-ui/core/Select";
    import MenuItem from "@material-ui/core/MenuItem";
    import { makeStyles } from "@material-ui/core/styles";

    const useStyles = makeStyles({
      select: {
        "&:before": {
          // normal
          borderBottom: "1px solid orange"
        },
        "&:after": {
          // focused
          borderBottom: `3px solid green`
        },
        "&:hover:not(.Mui-disabled):not(.Mui-focused):not(.Mui-error):before": {
          // hover
          borderBottom: `2px solid purple`
        }
      }
    });

    const App = () => {
      const [age, setAge] = React.useState("");

      const classes = useStyles();
      return (
        <div className="wrapper">
          <FormControl style={{ minWidth: "200px" }}>
            <InputLabel htmlFor="age-simple">Age</InputLabel>
            <Select
              className={classes.select}
              value={age}
              onChange={event => setAge(event.target.value)}
              inputProps={{
                name: "age",
                id: "age-simple"
              }}
            >
              <MenuItem value="" disabled />
              <MenuItem value={10}>Ten</MenuItem>
              <MenuItem value={20}>Twenty</MenuItem>
              <MenuItem value={30}>Thirty</MenuItem>
            </Select>
          </FormControl>
        </div>
      );
    };

    const rootElement = document.getElementById("root");
    ReactDOM.render(<App />, rootElement);



 类似资料:
  • 问题内容: 如何为mat-select的面板组件设置样式。从文档中我得到我需要提供panelClass,所以我将其设置为: 我在开发人员工具中检查了此类是否已附加到DOM中的面板并已附加。因此,我将自定义scss类附加到此元素。现在,当我提供CSS时,它根本不起作用。例如,我的s​​css如下所示: 面板的宽度始终等于选择元素的宽度。有时在选项中,您的字符串太长,我想使其更宽一些。有什么办法可以做

  • 本文向大家介绍CSS样式选择选项,包括了CSS样式选择选项的使用技巧和注意事项,需要的朋友参考一下 要为<select>中的选项设置样式,您可以尝试运行以下代码, 示例

  • 问题内容: 我要使第二个选择框箭头与第一个相同。但是我不知道它们为什么不同,因为我没有设置箭头的样式。 问题答案: 在大多数情况下,浏览器和操作系统会确定选择框的样式,几乎不可能仅通过CSS对其进行更改。您必须研究替换方法。主要技巧是应用appearance: none,使您可以覆盖某些样式。 它不会替代OS选择菜单UI元素,因此与该操作相关的所有问题都不存在(无法以长列表为主要内容脱离浏览器窗口

  • 我一直在尝试更改选择选项的样式。例如添加颜色和背景似乎可以使用下面的代码。但它不起作用,例如边距:20px,边框或任何东西。一直在尝试不同的东西和JS和JQueary,但我不能让它工作,所有的提示都是欢迎的!:) null null

  • 问题内容: 选择器的Vuetify组件是: 但是,当选择器处于活动状态时,会出现许多嵌套组件(在检查时),例如,下拉菜单本身。我将如何设计样式?对于“可见”的Vuetify组件v- select,我可以手动添加一个类,然后直接在CSS中设置其样式。但是,我无法对隐藏的组件执行此操作。 我尝试使用“.menu__content”检查类进行样式设置,但它似乎不起作用。 如何在CSS中手动设置这些组件的

  • 本文最初于2015-10-03发表于博客园,并在GitHub上持续更新前端的系列文章。欢迎在GitHub上关注我,一起入门和进阶前端。 本文主要内容 CSS概述 CSS和HTML结合的三种方式:行内样式表、内嵌样式表、外部样式表 CSS四种基本选择器:标签选择器、类选择器、ID选择器、通用选择器 CSS几种扩展选择器:后代选择器、交集选择器、并集选择器 CSS样式优先级 前言 现在的互联网前端分三