Текст: высота и затухание
Превью высотой 120 px. Параметры читаются из data-атрибутов, после явного init модуль создаёт кнопку и обрабатывает её клики через Data API.
Хорошее описание помогает человеку быстро понять главное. В карточке достаточно короткого превью: оно знакомит с темой, а подробности остаются доступны по кнопке. Такой подход удобен для описания товара, заметки о проекте или отзыва клиента.
VGRollup не удаляет продолжение и не загружает его заново. Весь текст уже находится на странице. Модуль ограничивает высоту области и добавляет плавное затухание у нижней границы, чтобы показать: у истории есть продолжение.
После раскрытия можно прочитать материал целиком. Повторное нажатие возвращает компактное превью. Переключите тему сайта: градиент использует общие семантические цвета и остаётся согласованным с фоном.
<div class="rollup-demo">
<div id="rollup-text" class="rollup-demo-copy"
data-height="120" data-lang="ru"
data-button-more="Читать полностью" data-button-less="Свернуть текст"
data-button-classes="btn btn-surface btn-sm"
style="--vg-rollup-fade-height: 48px">
<p>Хорошее описание помогает человеку быстро понять главное. В карточке достаточно короткого превью: оно знакомит с темой, а подробности остаются доступны по кнопке. Такой подход удобен для описания товара, заметки о проекте или отзыва клиента.</p>
<p>VGRollup не удаляет продолжение и не загружает его заново. Весь текст уже находится на странице. Модуль ограничивает высоту области и добавляет плавное затухание у нижней границы, чтобы показать: у истории есть продолжение.</p>
<p>После раскрытия можно прочитать материал целиком. Повторное нажатие возвращает компактное превью. Переключите тему сайта: градиент использует общие семантические цвета и остаётся согласованным с фоном.</p>
</div>
</div>
/**
* Описание: превью текста VGRollup с настройками из data-атрибутов.
* Возможности: явная инициализация, ограничение высоты и автоматическая кнопка Data API.
*/
import { VGRollup } from 'vgapp';
function initRollupDemo() {
const root = document.querySelector('#rollup-text');
if (!root || VGRollup.getInstance(root)) return;
// Сам по себе маркер data-vgrollup не запускает модуль: нужен init.
VGRollup.init(root);
}
initRollupDemo();
/* Композиция примеров; обрезкой и видимостью управляет VGRollup. */
.rollup-demo { min-width: 0; }
.rollup-demo-copy { line-height: 28px; }
.rollup-demo-copy p { margin: 0 0 1rem; }
.rollup-demo-copy p:last-child { margin-bottom: 0; }
.rollup-demo-list { margin: 0; padding-left: 1.5rem; }
.rollup-demo-item { padding: .5rem 0; }
.rollup-demo-actions { display: flex; flex-wrap: wrap; gap: .75rem; margin-top: 1.5rem; }
.rollup-demo-result {
display: block;
margin: 1.5rem 0 0;
padding: .75rem;
border: 1px solid var(--vg-border-default);
border-radius: .5rem;
background: var(--vg-background-secondary);
color: var(--vg-text-primary);
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.rollup-demo-log { max-height: 16rem; overflow-y: auto; }
.rollup-demo-empty { margin-top: 1.5rem; color: var(--vg-text-secondary); }