reactjs - 如何制作更小的单选按钮
问题描述
我找不到在 material-ui 中创建一组三个小(19px 高)标记的单选按钮的方法。我正在将浏览器应用程序从静态 HTML/JS 迁移到 material-ui/react,并且我需要该组保持相同的大小。
我开始使用的按钮组有三个小的垂直对齐标签单选按钮。这是一个屏幕截图:
这是我使用 material-ui 文档所能做到的最好的代码:
<FormControl
margin="dense"
size="small"
>
<RadioGroup
size="small"
name="dataSource"
value={dataSource}
onChange={handleDataSourceChange}
>
<FormControlLabel
value="CaseCount"
control={
<Radio
className={classes.radio}
size="small"
/>
}
label="Cases"
/>
<FormControlLabel
value="DeathCount"
control={
<Radio
className={classes.radio}
size="small"
/>
}
label="Deaths"
/>
<FormControlLabel
value="HotSpots"
control={
<Radio
size="small"
/>
}
label="HotSpot warning"
/>
</RadioGroup>
</FormControl>
这会导致组过大——按钮图标太大,文本太大,每行高 38 像素(原始 19 像素的两倍)。这是material-ui对应的屏幕截图:
我想我希望结果使用香草 html 输入(类型为radio
)而不是 svg 图标,以及字体高度为13px
. 我如何在material-ui中做到这一点?
我知道如何修复 padding-left 所以我不担心。如何获得 19px 高而不是 38px 的行?
解决方案
原因
如果您检查 Material 单选按钮,我们可以看到单选按钮的填充导致每行的高度为 38px。
代码
因此,我们可以使用以下代码简单地从所有单选按钮中删除垂直填充(请注意,我的代码与您的代码略有不同):
const useStyles = makeStyles({
// Applied to <Radio />
root: {
width: 19,
height: 19,
paddingTop: 0,
paddingBottom: 0,
},
// Applied to <FormControlLabel />
label: {
fontSize: 13
}
});
export default function RadioButtonsGroup() {
const [value, setValue] = React.useState("CaseCount");
const classes = useStyles();
const handleChange = (event) => {
setValue(event.target.value);
};
const customRadio = <Radio size="small" classes={{root: classes.root}} />;
return (
<FormControl component="fieldset">
<RadioGroup value={value} onChange={handleChange}>
<FormControlLabel classes={{label: classes.label}} control={customRadio} value="CaseCount" label="Cases" />
<FormControlLabel classes={{label: classes.label}} control={customRadio} value="DeathCount" label="Deaths" />
<FormControlLabel
classes={{label: classes.label}}
control={customRadio}
value="HotSpots"
label="Hotspot Warning"
/>
</RadioGroup>
</FormControl>
);
}
解释
根据Radio
API 文档,我们可以将自定义样式应用于单选按钮的根,方法是使用root
. root
因此,我们首先定义一个在函数中调用的样式对象makeStyles()
。接下来,我们通过添加以下属性将样式应用于Radio
组件classes={{root: classes.root}}
:
<Radio size="small" classes={{root: classes.root}} />
同样,根据FormControlLabel
API 文档,我们可以使用label
类名将自定义样式应用于文本标签。label
因此,我们首先在makeStyles()
函数中定义一个样式对象。接下来,我们通过添加以下属性将样式应用于FormControlLabel
组件classes={{label: classes.label}}
:
<FormControlLabel classes={{label: classes.label}} /* ... */ />
推荐阅读
- c#-4.0 - 我有 5 个表格,我想知道如何在关闭第 5 个表格后返回主表格
- swift - 在 Cocoa macos 应用程序中捕获 SIGINT
- python - 元组和占位符与 python print() 的交互?
- spring - 看不到从 Angular 到 Spring Boot 服务器参数的发布请求
- javascript - 如何阻止下一个按钮显示第一个 div?
- angular - 从路由中角度 4 的查询参数中获取数据
- javascript - 如何在 InAppBrowser 中检查 navigator.onLine 以获取 cordova/phonegap
- scala - Activeslick 中的关联
- export-to-csv - 如何在 ODI 12c 中将数据导出到 CSV 文件
- google-sheets-api - 如何通过 Google Sheets API 对行进行分组?