使用React material-ui更改OutlinedInput的轮廓

时间:2019-01-23 11:10:22

标签: css reactjs material-ui

快速笔记:这不是How to change outline color of Material UI React input component?的重复

使用material-ui(反应),我无法删除悬停或聚焦时的轮廓。我使用此输入的原因是在发生警告时请求添加一些红色边框。我可以更改焦点样式和悬停样式。下图对此进行了测试: enter image description here

将输入焦点放在此CSS的位置:

outlinedInputFocused: {
     borderStyle: 'none',
     borderColor: 'red',
     outlineWidth: 0,
     outline: 'none',
     backgroundColor: 'green'
  },

组件

 <OutlinedInput
            disableUnderline={true}
            notched={true}
            id="adornment-weight"
            classes={{root: classes.outlinedInput, focused: classes.outlinedInputFocused}}
            value={this.state.budgetValue}
            onChange={evt => this.updateBudgetValue(evt)}
            onKeyPress={evt => this.handleKeyPress(evt)}
            endAdornment={<InputAdornment sposition="end">BTC</InputAdornment>}
          />

您可以看到图像的颜色为绿色,但是仍然有轮廓。即使outlineWidth为0,并且CSS中的outline设置为none。如何更改/禁用此轮廓?

4 个答案:

答案 0 :(得分:0)

OutlinedInput的设计方式是无法关闭其轮廓,必须使用TextFieldvariant默认为“概述”,焦点为“无”。 您可以使用Outlined Input Adornments here

查看TextField的示例

答案 1 :(得分:0)

了解如何覆盖这些样式的关键是查看它们在Material-UI源代码中的定义。您引用的问题还显示了一些所需的语法。

下面是OutlinedInput.js中样式的缩写版本(我省略了与轮廓无关的样式):

export const styles = theme => {
  const borderColor =
    theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)';

  return {
    /* Styles applied to the root element. */
    root: {
      position: 'relative',
      '& $notchedOutline': {
        borderColor,
      },
      '&:hover:not($disabled):not($focused):not($error) $notchedOutline': {
        borderColor: theme.palette.text.primary,
        // Reset on touch devices, it doesn't add specificity
        '@media (hover: none)': {
          borderColor,
        },
      },
      '&$focused $notchedOutline': {
        borderColor: theme.palette.primary.main,
        borderWidth: 2,
      },
      '&$error $notchedOutline': {
        borderColor: theme.palette.error.main,
      },
      '&$disabled $notchedOutline': {
        borderColor: theme.palette.action.disabled,
      },
    },
    /* Styles applied to the root element if the component is focused. */
    focused: {},
    /* Styles applied to the root element if `disabled={true}`. */
    disabled: {},
    /* Styles applied to the root element if `error={true}`. */
    error: {},
    /* Styles applied to the `NotchedOutline` element. */
    notchedOutline: {}

  };
};

OutlinedInput的“轮廓”是通过嵌套在其中的NotchedOutline组件上的border控制的。为了影响该嵌套元素,您需要定义一个“ notchedOutline”类(即使为空),然后可以将其用于针对父元素的不同状态(例如,聚焦,悬停)将该元素作为目标。

下面是一个完全删除边框的示例:

import React from "react";
import ReactDOM from "react-dom";
import OutlinedInput from "@material-ui/core/OutlinedInput";
import InputAdornment from "@material-ui/core/InputAdornment";
import { withStyles } from "@material-ui/core/styles";

const styles = theme => ({
  root: {
    "& $notchedOutline": {
      borderWidth: 0
    },
    "&:hover $notchedOutline": {
      borderWidth: 0
    },
    "&$focused $notchedOutline": {
      borderWidth: 0
    }
  },
  focused: {},
  notchedOutline: {}
});
function App(props) {
  const { classes } = props;
  return (
    <div className="App">
      <OutlinedInput
        disableUnderline={true}
        notched={true}
        id="adornment-weight"
        classes={classes}
        value={1}
        endAdornment={<InputAdornment sposition="end">BTC</InputAdornment>}
      />
    </div>
  );
}
const StyledApp = withStyles(styles)(App);
const rootElement = document.getElementById("root");
ReactDOM.render(<StyledApp />, rootElement);

Edit 94k34o11np

答案 2 :(得分:0)

您可以使用以下内联样式:

<MyComponent style={{outline: 'none'}} />

答案 3 :(得分:0)

2.4.7 焦点可见:任何可通过键盘操作的用户界面都具有键盘焦点指示器可见的操作模式。 (AA级)

https://www.w3.org/TR/2008/REC-WCAG20-20081211/#navigation-mechanisms-focus-visible https://www.w3.org/WAI/WCAG21/quickref/?versions=2.0#qr-navigation-mechanisms-focus-visible