AppBar — это компонент верхней панели приложения, предназначенный для размещения навигации, заголовков страниц и интерактивных элементов управления. Он обеспечивает единый визуальный стиль, поддерживает адаптивность и интегрируется с другими компонентами библиотеки MUI.
position: определяет расположение панели. Возможные
значения:
fixed — закрепляет AppBar в верхней части окна, при
этом содержимое страницы может прокручиваться.absolute — панель находится поверх контента, не влияет
на поток элементов.sticky — панель закрепляется при прокрутке до
определённого места.static — панель находится в потоке документа и
прокручивается вместе с контентом.relative — смещается относительно своего обычного
положения.color: задаёт цветовую схему AppBar. Стандартные
варианты:
primarysecondarydefaulttransparentelevation: определяет уровень тени под панелью.
Значение задаётся числом от 0 до 24.
Пример базового AppBar:
import AppBar from '@mui/material/AppBar';
import Toolbar from '@mui/material/Toolbar';
import Typography from '@mui/material/Typography';
<AppBar position="static" color="primary" elevation={4}>
<Toolbar>
<Typography variant="h6">
Моя панель
</Typography>
</Toolbar>
</AppBar>
Toolbar — это контейнер для элементов управления внутри AppBar. Он обеспечивает выравнивание и отступы между компонентами, поддерживает адаптивное отображение элементов на разных устройствах.
Основные свойства Toolbar:
variant: задаёт размер и стиль панели. Возможные
значения:
regular — стандартная высота (по умолчанию).dense — уменьшенная высота для компактного
интерфейса.disableGutters: убирает горизонтальные отступы слева
и справа.
Пример использования Toolbar с несколькими элементами:
import IconButton from '@mui/material/IconButton';
import MenuIcon from '@mui/icons-material/Menu';
import Button from '@mui/material/Button';
<AppBar position="static">
<Toolbar variant="dense">
<IconButton edge="start" color="inherit" aria-label="menu">
<MenuIcon />
</IconButton>
<Typography variant="h6" sx={{ flexGrow: 1 }}>
Приложение
</Typography>
<Button color="inherit">Войти</Button>
</Toolbar>
</AppBar>
edge у IconButton позволяет
разместить кнопку на левом (start) или правом
(end) краю.sx={{ flexGrow: 1 }} у Typography
автоматически растягивает заголовок, создавая пространство между
кнопками и текстом.Hidden или Box с медиа-запросами
(display: { xs: 'none', md: 'block' }).MUI поддерживает скрытие AppBar при прокрутке с помощью хука
useScrollTrigger:
import React from 'react';
import useScrollTrigger from '@mui/material/useScrollTrigger';
import Slide from '@mui/material/Slide';
function HideOnScroll({ children }) {
const trigger = useScrollTrigger();
return (
<Slide appear={false} direction="down" in={!trigger}>
{children}
</Slide>
);
}
<HideOnScroll>
<AppBar>
<Toolbar>
<Typography variant="h6">Скрывающийся AppBar</Typography>
</Toolbar>
</AppBar>
</HideOnScroll>
Этот подход полезен для мобильных интерфейсов, где важно экономить экранное пространство.
AppBar часто комбинируют с компонентами Drawer или
Tabs для создания полноценной навигационной структуры:
Пример с Drawer:
import Drawer from '@mui/material/Drawer';
import List from '@mui/material/List';
import ListItem from '@mui/material/ListItem';
const [open, setOpen] = React.useState(false);
<IconButton onCl ick={() => setOpen(true)} color="inherit">
<MenuIcon />
</IconButton>
<Drawer open={open} onCl ose={() => setOpen(false)}>
<List>
<ListItem button>Главная</ListItem>
<ListItem button>Профиль</ListItem>
<ListItem button>Настройки</ListItem>
</List>
</Drawer>
sx и styled позволяет
переопределять отступы, цвета и высоту панели.ThemeProvider) обеспечивает
согласованность цвета и шрифтов по всему приложению.Transition или изменение стилей на основе состояния
(state).display: 'flex') помогают распределять
кнопки и текст.dense
Toolbar и скрывать элементы через медиа-запросы.position="fixed" для постоянного
доступа к навигации, но необходимо компенсировать высоту панели у
основного контента через отступ.AppBar и Toolbar образуют основу навигации в MUI и обеспечивают гибкую и современную структуру интерфейсов, которую легко адаптировать под разные устройства и сценарии использования.