css - flexGrow 在 Material UI 网格的父 div 中的用途?

标签 css reactjs flexbox material-ui

我试图理解这个代码示例,https://codesandbox.io/s/9rvlm ,来自 Material UI 文档中的示例 ( https://material-ui.com/components/grid/ ):

import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import Paper from '@material-ui/core/Paper';
import Grid from '@material-ui/core/Grid';

const styles = theme => ({
  root: {
    flexGrow: 1,
  },
  paper: {
    padding: theme.spacing(2),
    textAlign: 'center',
    color: theme.palette.text.secondary,
  },
});

function CenteredGrid(props) {
  const { classes } = props;

  return (
    <div className={classes.root}>
      <Grid container spacing={3}>
        <Grid item xs={12}>
          <Paper className={classes.paper}>xs=12</Paper>
        </Grid>
        <Grid item xs={6}>
          <Paper className={classes.paper}>xs=6</Paper>
        </Grid>
        <Grid item xs={6}>
          <Paper className={classes.paper}>xs=6</Paper>
        </Grid>
        <Grid item xs={3}>
          <Paper className={classes.paper}>xs=3</Paper>
        </Grid>
        <Grid item xs={3}>
          <Paper className={classes.paper}>xs=3</Paper>
        </Grid>
        <Grid item xs={3}>
          <Paper className={classes.paper}>xs=3</Paper>
        </Grid>
        <Grid item xs={3}>
          <Paper className={classes.paper}>xs=3</Paper>
        </Grid>
      </Grid>
    </div>
  );
}

CenteredGrid.propTypes = {
  classes: PropTypes.object.isRequired,
};

export default withStyles(styles)(CenteredGrid);

我的问题是:分配 flexGrow: 1 的目的是什么?给 parent div元素?

据我了解 https://material-ui.com/system/flexbox/#flex-growhttps://developer.mozilla.org/en-US/docs/Web/CSS/flex-grow , flex-grow是 flex 容器项的 CSS 属性。但是在这个例子中,我没有看到包含这个组件的 flex 容器元素; CenteredGrid直接在根 div 中显示(如 <Demo/> )。

styles.root应用于父 div '以防万一' 组件在 flex 容器中呈现?我希望得到一些澄清。

最佳答案

上面提到的安东尼的评论对我来说似乎是正确的答案。如果父组件设置为 display:flex 并且正在加载的子组件没有 flex:1 或 flex-grow:1 则它不会占用父组件的 100% 宽度。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <div style="border:1px solid black; padding:2px; ">
    <div style="border:1px solid red; ">parent is not flex container - child div takes 100% width</div>
  </div>
  <br/>
  <div style="border:1px solid black; padding:2px; ">
    <div style="border:1px solid red; flex-grow:1; ">parent is not flex container - child div takes 100% width</div>
  </div>
  <br/>
  <div style="border:1px solid black; padding:2px; display:flex; ">
    <div style="border:1px solid red; ">parent is flex container - sorry</div>
  </div>
  <br/>
  <div style="border:1px solid black; padding:2px; display:flex; ">
    <div style="border:1px solid red; display:flex; flex-grow:1;">parent is flex container - child div takes 100%</div>
  </div>
</body>
</html>

关于css - flexGrow 在 Material UI 网格的父 div 中的用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56386216/

相关文章:

html - 将元素 float 到最大宽度

reactjs - Redux表格: initialValues does not set form values

javascript - 我可以使用 useSelector() 返回更深层次的嵌套属性/状态值吗?

reactjs - 任务 ':paytm_allinone_react-native:compileDebugKotlin' 执行失败。 react native

css - 选择具有某种类型子元素的父元素的最后一个元素的最佳方法是什么?

html - 我如何使网格响应?

html - 登录后网站不重定向到指定页面

html - Flex Box 出界了?

html - 根据 flex 子项数确定布局?

html - 网格布局中的中心列