reactjs - 如何为 Material-UI SPA 的内容动态使用全屏高度?

标签 reactjs material-ui

我正在寻找为 SPA 设置页面布局的最佳方法,该 SPA 由顶部的静态 header (AppBar) 和 header 下方的动态页面内容组成。 有时(但不总是)页面内容 ScreenSizePage 的高度应该与屏幕的剩余高度完全匹配。 换句话说:仅使 ScreenSizePagediv 的高度恰好适合 Material-UI 应用中剩余屏幕高度的最佳方法是什么?

index.tsx:

import React from 'react';
import ReactDOM from 'react-dom';
import CssBaseline from '@material-ui/core/CssBaseline';
import {ThemeProvider} from '@material-ui/styles';
import {BrowserRouter} from 'react-router-dom';
import App from './App';
import theme from './theme';

ReactDOM.render(
    <ThemeProvider theme={theme}>
        <CssBaseline />
        <BrowserRouter>
            <App />
        </BrowserRouter>
    </ThemeProvider>,
    document.querySelector('#root'),
);

App.tsx:

import React from 'react';
import {Route, Switch} from 'react-router-dom';

import AppBar from './AppBar';
import HomePage from './pages/HomePage';
import {ScreenSizePage} from './pages/ScreenSizePage';

export default function App() {
    return (
        <div>
            <AppBar />
            <Switch>
                <Route exact={true} path="/" component={HomePage} />
                <Route path="/ScreenSizePage" component={ScreenSizePage} />
            </Switch>
        </div>
    );
}

AppBar.tsx:

import React from 'react';
import {createStyles, makeStyles, Theme} from '@material-ui/core/styles';
import AppBar from '@material-ui/core/AppBar';
import Toolbar from '@material-ui/core/Toolbar';
import Typography from '@material-ui/core/Typography';

const useStyles = makeStyles((theme: Theme) => createStyles({
    root: {
        flexGrow: 1,
    },
    menuButton: {
        marginRight: theme.spacing(2),
    },
}));

export default function DenseAppBar() {
    const classes = useStyles();

    return (
        <div className={classes.root}>
            <AppBar position="static">
                <Toolbar variant="dense">
                    {/* ... */}
                    <Typography variant="h6" color="inherit">
                        Home
                    </Typography>
                </Toolbar>
            </AppBar>
        </div>
    );
}

主页.tsx:

import React from 'react';

export default function HomePage() {
    return (
        <div>This page can have any height</div>
    );
}

ScreenSizePage.tsx:

import React from 'react';

export default function ScreenSizePage() {
    return (
        <div>This page should use the remaining page height</div>
    );
}

最佳答案

您可以使用 CSS flexbox 或“calc”函数来实现这一点。 “flex-grow”将使内容适合剩余空间。下面的代码沙盒。我已经注释掉了带有“calc”的部分

https://codesandbox.io/s/material-demo-brz62

关于reactjs - 如何为 Material-UI SPA 的内容动态使用全屏高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58421113/

相关文章:

javascript - 功能在需要时触发。我应该如何解决这个问题?

javascript - 状态更改时不必要地触发 Redux 操作

material-ui - 如何在 LeftNav 中创建粘性页脚?

reactjs - 如何为 Material UI 图标应用白色?

reactjs - 选定列表项的样式 Material UI V5

javascript - setState 对象数组而不改变对象顺序

javascript - 为什么我的组件没有在状态更改时重新渲染?

javascript - 如何在基于类的组件中使用 `useSelector`? react ,还原

reactjs - 如何在 ReactJS 中使用 Select,并使用数组创建其选项