如何在不使用主题的情况下自定义 Material-UI 的下划线?

Posted

技术标签:

【中文标题】如何在不使用主题的情况下自定义 Material-UI 的下划线?【英文标题】:How do I custom style the underline of Material-UI without using theme? 【发布时间】:2019-09-25 04:30:59 【问题描述】:

variant="outlined" 和我在InputProps 中使用notchedOutline 时,我在大纲自定义样式方面取得了成功。

否则 - variant=[anything else] 仅存在底部边框 - 它不起作用,即使 underline 作为 InputProps 中的键/类。

我什至尝试过root

export default ( boxType, classes, value, onChange, style ) => (
  <TextField
    variant=boxType || "standard"
    value=value
    onChange=onChange
    InputProps=
      classes: 
        notchedOutline: classes.notchedOutline,
        underline: classes.underline,
        root: classes.TextInputField
      ,
      style
    
  />
)

【问题讨论】:

【参考方案1】:

为了确定如何执行此操作,查看Input 中的默认样式是如何完成的会很有帮助。

:before 用于默认和悬停样式,:after 用于焦点样式。

这是一个如何设置样式的工作示例:

import React from "react";
import ReactDOM from "react-dom";
import TextField from "@material-ui/core/TextField";
import  withStyles  from "@material-ui/core/styles";
const styles = 
  underline: 
    "&:before": 
      borderBottom: "2px solid green"
    ,
    "&:hover:not($disabled):not($focused):not($error):before": 
      borderBottom: "2px solid blue"
    ,
    "&:after": 
      borderBottom: "3px solid purple"
    
  ,
  disabled: ,
  focused: ,
  error: 
;
function App( classes ) 
  return (
    <div className="App">
      <TextField InputProps= classes  />
    </div>
  );

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

【讨论】:

我认为你正在做某事:-)。给我一点。 工作就像一个魅力!【参考方案2】:

你可以使用 InputProps= disableUnderline: true .它将在所有情况下禁用 textField 的下划线。 在 react-material-ui 版本 3 及更高版本上测试。

【讨论】:

【参考方案3】:

不确定您使用的是哪个版本的 material-ui,但您可以根据需要覆盖类,请参阅以下 API 文档:

https://material-ui.com/api/outlined-input/#demos

https://material-ui.com/api/outlined-input/

【讨论】:

该列表中没有针对underline的类。【参考方案4】:
const useStyles = makeStyles(
  underline: 
    "&&&:before": 
      borderBottom: "none"
    ,
    "&&:after": 
      borderBottom: "none"
    
  
);

三重 & 增加了 css 规则的特殊性,所以我们可以覆盖默认样式。就我而言,我将其设置为无。您可以根据需要设置样式。

【讨论】:

以上是关于如何在不使用主题的情况下自定义 Material-UI 的下划线?的主要内容,如果未能解决你的问题,请参考以下文章

在不破坏 DRY 的情况下自定义 QuerySet 和 Manager?

是否可以在不使用 ObjectDataSource 的情况下自定义 GridView(在 ASP.NET 中,最好是 3.5)分页?

如何在不使用xml的情况下修改材质组件的主题?

eclipse下自定义主题背景

如何在不使用 MUIThemeProvider 的情况下覆盖 material-ui TextField 组件的样式?

如何在 material-ui 主题中导入和使用自定义字体?