【问题标题】:How to make React Material-UI Accordion fill entire height?如何使 React Material-UI Accordion 填充整个高度?
【发布时间】:2020-12-09 19:58:37
【问题描述】:

我有 2 个 Material-ui 手风琴,我想通过以下方式将它们展开到全高度:

  • 他们俩都倒塌了。
  • 一个折叠起来(尽可能取最大高度)
  • 均已展开(均占全高的 50%)

我可以通过以下代码简单地使用 CSS 来实现这一点吗? (认为​​flex-growflex-direction:column 应该是可能的,但我无法让它工作。

https://codesandbox.io/s/upbeat-tesla-uchsb?file=/accordionFullHeight

import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import Accordion from '@material-ui/core/Accordion';
import AccordionSummary from '@material-ui/core/AccordionSummary';
import AccordionDetails from '@material-ui/core/AccordionDetails';
import Typography from '@material-ui/core/Typography';
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';

const useStyles = makeStyles((theme) => ({
  root: {
    width: '100%',
    background: 'green',
    height: '90vh'
  },
  heading: {
    fontSize: theme.typography.pxToRem(15),
    fontWeight: theme.typography.fontWeightRegular,
  },
}));

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

  return (
    <div className={classes.root}>
      <Accordion>
        <AccordionSummary
          expandIcon={<ExpandMoreIcon />}
          aria-controls="panel1a-content"
          id="panel1a-header"
        >
          <Typography className={classes.heading}>Accordion 1</Typography>
        </AccordionSummary>
        <AccordionDetails>
          <Typography>
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex,
            sit amet blandit leo lobortis eget.
          </Typography>
        </AccordionDetails>
      </Accordion>
      <Accordion>
        <AccordionSummary
          expandIcon={<ExpandMoreIcon />}
          aria-controls="panel2a-content"
          id="panel2a-header"
        >
          <Typography className={classes.heading}>Accordion 2</Typography>
        </AccordionSummary>
        <AccordionDetails>
          <Typography>
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex,
            sit amet blandit leo lobortis eget.
          </Typography>
        </AccordionDetails>
      </Accordion>
    
    </div>
  );
}

【问题讨论】:

    标签: css reactjs flexbox material-ui


    【解决方案1】:

    使用仅在扩展时使用flex-grow:1 的受控手风琴解决了这个问题:

    https://codesandbox.io/s/upbeat-tesla-uchsb?file=/src/MyAccordion.js

    import React from "react";
    import { makeStyles } from "@material-ui/core/styles";
    import Accordion from "@material-ui/core/Accordion";
    import AccordionDetails from "@material-ui/core/AccordionDetails";
    import AccordionSummary from "@material-ui/core/AccordionSummary";
    import Typography from "@material-ui/core/Typography";
    import ExpandMoreIcon from "@material-ui/icons/ExpandMore";
    
    const useStyles = makeStyles((theme) => ({
      root: {
        width: "100%",
        background: "red",
        color: "blue"
      },
      rootExpanded: {
        background: "blue",
        flexGrow: 1
      }
    }));
    
    export default function MyAccordion(props) {
      const classes = useStyles();
      const { name } = props;
      const [expanded, setExpanded] = React.useState(false);
    
      const rootClass = expanded ? classes.rootExpanded : classes.root;
    
      const handleChange = (panel) => (event, isExpanded) => {
        setExpanded(isExpanded ? panel : false);
      };
    
      return (
        <Accordion
          className={rootClass}
          expanded={expanded === name}
          onChange={handleChange(name)}
        >
          <AccordionSummary
            expandIcon={<ExpandMoreIcon />}
            aria-controls="panel1bh-content"
            id={`${name}-header`}
          >
            <Typography className={classes.heading}>General settings</Typography>
            <Typography className={classes.secondaryHeading}>
              I am an accordion
            </Typography>
          </AccordionSummary>
          <AccordionDetails>
            <Typography>
              Nulla facilisi. Phasellus sollicitudin nulla et quam mattis feugiat.
              Aliquam eget maximus est, id dignissim quam.
            </Typography>
          </AccordionDetails>
        </Accordion>
      );
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-18
      • 2020-11-17
      • 2015-11-07
      • 2017-01-05
      • 2018-09-20
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      相关资源
      最近更新 更多