MUI 自动完成覆盖输入填充不起作用
MUI autocomplete override input padding not working
我正在尝试覆盖 MUI 自动完成组件内的填充,但它似乎无法正常工作
const icon = <CheckBoxOutlineBlankIcon fontSize="small" />;
const checkedIcon = <CheckBoxIcon fontSize="small" />;
const _getCustomOption = (props, option, { selected }) => {
const renderOption = (
<li { ...props }>
<Checkbox icon={ icon } checkedIcon={ checkedIcon } checked={ selected } classes={ { root: classes.checkbox } } />
{ option }
</li>
);
return multiple? { renderOption } : {};
};
const _renderInput = (params) => (
<Field { ...params } variant="outlined" placeholder={ placeholder } InputProps={ { ...params.InputProps, readOnly: true } } classes={ { root: `${fieldRootClassName} ${classes.textFieldRoot}` } } />
);
return (
<React.Fragment>
<Typography variant="subtitle1" gutterBottom className={ `${labelClassName} ${disabled ? classes.disabledText : ''}` }
noWrap align="left" style={ { color: labelColor } }>
{ required ? `${label} *` : label }
</Typography>
<Autocomplete fullWidth multiple
classes={ { root: `${fieldRootClassName} ${classes.textFieldRoot}`, inputRoot: `${classes.createEventInput}`, input: `${classes.createEventInput}`, listbox: classes.dropdownListBox, tag: classes.chipTag, paper: classes.dropdownPaper } }
disableCloseOnSelect={ multiple } options={ options } renderInput={ _renderInput } disabled={ disabled } onChange={ _onSelectionChange } { ..._getCustomOption } />
</React.Fragment>
);
这是我正在尝试使用的 class createEventInput
createEventInput: {
padding: '10.5px 14px 10.5px'
}
当我尝试打开应用程序时,这就是我所看到的
component styles when inspecting the input element
但同时你可以看到没有考虑其他样式
Padding not working properly
我知道如果我使用 !important 标志,它将覆盖输入填充,但我不想使用它。
问题是 css 特异性。应用样式的选择器是:.css-eozd4h-MuiAutocomplete-root .MuiOutlinedInput-root .MuiAutocomplete-input
,它的 css specificity 为 (0,3,0)。
您还展示了样式被应用但被覆盖的图像。发生这种情况的原因是因为选择器是 .CustomTextField-createEventInput-13685
,它具有 (0,1,0) 的特异性。为了应用您的填充样式,您需要选择器具有大于 (0,3,0) 的特异性。
您的代码片段没有显示返回您的 classes
对象的内容,因此我假设您使用的是 makeStyles
之类的东西,并且您仍然希望将输入样式应用为你是(通过输入 类 键)。您可以通过执行以下操作来获得更高的特异性:
createEventInput: {
"&&&&": {
padding: '10.5px 14px 10.5px'
}
}
上面的工作是因为 &
是“父选择器”,在这种情况下等同于 .CustomTextField-createEventInput-13685
。通过重复 &
4 次,我们最终得到了 .CustomTextField-createEventInput-13685.CustomTextField-createEventInput-13685.CustomTextField-createEventInput-13685.CustomTextField-createEventInput-13685
的最终选择器,这非常丑陋......但它确实导致了 (0,4,0).[=21 的特异性=]
注意 根据您的项目设置方式,您可能能够匹配特殊性并优先使用您的样式(即只需要 &&&)。
一种不那么丑陋的匹配特异性的方法可能是通过“根”设置输入样式。
textFieldRoot: {
// this has a specificity of (0,3,0) so might not work if you need to be more specific.
"& .MuiOutlinedInput-root .MuiAutocomplete-input": {
padding: '10.5px 14px 10.5px'
}
}
我正在尝试覆盖 MUI 自动完成组件内的填充,但它似乎无法正常工作
const icon = <CheckBoxOutlineBlankIcon fontSize="small" />;
const checkedIcon = <CheckBoxIcon fontSize="small" />;
const _getCustomOption = (props, option, { selected }) => {
const renderOption = (
<li { ...props }>
<Checkbox icon={ icon } checkedIcon={ checkedIcon } checked={ selected } classes={ { root: classes.checkbox } } />
{ option }
</li>
);
return multiple? { renderOption } : {};
};
const _renderInput = (params) => (
<Field { ...params } variant="outlined" placeholder={ placeholder } InputProps={ { ...params.InputProps, readOnly: true } } classes={ { root: `${fieldRootClassName} ${classes.textFieldRoot}` } } />
);
return (
<React.Fragment>
<Typography variant="subtitle1" gutterBottom className={ `${labelClassName} ${disabled ? classes.disabledText : ''}` }
noWrap align="left" style={ { color: labelColor } }>
{ required ? `${label} *` : label }
</Typography>
<Autocomplete fullWidth multiple
classes={ { root: `${fieldRootClassName} ${classes.textFieldRoot}`, inputRoot: `${classes.createEventInput}`, input: `${classes.createEventInput}`, listbox: classes.dropdownListBox, tag: classes.chipTag, paper: classes.dropdownPaper } }
disableCloseOnSelect={ multiple } options={ options } renderInput={ _renderInput } disabled={ disabled } onChange={ _onSelectionChange } { ..._getCustomOption } />
</React.Fragment>
);
这是我正在尝试使用的 class createEventInput
createEventInput: {
padding: '10.5px 14px 10.5px'
}
当我尝试打开应用程序时,这就是我所看到的 component styles when inspecting the input element
但同时你可以看到没有考虑其他样式 Padding not working properly 我知道如果我使用 !important 标志,它将覆盖输入填充,但我不想使用它。
问题是 css 特异性。应用样式的选择器是:.css-eozd4h-MuiAutocomplete-root .MuiOutlinedInput-root .MuiAutocomplete-input
,它的 css specificity 为 (0,3,0)。
您还展示了样式被应用但被覆盖的图像。发生这种情况的原因是因为选择器是 .CustomTextField-createEventInput-13685
,它具有 (0,1,0) 的特异性。为了应用您的填充样式,您需要选择器具有大于 (0,3,0) 的特异性。
您的代码片段没有显示返回您的 classes
对象的内容,因此我假设您使用的是 makeStyles
之类的东西,并且您仍然希望将输入样式应用为你是(通过输入 类 键)。您可以通过执行以下操作来获得更高的特异性:
createEventInput: {
"&&&&": {
padding: '10.5px 14px 10.5px'
}
}
上面的工作是因为 &
是“父选择器”,在这种情况下等同于 .CustomTextField-createEventInput-13685
。通过重复 &
4 次,我们最终得到了 .CustomTextField-createEventInput-13685.CustomTextField-createEventInput-13685.CustomTextField-createEventInput-13685.CustomTextField-createEventInput-13685
的最终选择器,这非常丑陋......但它确实导致了 (0,4,0).[=21 的特异性=]
注意 根据您的项目设置方式,您可能能够匹配特殊性并优先使用您的样式(即只需要 &&&)。
一种不那么丑陋的匹配特异性的方法可能是通过“根”设置输入样式。
textFieldRoot: {
// this has a specificity of (0,3,0) so might not work if you need to be more specific.
"& .MuiOutlinedInput-root .MuiAutocomplete-input": {
padding: '10.5px 14px 10.5px'
}
}