css - 如何让 React Material-UI Accordion 充满整个高度?

标签 css reactjs flexbox material-ui

我有 2 个 Material-ui Accordion ,我想通过以下方式扩展到它们的全高:

  • 他们都崩溃了。
  • 一个折叠的(尽可能高)
  • 均展开(各占全高的 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>
  );
}

最佳答案

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

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>
  );
}

关于css - 如何让 React Material-UI Accordion 充满整个高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65223989/

相关文章:

css - Angular 9/Material - 在 Angular 组件样式中重用 Material 主题变量

css - 如何在CSS中从右侧设置固定背景位置?

css - 在 GWT 中使用 CSS 的推荐方法

reactjs - 是否可以在其构造函数签名中安全地解构 ES6 React Component 类?

javascript - 删除/添加元素时是否可以为 flex 元素的位置设置动画?

css - 基础简单的 Flex 布局

javascript - 数据表,如何改变外观

javascript - React 中的 TypeScript 类型

javascript - 错误回调不适用于 React Native 中的地理定位

javascript - 防止 flex 元素中的文本区域和镜像内容随内容动态扩展