如何在反应中使用样式组件(不是材料 UI 类!)设置材料 UI 选择组件的样式?

酸碱度

我正在努力使用样式组件而不是材料类来设置我的材料 UI 选择组件的样式。我正在使用 material-ui/core 4.12.3。

如果我使用例如来自材料的旧 makeStyles 组件并创建我自己的类,它就可以正常工作,以及例如内联样式或通过 menuProps 进行样式设置。

作品

  const useStyles = makeStyles((theme) => ({
    icon: {
      top: 0,
      marginRight: '1px',
    },
    selectRoot: {
      '&:focus': {
        backgroundColor: 'white',
        borderRadius: '10px',
      },
    },
  }))

作品

          <StyledSelect>
          classes={
            {
              //icon: classes.icon,
              //root: classes.selectRoot,
            }
          }

      MenuProps={{
        anchorOrigin: {
          vertical: 'bottom',
          horizontal: 'left',
        },

        getContentAnchorEl: null,
        style: {
          maxHeight: 400,
        },
      }}
                  style={{
                    border: '1px solid grey',
                    backgroundColor: 'white',
                    borderRadius: '10px',
                    width: '140px',
                    height: '40px',
                  }}
</StyledSelect>

但是对于项目的完整性和限制,我更喜欢使用样式组件来设置样式。

到目前为止,我只设法改变字母颜色。即使我尝试使用开发工具中出现的类名称来设置它的样式,也没有其他方法真正起作用。

不工作(遗憾)

  StyledSelect: styled(Select)`
  border: '1px solid grey';
  backgroundColor: white;
  borderRadius: '10px';
  width: '140px';
  height: '40px'

  '&:focus': {
    backgroundColor: 'white';
    background-color: 'white';
    borderRadius: '10px',
  };
  .MuiSelect-select:focus {
    backgroundColor: 'white';
    background-color: 'white';
    borderRadius: '10px',
  },
    &.MuiSelect-select:focus {
      backgroundColor: 'white',
      background-color: 'white',
      borderRadius: '10px',
    },
    & .MuiInputBase-formControl {
      border-color: red;
    }
    icon: {
      top: 0,
      marginRight: '1px',
    },

在这种情况下,材料文档并没有那么有帮助。有任何想法吗 ?

雅各布·K

由于 Material UI 组件不是简单的 HTML 元素,因此它并没有做太多事情。例如,如果您在开发工具中查看 HTML 树,“选择”不是呈现为<select>...</select>而是呈现为...

<div>
  <label />
  <div>
    <div />
    <input />
    <svg>
      <path />
    </svg>
    <fieldset>
      <legend>
        <span />
      </legend>
    </fieldset>
  </div>
</div>

样式嵌套在上述组件树的各个级别,因此要修改特定的边框或背景样式,您必须使用特定的选择器准确知道要定位的元素(因为id每次渲染时属性都会更改)。

相反,您可以继续使用材质文档中提供的 css 属性,但不要尝试通过将 Material UI 根组件定义为样式组件来替换它。如果您将 Material Select 组件包装在您自己的另一个由 styled-components 制作的 div 中,那么您可以将这些属性传递给子 Material 元素,就像您现在所做的那样。

有些属性需要一个“!important”标志来覆盖 Material 中的样式,有些则需要您使用somethingProps(例如“menuProps”、“inputProps”等)属性来覆盖样式。这是因为虽然使用文档中的类名和“!important”标志手动覆盖它非常适合定位树中的一个(或几个)组件,但当您使用somethingProps属性时,Material 会自动级联这些树中正确元素的样式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

React找不到材料UI组件的导入

使用样式化组件的UI库

造型材料UI组件

根据标签大小设置材料UI选择的宽度

设置材料UI CardHeader组件文本样式的问题

设置材料UI选择宽度?

添加具有材料表更改的组件Material-UI AppBar样式

如何忽略组件的Material UI主题样式?

如何在材料ui抽屉组件中添加页脚?

如何在样式化组件中过度编写material-ui的嵌套类?

在材料UI使用样式中使用同级组合器

材质UI:在TablePagination中设置嵌套组件的样式

如何使用样式化组件和Material-UI为组件设置主题?

Material-UI中使用样式组件的媒体查询

如何覆盖材料UI组件中的特定样式

将材料Ui类名称替换或添加到React Data Table组件类名称

具有样式化组件的材料ui按钮

设置材料UI React组件的样式

选择组件的inputProps(材料UI)

如何使用样式化的组件来样式化从材料用户界面中选择的样式?

如何在组件中获取材料 ui 选择器的值?

选择在反应材料 ui 中单击图标组件(下拉箭头)不起作用

使用扩展为组件的类时,React 中的菜单材料 UI 组件不起作用

我如何在反应中使用材料 ui 库从我的自动完成框中选择

如何在 Material UI 中使用 useStyles 而不是 withStyles 设置切换开关的样式?

在样式组件中使用 Material-ui 主题

如何在响应式屏幕的材料 ui 中使用模态的纸组件锁定关闭按钮的位置?

覆盖材料 UI 样式的问题

错误时选择组件材料 ui 中的边框颜色覆盖