#reactjs #material-ui
#reactjs #material-ui
Вопрос:
Я хочу, чтобы действия (редактирование и удаление) были выровнены по вертикали по центру заголовка. Как показано на скриншоте, кнопки не выровнены с заголовком и аватаром CardHeader. Кажется, что аватар выравнивается по центру по вертикали, когда для отображения содержимого заголовка требуется две или более строк, но действия остаются в верхнем правом углу.
Я был бы очень признателен за любую помощь от сообщества.
Вот мой фрагмент кода
<CardHeader
avatar={
<Avatar className={classes.avatarNumber}>
<Typography variant={"h5"}>Q</Typography>
</Avatar>
}
title={<Typography variant={"h6"}>Gelloo</Typography>}
action={
<Box>
<IconButton>
<DeleteIcon/>
</IconButton>
<IconButton>
<EditIcon/>
</IconButton>
</Box>
}
/>
Добавлено новое:
Возможное решение для переопределения действия MuiCardHeader. Но если есть какое-либо лучшее решение, пожалуйста, предложите мне. Спасибо!
overrides: {
MuiCardHeader: {
action: {
marginTop: "auto",
marginBottom: "auto"
}
}
}
Комментарии:
1. можете ли вы показать мне стиль MuiCardHeader-root?, может быть, просто добавив к нему align-item: center, это исправит
2. Спасибо за подсказку. Я обновил вопрос возможным решением. Считаете ли вы, что это оптимально?
3. попробуйте добавить stying в поле с помощью display flex, alignItems:center
Ответ №1:
На самом деле, вы можете сразу же использовать CardHeader
props
:-
classes
: чтобы применить изменения кroot
ofCardHeader
(мы также можем применитьaction
стиль отсюда)titleTypographyProps
: для применения любых стилей к заголовкуsubheaderTypographyProps
: для применения любых стилей к субтитрам- используйте
makeStyles
из@material-ui/core/styles
и переопределяйте их, используяclasses
вместо того, чтобы делать это вручную с помощьюwithStyles
переопределения (это более аккуратно и чисто) example.js
:-
import { makeStyles } from '@material-ui/core/styles'
const Demo = () => {
const classes = useStyles()
return (
<CardHeader
avatar={
<Avatar className={classes.avatarNumber}>
<Typography variant={"h5"}>Q</Typography>
</Avatar>
}
title={<Typography variant={"h6"}>Gelloo</Typography>}
action={
<Box>
<IconButton>
<DeleteIcon/>
</IconButton>
<IconButton>
<EditIcon/>
</IconButton>
</Box>
}
classes={{
root: classes.cardHeaderRoot,
action: classes.cardHeaderAction
}}
titleTypographyProps={{
classes: {
root: classes.cardHeaderTitleRoot
}
}}
subheaderTypographyProps={{
classes: {
root: classes.cardHeaderSubTitleRoot
}
}}
/>
)
}
export default Demo
const useStyles = makeStyles((theme) => ({
cardHeaderRoot: {
backgroundColor: theme.palette.grey[400]
},
cardHeaderAction: {
margin: "auto"
},
cardHeaderTitleRoot: {
color: theme.palette.error.main,
textAlign: 'center'
},
cardHeaderSubTitleRoot: {
color: theme.palette.error.main,
textAlign: 'center'
},
}));
Вы можете увидеть эту рабочую песочницу, чтобы попробовать живую версию.
Комментарии:
1. Я проверил ваш код песочницы, я думаю, вы неправильно поняли мой вопрос. Он выравнивает по центру заголовок и подзаголовок, а не значок кнопки меню действий, кнопка меню по-прежнему остается в правом верхнем углу, даже если у вас есть, например, заголовок из 200 слов. Кнопка меню должна быть выровнена по центру, поскольку я добавил скриншот позже в свой вопрос.
2. Та же концепция применяется и для центрирования
action
детали. Я обновил свой приведенный выше код и песочницу3. Спасибо за вашу помощь, я проверил ваш код. Это связано с тем, что поле, установленное в поле действие в значение auto, позволило расположить кнопку меню действий по центру.