Ant Design предоставляет гибкую систему для построения интерфейсов, которая автоматически подстраивается под разные размеры экранов. Центральным элементом является Grid System — сетка, основанная на 24 колонках, позволяющая управлять расположением компонентов с учетом ширины экрана. Основные свойства, влияющие на адаптивность:
xs, sm, md, lg,
xl, xxl — определяют количество колонок,
занимаемых элементом, для конкретного диапазона ширины.offset — смещение элемента вправо, что позволяет
создавать пустое пространство слева.order — порядок отображения элементов на разных
устройствах, полезно для перестройки интерфейса при сужении экрана.Пример использования:
<Row gutter={[16, 16]}>
<Col xs={24} sm={12} md={8} lg={6}>
<Card title="Пример 1">Контент</Card>
</Col>
<Col xs={24} sm={12} md={8} lg={6}>
<Card title="Пример 2">Контент</Card>
</Col>
</Row>
В этом примере каждая колонка занимает всю ширину на очень
малых экранах (xs=24), половину на малых
(sm=12), треть на средних (md=8) и четверть на
больших (lg=6). Такой подход обеспечивает удобочитаемость и
правильное масштабирование контента.
Для оптимизации интерфейса на малых устройствах важна возможность контролировать видимость компонентов. В Ant Design доступны два подхода:
responsive свойства — можно
использовать xs={0} или sm={0}, чтобы
полностью скрыть колонку на определённых разрешениях.Responsive — библиотека
предоставляет вспомогательные функции для адаптивного рендеринга,
например через useBreakpoint().Пример:
import { Grid, Button } from 'antd';
const { useBreakpoint } = Grid;
const ResponsiveButton = () => {
const screens = useBreakpoint();
return (
<>
{screens.sm ? <Button>Кнопка для больших экранов</Button> : null}
{!screens.sm ? <Button>Кнопка для маленьких экранов</Button> : null}
</>
);
};
Метод useBreakpoint() возвращает объект с булевыми
значениями для каждого брейкпоинта (xs, sm,
md, lg, xl, xxl),
что позволяет динамически менять интерфейс без лишних перерендеров.
Для мобильных экранов особенно важно использовать компактные и интуитивные навигационные элементы:
inline или
vertical для боковых панелей, в сочетании с
Drawer для выдвижного меню.Пример адаптивного меню:
import { Menu, Drawer, Button } from 'antd';
import { useState } from 'react';
const MobileMenu = () => {
const [visible, setVisible] = useState(false);
return (
<>
<Button onCl ick={() => setVisible(true)}>Меню</Button>
<Drawer
title="Навигация"
placement="left"
onCl ose={() => setVisible(false)}
visible={visible}
>
<Menu mode="vertical">
<Menu.Item key="1">Главная</Menu.Item>
<Menu.Item key="2">О нас</Menu.Item>
<Menu.Item key="3">Контакты</Menu.Item>
</Menu>
</Drawer>
</>
);
};
Такой подход позволяет полностью скрыть боковую панель на маленьких устройствах и отображать её только при взаимодействии пользователя.
Некоторые компоненты Ant Design обладают встроенной адаптивностью:
scroll={{ x: 'max-content' }} обеспечивает горизонтальную
прокрутку вместо сжатия колонок.Grid внутри
Card позволяет динамически перестраивать элементы.labelCol и
wrapperCol могут быть заданы с разными брейкпоинтами
(xs, sm и т.д.), чтобы форма оставалась
читаемой на малых экранах.Пример адаптивной таблицы:
<Table
columns={columns}
dataSource={data}
scroll={{ x: 800 }}
/>
Где scroll.x определяет минимальную ширину таблицы и
позволяет пользователю прокручивать контент горизонтально на узких
экранах.
Для малых экранов критично уменьшать нагрузку на интерфейс:
React.lazy и Suspense.List с
virtual режимом) для отображения длинных списков.React.memo и правильное использование key в
списках.Пример виртуального списка:
import { List } from 'antd';
<List
dataSource={data}
renderItem={item => <List.Item>{item.name}</List.Item>}
virtual
/>
Это позволяет поддерживать плавность интерфейса даже на мобильных устройствах с ограниченными ресурсами.
При разработке под малые экраны следует комбинировать:
Такой подход обеспечивает чистый, удобный и быстрый интерфейс, который сохраняет функциональность и читаемость на устройствах с любой шириной экрана.