Компонент Typography в MUI служит для отображения
текстового контента с соблюдением единой системы стилей. Он абстрагирует
CSS-свойства, такие как font-size,
font-weight, line-height и
letter-spacing, предоставляя готовые варианты для
заголовков, параграфов и вспомогательного текста. Основная цель
компонента — обеспечить визуальную консистентность и соответствие
Material Design без ручной настройки стилей для каждого элемента
текста.
Синтаксис базового использования:
import Typography from '@mui/material/Typography';
<Typography variant="h1">Заголовок первого уровня</Typography>
h1, body1,
subtitle1).Typography по умолчанию рендерит заголовки
h1-h6 или p).inherit, left, center,
right, justify).primary, secondary,
textPrimary, textSecondary).MUI предоставляет следующие основные варианты:
Пример использования нескольких вариантов:
<Typography variant="h4" gutterBottom>
Раздел
</Typography>
<Typography variant="body1" color="textSecondary">
Основной текст статьи с пояснениями и дополнительной информацией.
</Typography>
<Typography variant="caption" display="block" gutterBottom>
Примечание к тексту
</Typography>
MUI позволяет глобально управлять стилями текста через объект theme. Это особенно важно для крупных проектов, где требуется единый стиль типографики.
Пример изменения темы:
import { createTheme, ThemeProvider } from '@mui/material/styles';
const theme = createTheme({
typography: {
h1: {
fontSize: '3rem',
fontWeight: 700,
letterSpacing: '-0.01562em',
},
body1: {
fontSize: '1rem',
lineHeight: 1.5,
},
button: {
textTransform: 'uppercase',
},
},
});
<ThemeProvider theme={theme}>
<Typography variant="h1">Кастомный заголовок</Typography>
</ThemeProvider>
rem, px или em.400
обычная, 500 полужирная, 700 жирная).uppercase, lowercase,
capitalize).Typography позволяет гибко сочетать типографические варианты с HTML-компонентами для семантической разметки:
<Typography variant="h6" component="h2">
Заголовок секции
</Typography>
<Typography variant="body2" component="span" color="primary">
Встроенный текст
</Typography>
h1, но на уровне HTML это p для правильной
семантики.<Typography
variant="subtitle1"
sx={{ color: 'secondary.main', fontStyle: 'italic' }}
>
Стилизованный подзаголовок
</Typography>
Typography интегрируется с медиазапросами и позволяет делать текст адаптивным через систему темы:
const theme = createTheme({
typography: {
h2: {
fontSize: '2rem',
'@media (min-width:600px)': {
fontSize: '2.5rem',
},
'@media (min-width:960px)': {
fontSize: '3rem',
},
},
},
});
block, inline,
inline-block).<p>.Пример:
<Typography noWrap variant="body1">
Очень длинный текст, который не должен переноситься на новую строку
</Typography>
Этот подход обеспечивает консистентное оформление интерфейса, избавляет от необходимости вручную управлять стилями и делает код более читаемым и поддерживаемым.