Как я могу адаптировать свой макет к высоте панели инструментов Material-UI?

#reactjs #material-ui

Вопрос:

В настоящее время я создаю компонент макета (панель навигации, нижний колонтитул и содержимое), он выглядит так:

 // containers/Layout/index.jsx
export default function Layout({ children }) {
  const classes = useStyles();

  return (
    <>
      <Navbar />
      <main className={classes.root}>{children}</main>
      <Footer />
    </>
  );
}
 

Это стили:

 // containers/Layout/styles.js
export default makeStyles((theme) => ({
  root: {
    minHeight: `calc(100vh - 64px - ${theme.mixins.toolbar.minHeight}px)`,
  },
}));
 

Теперь я столкнулся с проблемой, материал-пользовательский Toolbar интерфейс реагирует. Мой нижний колонтитул 64px высок, но моя панель приложений, конечно, динамична.

 // component/Appbar/index.jsx
export default function Navbar() {
  return (
    <AppBar position="static">
      <Toolbar />
    </AppBar>
  );
}
 

Для справки, вот как выглядит миксин:

Смешивание

Я пытаюсь получить текущую высоту AppBar , чтобы я мог сделать свою calc функцию отзывчивой. Я пробовал использовать миксин, но он возвращает только нормальную минимальную высоту. Другой вариант-использовать медиа-запрос, но я бы предпочел этого не делать, так как медиа-запрос уже присутствует на микшине панели инструментов.

Как бы я получил эту минимальную высоту, чтобы правильно адаптироваться к размеру экрана? Моя цель-всегда заполнять 100% экрана нижним колонтитулом внизу, содержимым, заполняющим оставшееся пространство.

Ответ №1:

Вы можете увидеть микшины панели инструментов по умолчанию здесь:

 toolbar: {
  minHeight: 56,
  [`${breakpoints.up('xs')} and (orientation: landscape)`]: {
    minHeight: 48,
  },
  [breakpoints.up('sm')]: {
    minHeight: 64,
},
 

Он устанавливает minHeight разные значения в разных размерах/ориентации экрана. Аналогично, в вашем основном содержимом под заголовком вы должны установить значение height примерно так:

 content: {
  height: `calc(100vh - 56px)`,
  [`${theme.breakpoints.up("xs")} and (orientation: landscape)`]: {
    height: `calc(100vh - 48px)`
  },
  [theme.breakpoints.up("sm")]: {
    height: `calc(100vh - 64px)`
  }
}
 

Живая демонстрация

Редактировать 67331031/как-я-могу-сделать-свой-макет-адаптированным-к-материалу-пользовательский интерфейс-панель инструментов-высота

Комментарии:

1. Спасибо! Значит, нет возможности использовать, например calc(64px - ${some_calculated_height}) , чтобы держать все это в одной строке?

2. @Thimma by some_calculated_height , вы имеете в виду, что хотите найти более чистый способ кодирования или вы хотите использовать статическое значение some_calculated_height ? Если это первое, то ответ-нет. В противном случае вы всегда можете переопределить микшины панели инструментов с вашим значением createMuiTheme .

3. С вычисленной высотой я имею в виду переменную, которая изменяется в соответствии с размером экрана с помощью микшера, поэтому мне не нужно делать 3 копии одного и того же запроса, если это невозможно, то это тоже круто

4. @Thimma один из способов смягчить это-поместить ссылку на значение mixins по умолчанию, как в моем codesandbox, чтобы будущие сопровождающие могли понять, почему существует дублированный код.