首页 > 解决方案 > AppBar 与其他元素重叠

问题描述

我开始使用 React/Material-UI,以及 CSS 等的新手...我有一个带有 APPBar 的简单页面布局。不幸的是,这个 AppBar 与本应位于其下方的元素重叠。

我找到了这个答案: AppBar Material UI questions

但这感觉完全错误。如果我的 AppBar 具有可变高度,取决于图标、显示模式等怎么办?

我尝试创建一个垂直网格,将元素包装在不同的项目中,使顶部容器成为 flex 容器并使用 flex 设置,似乎没有任何效果,应用栏始终位于文本顶部。

代码非常简单:

import React from 'react';
import { AppBar, Typography, Box } from '@material-ui/core';

function App() {
    return (
        <div>
            <AppBar>
                <Typography variant='h3'>
                    AppBar
                </Typography>
            </AppBar>
            <Box>
                <Typography variant='h1' style={{ border: '1px solid black' }}>
                    Hello
                </Typography>
            </Box>
        </div>
    )
}

export default App;

"Hello" 文本块只有一半可见:

在此处输入图像描述

标签: cssreactjsmaterial-uiappbar

解决方案


发生这种情况是因为 MaterialUI 应用栏默认为position="fixed". 这将它与标准 DOM 的布局分开,以允许内容在其下方滚动,但结果是在页面上没有为它留出空间。

您可以通过将其下方的所有内容包装在 div 中并指定足够的边距来解决此问题,或者通过更改的position属性<AppBar>使其不再是"fixed". 在您的示例中,<Box>如果这是<AppBar>.

例如

import React from 'react';
import { AppBar, Typography, Box } from '@material-ui/core';

function App() {
    return (
        <div>
            <AppBar>
                <Typography variant='h3'>
                    AppBar
                </Typography>
            </AppBar>
            <div style={{marginTop: 80}}>
                <Box>
                    <Typography variant='h1' style={{ border: '1px solid black' }}>
                        Hello
                    </Typography>
                </Box>
            </div>
        </div>
    )
}

export default App;

推荐阅读