css - 使用 Flexbox 和 Material UI 使 Item 位于底部

标签 css reactjs flexbox material-ui

我正在尝试将未分配的文本添加到我的容器底部,如该模型所示:enter image description here

下面是我到目前为止的代码。我也在努力让播放按钮之间的边界也起作用。我尝试了通常的 css:bottom:0position:relevant 以及 Flexbox,但它似乎不想到达容器的最底部。

 const styles = theme => ({
  root: {
    flexGrow: 1,
    overflow: 'hidden',
    padding: theme.spacing(0, 3),
  },
  paper: {
    maxWidth: 800,
    margin: `${theme.spacing(2)}px auto`,
    padding: theme.spacing(2),
  },
  textField: {
    marginLeft: theme.spacing(1),
    marginRight: theme.spacing(1),
    width: 200,
  },
  playButton: {
    display: "flex",
    flexDirection: "column",
    justifyContent: "center",
    alignItems: "center",
    position: "relative",
    "& .playButton": {
      position: "absolute",
      top: "60%",
      left: "-55px",
      transform: "translateY(-50%)",
    },
      "& .star-rating": {
        "& .fa-star": {
          "&:hover": {
            "&::before": {
              content: "\f005",
              color: "yellow"
            }
          }
        }
      },
    },
});

function Tasks(props) {
  const { classes } = props;
  return (
    <div className={classes.root}>
      <Paper className={classes.paper}>
        <Grid container spacing={2}>
          <Grid item xs={12} sm container>
            <Grid item xs container direction="column" spacing={2}>
              <Grid item xs>
              <div className="name-label">
              Name
              </div>
              <Typography variant="h6" gutterBottom>
              {props.name}
              </Typography>
              <div className="form-divider"></div>
                <Typography variant="body2" color="textSecondary">
                {props.description}
                </Typography>
              </Grid>
            </Grid>
            <Grid item classes={{ root: props.classes.playButton}}>
    <Grid item xs={3} className="playButton">
      <i class="far fa-play-circle fa-2x"></i>
    </Grid>
    <div className="workers-assigned-label">
      Workers Assigned
    </div>
    <Typography variant="h6" gutterBottom>
        0/25
      </Typography>
      <div class="star-rating">
        <label class="far fa-star fa-2x"></label>
        <label class="far fa-star fa-2x"></label>
        <label class="far fa-star fa-2x"></label>
      </div>
    <div className="dropdown-menu">
  <h5>Unnassigned</h5>
</div>
  </Grid>
          </Grid>
        </Grid>
      </Paper>
    </div>
  );
}

export default withStyles(styles)(Tasks);

任何输入都会很棒。

最佳答案

我建议从看起来像这样的网格“骨架”开始:

<Grid container>
  <Grid item container xs={8} direction="column" justify="flex-start">
    // Left column contents, with each row as a <Grid item>
  </Grid>
  <Fab className={classes.fab}><PlayIcon /><Fab>
  <Grid item container xs={4} direction="column" justify="space-between" className={classes.right}>
    // Right column contents, with each row as a <Grid item>
  </Grid>
</Grid>

direction=column 将帮助您在每个容器中垂直放置元素。 justify=space-between 将确保您的第一项位于容器顶部,最后一项(未分配的文本)位于底部。

“正确的”CSS 类如下所示:

right: {
  borderLeft: `1px solid ${theme.palette.grey[500]}`,
  position: "relative"
}

你可以给它一个“相对”的位置,这样可以更容易地定位晶圆厂相对于柱子的位置。 “fab”类看起来像:

fab: {
  position: "absolute",
  margin: "auto",
  top: 0,
  bottom: 0,
  left: -28
}

margin、top 和 bottom 属性有助于 fab 垂直居中,左侧是根据 fab 的尺寸使其在边界上居中的一些 hack。

这是一份将所有内容整合在一起的工作草案:https://codesandbox.io/s/tender-torvalds-dlbke?fontsize=14

关于css - 使用 Flexbox 和 Material UI 使 Item 位于底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56360161/

相关文章:

html css 背景叠加

html - 我的专栏部分不会居中

CSS圆 Angular 表格行的上 Angular

javascript - 如何在 React 中同步两个具有不同显示的下拉列表?

css - Bootstrap 4 当第一列有很多文本时如何将第二列推到下一行

html - 影响 Bootstrap 3 布局的 CSS Flexbox

html - 带十字而不是箭头的进度光标

javascript - 如何在 handleSubmit 中从 react-query 实现 useMutation

reactjs - 如何正确导出模块以便 vscode 可以在建议中显示我的模块 [ctrl+space]?

HTML5 Flexbox 可以在两个轴上拉伸(stretch)吗?