Как центрировать действие с заголовком CardHeader в Material-UI для React?

#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 of CardHeader (мы также можем применить 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, позволило расположить кнопку меню действий по центру.