如何在材料UI中对齐水平图标和文本

ton*_*ong 12 html css material-ui

我是材料ui的新手,现在我的图标和文本未对齐:

不对齐

我想要的结果:

我的代码是:

<div style={{
    display: 'inline-flex',
    VerticalAlign: 'text-bottom',
    BoxSizing: 'inherit',
    textAlign: 'center',
    AlignItems: 'center'
}}>
    <LinkIcon className={classes.linkIcon}  />
    revolve
</div>  
Run Code Online (Sandbox Code Playgroud)

它花了我两天时间,我什至尝试了网格和行,但是没有用。谁能帮我?

Nea*_*arl 55

这可以在MUI v5中通过使用 aStack并将alignItems属性设置为轻松实现center

import Stack from '@mui/material/Stack';
import Typography from '@mui/material/Typography';
import AddCircleIcon from '@mui/icons-material/AddCircle';
Run Code Online (Sandbox Code Playgroud)
<Stack direction="row" alignItems="center" gap={1}>
  <AddCircleIcon />
  <Typography variant="body1">text</Typography>
</Stack>
Run Code Online (Sandbox Code Playgroud)

Codesandbox 演示


Tho*_*988 14

替代简单解决方案

<Grid container direction="row" alignItems="center">
     <SearchIcon /> example
</Grid>
Run Code Online (Sandbox Code Playgroud)


tin*_*tos 11

您需要使用网格。这样的事情应该起作用:

<Grid container direction="row" alignItems="center">
  <Grid item>
    <LinkIcon className={classes.linkIcon}  />
  </Grid>
  <Grid item>
    revolve
  </Grid>
</Grid>
Run Code Online (Sandbox Code Playgroud)

  • 完美,如果默认情况下文本比行长,则网格开始换行,这意味着文本将在图标下方,为了防止这种情况,您可以添加 `wrap="nowrap"` (4认同)
  • 感觉更像是“MUI”方式,使用它们的组件。顺便说一句,不需要`direction =“row”`。很确定这是默认的。 (2认同)

Pet*_*ses 7

这应该给出预期的结果。

<div style={{
    display: 'flex',
    alignItems: 'center'
}}>
    <LinkIcon />
    <p>revolve</p>
</div>  
Run Code Online (Sandbox Code Playgroud)

  • 我使用了该样式,但将它们应用于单个“Typography”,因此我不需要“p”元素。与“v4.0.2”一起工作。 (2认同)

nxt*_*123 6

样式

const styles = theme => ({
    icon: {
        position: "relative",
        top: theme.spacing.unit,
        width: theme.typography.display1.fontSize,
        height: theme.typography.display1.fontSize
    }
});
Run Code Online (Sandbox Code Playgroud)

JSX

<Typography variant="display1">
    <Icon className={this.props.classes.icon}/>Your&nbsp;Text
</Typography>
Run Code Online (Sandbox Code Playgroud)

您可以在所有 3 个位置替换display1display3或其他排版变体以选择您的文字大小。在&nbsp;确保您的文字不单词之间时,包装破裂。

对我来说,这可以渲染成这样

在此处输入图片说明

display3和其他几个款式增加了色彩。

  • 有趣的答案,现在你会写:`icon:{position:“relative”,top:theme.spacing(0.5),width:theme.typography.body1.fontSize,height:theme.typography.body1.fontSize}` (2认同)

Che*_*wai 6

试试下面的代码。您可以variant根据需要使用。

const useStyles = makeStyles(theme => ({
  wrapIcon: {
    verticalAlign: 'middle',
    display: 'inline-flex'
   }
}));

<Typography variant="subtitle1" className={classes.wrapIcon}>
    <LinkIcon className={classes.linkIcon}  /> revolve
</Typography>
Run Code Online (Sandbox Code Playgroud)

  • @maxxyme 通常的例子是函数中的 `const classes = useStyles();` 。您可以看到渲染/返回中使用“类”的位置。 (2认同)

小智 5

ListItemIconListItemText包裹在 a 内ListItem将使它保持在一行并防止中断:

import ListItem from '@material-ui/core/ListItem';
import ListItemIcon from '@material-ui/core/ListItemIcon';
import ListItemText from '@material-ui/core/ListItemText';
    
<ListItem >
  <ListItemIcon><AccessAlarmIcon color="secondary" /></ListItemIcon>
  <ListItemText>Updated 1 hour ago</ListItemText>
</ListItem>
Run Code Online (Sandbox Code Playgroud)

演示图片:

演示图片

  • 您能否在答案中添加更多背景信息 (3认同)
  • 请放置一个指向您尝试附加的图像的链接,并解释为什么“ListItem”可以解决问题。 (2认同)