В библиотеке MUI (Material-UI) Card является базовым компонентом для отображения информации в виде структурированного блока. Для реализации адаптивных карточек используются сочетания компонентов Card, CardContent, CardMedia и Grid, а также возможности системы sx и breakpoints для управления стилями под разные размеры экранов.
import React from 'react';
import { Card, CardContent, CardMedia, Typography, Grid } from '@mui/material';
Карточка состоит из медиа-блока (изображение или видео), текста и, при необходимости, действий пользователя. Основное правило адаптивности — использование гибкой сетки и относительных размеров.
MUI предоставляет компонент Grid, который позволяет строить сетку с различной структурой для разных точек преломления экрана (breakpoints). Пример адаптивной карточки в сетке:
Название карточки
Краткое описание содержимого карточки, которое адаптируется под размер контейнера.
Разбор параметров Grid:
xs={12} — карточка занимает всю ширину на маленьких
экранах.sm={6} — на экранах среднего размера карточка занимает
половину ширины.md={4} — на больших экранах три карточки размещаются в
ряд.Эта стратегия позволяет карточкам автоматически перестраиваться в зависимости от ширины окна браузера.
Для поддержания эстетики на разных устройствах важно, чтобы карточка имела гибкую высоту и пропорции изображения:
height с использованием объекта позволяет задавать
разную высоту для каждого breakpoint.objectFit: 'cover' гарантирует, что изображение
сохраняет пропорции и заполняет блок без искажений.MUI предоставляет систему типографики, которая позволяет изменять размеры текста в зависимости от экрана:
Заголовок карточки
Подробное описание содержимого карточки с адаптивным размером текста.
Ключевые моменты:
sx позволяет напрямую управлять стилями под
breakpoints.Для интерактивных карточек добавляются компоненты CardActions и Button:
import { Button, CardActions } from '@mui/material';
Особенности адаптивности CardActions:
flexDirection в sx для мобильных
устройств.
Компонент Box позволяет создавать обертки с гибкими стилями:
import { Box } from '@mui/material';
{/* контент карточки */}
p (padding) адаптируется под размеры экрана.flex и Grid.objectFit: cover и height через
breakpoints.sx и variant.