#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)`
}
}
Живая демонстрация
Комментарии:
1. Спасибо! Значит, нет возможности использовать, например
calc(64px - ${some_calculated_height})
, чтобы держать все это в одной строке?2. @Thimma by
some_calculated_height
, вы имеете в виду, что хотите найти более чистый способ кодирования или вы хотите использовать статическое значениеsome_calculated_height
? Если это первое, то ответ-нет. В противном случае вы всегда можете переопределить микшины панели инструментов с вашим значениемcreateMuiTheme
.3. С вычисленной высотой я имею в виду переменную, которая изменяется в соответствии с размером экрана с помощью микшера, поэтому мне не нужно делать 3 копии одного и того же запроса, если это невозможно, то это тоже круто
4. @Thimma один из способов смягчить это-поместить ссылку на значение mixins по умолчанию, как в моем codesandbox, чтобы будущие сопровождающие могли понять, почему существует дублированный код.