You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何在Material UI的AppBar内小屏幕居中Box组件

问题:Material UI响应式导航栏小屏幕Logo无法居中

在React项目中使用Material UI开发响应式导航栏时,小屏幕(平板/手机)下指定的Logo Box组件无法居中显示。相关代码如下:

<AppBar elevation={1} position="sticky" sx={{background: 'rgb(255 255 255)', py: "10px"}}>
  <Container maxWidth="xl">
      <Toolbar disableGutters>
          <Box onClick={() => undefined} sx={{height: 80, width: 80, display: { xs: 'none', md: 'flex' },}} component="img" alt="Your logo." src={logo}/>
          {/**Appear on Tablet and phone**/}
          <Box sx={{ display: { xs: 'flex', md: 'none' } }}>
              <IconButton
                  size="large"
                  aria-haspopup="true"
                  onClick={handleOpenNavMenu}
                  color="#000000"
              >
                  <MenuIcon />
              </IconButton>
              <Menu
                  id="menu-appbar"
                  anchorEl={anchorElNav}
                  anchorOrigin={{
                      vertical: 'bottom',
                      horizontal: 'left',
                  }}
                  keepMounted
                  transformOrigin={{
                      vertical: 'top',
                      horizontal: 'left',
                  }}
                  open={Boolean(anchorElNav)}
                  onClose={handleCloseNavMenu}
                  sx={{
                      display: { xs: 'block', md: 'none' },
                      background: 'trasparent'
                  }}
              >
              {pages.map((page, index) => (
                  <MenuItem key={index} onClick={handleCloseNavMenu}>
                      <Typography textAlign="center">{page}</Typography>
                  </MenuItem>
              ))}
              </Menu>
          </Box>
          {/**Image appear on Tablet and phone and is supposed to be at center**/}
          <Box onClick={() => undefined} sx={{height: 80, width: 80, display: { xs: 'flex', md: 'none' }, mr: 1 }} component="img" alt="Your logo." src={logo}/>
          {/**Appear on Desktop**/}
          <Tabs aria-label="visible arrows tabs example" sx={{marginLeft: '5px', marginRight: '5px', width: 'auto', display: { xs: 'none', md: 'flex' }}} value={tabValue} onChange={handleTabChange} indicatorColor='#162667'>
              <Tab sx={{fontSize: '12px'}} label="Home"/>
              <Tab sx={{fontSize: '12px'}} label="Find a Store"/>
              <Tab sx={{fontSize: '12px'}} label="How To Avail Offer"/>
              <Tab sx={{fontSize: '12px'}} label="T & C"/>
              <Tab sx={{fontSize: '12px'}} label="Contact Us"/>
          </Tabs> 
          <Box onClick={() => undefined} sx={{width: 110, ml: 'auto', display: { xs: 'none', md: 'flex' },}} component="img" alt="Your logo." src={logo2}/>
      </Toolbar>
  </Container>
</AppBar>

需要居中的是这段代码:

<Box onClick={() => undefined} sx={{height: 80, width: 80, display: { xs: 'flex', md: 'none' }, mr: 1 }} component="img" alt="Your logo." src={logo}/>

解决方案

问题核心是Toolbar默认采用Flex布局,当前的Logo Box只是普通flex子元素,没有占据足够横向空间来实现居中。只需修改该Box的sx样式,添加两个关键属性:

<Box onClick={() => undefined} sx={{
  height: 80,
  width: 80,
  display: { xs: 'flex', md: 'none' },
  mr: 1,
  // 新增以下两行
  flexGrow: 1,
  justifyContent: 'center'
}} component="img" alt="Your logo." src={logo}/>

原理说明:

  • flexGrow: 1:让这个Box占据Toolbar中除左侧菜单按钮外的所有剩余空间,确保它有足够的横向范围来容纳居中逻辑。
  • justifyContent: 'center':在Box自身的flex容器内,将内部的图片元素水平居中。

修改后,小屏幕下的Logo即可正常居中显示。


内容的提问来源于stack exchange,提问作者Irfan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:05:54