Element Plus предоставляет гибкие средства для адаптивного управления интерфейсом, включая условное отображение компонентов на разных размерах экранов. Основным инструментом для этого является система утилитарных классов и директив, а также возможности Vue для реактивного контроля видимости.
В Element Plus встроены специальные CSS-классы, которые позволяют скрывать элементы в зависимости от ширины экрана:
el-hidden-xs – скрывает элемент на
экранах <576pxel-hidden-sm – скрывает элемент на
экранах ≥576px и <768pxel-hidden-md – скрывает элемент на
экранах ≥768px и <992pxel-hidden-lg – скрывает элемент на
экранах ≥992px и <1200pxel-hidden-xl – скрывает элемент на
экранах ≥1200pxПрименение этих классов не требует написания дополнительного JavaScript-кода:
<el-button class="el-hidden-sm el-hidden-md">Кнопка только для больших экранов</el-button>
В данном примере кнопка будет видна только на экранах ≥992px.
Для более гибкого контроля часто используют реактивные свойства Vue и
директиву v-show или v-if. Разница между
ними:
v-show – скрывает элемент через CSS
display: none, элемент присутствует в DOM.v-if – полностью удаляет элемент из
DOM, экономит ресурсы при сложных компонентах.Пример динамического скрытия элемента на основе ширины окна:
<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue';
const isMobile = ref(window.innerWidth < 768);
function handleResize() {
isMobile.value = window.innerWidth < 768;
}
onMounted(() => {
window.addEventListener('resize', handleResize);
});
onBeforeUnmount(() => {
window.removeEventListener('resize', handleResize);
});
</script>
<template>
<el-alert v-if="!isMobile" title="Этот алерт не показывается на мобильных устройствах" type="info" />
</template>
В этом примере компонент el-alert будет скрыт на экранах
шириной меньше 768px.
Для сложных компонентов, таких как el-table,
el-card или el-form, часто требуется
показывать разные элементы в зависимости от устройства. Здесь удобно
использовать слоты и условный рендеринг:
<el-card>
<template #header>
<h3 v-if="!isMobile">Полная шапка для десктопа</h3>
<h3 v-else>Короткая шапка для мобильных</h3>
</template>
<p>Содержимое карточки</p>
</el-card>
Такой подход позволяет создавать полностью адаптивный интерфейс без дублирования компонентов.
Для сложных интерфейсов часто используется сочетание утилитарных классов Element Plus и реактивного управления через Vue:
<el-row>
<el-col :span="12" class="el-hidden-xs">
Контент для планшетов и десктопов
</el-col>
<el-col :span="12" v-if="isMobile">
Контент для мобильных устройств
</el-col>
</el-row>
Такой подход позволяет максимально эффективно использовать доступное пространство на разных устройствах.
Element Plus утилитарные классы основаны на медиазапросах, но при необходимости можно создавать свои кастомные правила через SCSS или CSS:
@media (max-width: 600px) {
.custom-hidden {
display: none;
}
}
И применять их к любым компонентам Element Plus:
<el-button class="custom-hidden">Скрытая кнопка на узких экранах</el-button>
Это расширяет стандартные возможности библиотеки и позволяет адаптировать интерфейс под специфические задачи.
el-hidden-*.v-if /
v-show.Такой подход гарантирует, что интерфейс будет адаптивным, отзывчивым и легко поддерживаемым, независимо от размера экрана.