材质 UI 输入组件下划线颜色



我正在尝试制作一个带有白色下划线的输入组件。 目前,当用户将鼠标悬停在组件上时,下划线颜色将更改为黑色。 我希望这是白色的。 我相信这应该可以通过覆盖下面概述的演示中的下划线类来实现。 不幸的是,它似乎不起作用,但是如果我在浏览器中手动检查样式并删除以下行,它会在浏览器中按预期工作。

示例:https://stackblitz.com/edit/yjpf5s(查看:https://yjpf5s.stackblitz.io(

在浏览器中手动删除样式以获得所需的功能:

.MuiInput-underline-365:hover:not(.MuiInput-disabled-364):not(.MuiInput-focused-363):not(.MuiInput-error-366):before {
border-bottom: 2px solid rgba(0, 0, 0, 0.87);

我正在使用的 overide 类样式:

underline: {
color: palette.common.white,
borderBottom: palette.common.white,
'&:after': {
borderBottom: `2px solid ${palette.common.white}`,          
},              
'&:focused::after': {
borderBottom: `2px solid ${palette.common.white}`,
},              
'&:error::after': {
borderBottom: `2px solid ${palette.common.white}`,
},                      
'&:before': {
borderBottom: `1px solid ${palette.common.white}`,          
},
'&:hover:not($disabled):not($focused):not($error):before': {
borderBottom: `2px solid ${palette.common.white}`,
},
'&$disabled:before': {
borderBottom: `1px dotted ${palette.common.white}`,
},              
},

编辑: 这是最终有效的解决方案:

'&:hover:not($disabled):not($focused):not($error):before': {
borderBottom: `2px solid ${palette.common.white} !important`,
},

我看了一下源代码,他们正在做这样的事情

{
focused: {},
disabled: {},
error: {},
underline: {
'&:before': {
borderBottom: '1px solid rgba(255, 133, 51, 0.42)'
},
'&:after': {
borderBottom: `2px solid ${theme.palette.secondary.main}`
},
'&:hover:not($disabled):not($focused):not($error):before': {
borderBottom: `2px solid ${theme.palette.secondary.main}`
}
}

它对我有用。

受到纪尧姆的回答的启发,这是我的工作代码,如果你不关心错误状态,可以简化:

const WhiteTextField = withStyles({
root: {
'& .MuiInputBase-input': {
color: '#fff', // Text color
},
'& .MuiInput-underline:before': {
borderBottomColor: '#fff8', // Semi-transparent underline
},
'& .MuiInput-underline:hover:before': {
borderBottomColor: '#fff', // Solid underline on hover
},
'& .MuiInput-underline:after': {
borderBottomColor: '#fff', // Solid underline on focus
},
},
})(TextField);

用:

<WhiteTextField
fullWidth
onChange={this.handleNameChange}
value={this.props.name}
/>

首先,像这样添加您的输入

<Input {...props} className='myClass' />

现在在您的 CSS 中

.gc-input-bottom::after{
border-bottom: 2px solid $input-border-color-active!important;
:hover{
border-bottom: none!important;
}
}
.gc-input-bottom::before{
border-bottom: 1px solid $input-border-bottom-color!important;
}

这里之前将为您提供始终可见的下划线访问权限,之后将为您提供单击后下划线访问权限。现在只做你想做的事

在截至 2023 年 3 月的当前版本的 MUI 中,对类型组件执行此操作的正确方法是:

<Input
sx={{ color: "#D8D8D8", ':before': { borderBottomColor: '#808080 !important' }, ':hover:before': { borderBottomColor: 'red !important' }, ':after': { borderBottomColor: 'red !important' }}}
id="username-input"
onKeyDown={keyPressedHandler}
onChange={(event: React.ChangeEvent<HTMLInputElement>) => {
setValues({ ...values, username: event.target.value });
}}
/>

此示例假定输入组件用于用户名条目。我在任何地方都添加了重要的内容来强制解决问题。我注意到没有 !important 标签,":hover:before"将无法工作。其他人可以在没有它的情况下工作。

尝试这样做

.MuiInput-underline-24:hover:not(.MuiInput-disabled-23):not(.MuiInput-focused-22):not(.MuiInput-error-25):before {
border-bottom: 2px solid rgb(255, 255, 255) !important;
}

最新更新