Система компонентов CSS · Новый ресурс

Дизайн-система Fomantic UI.

Нативная полка для чтения Fomantic UI с проверенными скомпилированными значениями темы, модулями выпадающего списка и рейтинга jQuery, явной поддержкой клавиатуры и постоянно сохраняемым локальным списком избранного.

Руководство OpenDesign9 глав28 справочных записейАвторское руководство по приложению
01

Предварительный просмотр интерфейса дизайн-системы Fomantic UI

Отфильтруйте три оригинальные темы для чтения, поставьте им оценки звёздами или стрелками и добавьте подходящие в список для обсуждения.

Список для обсуждения в читальном залеОткрыть полный пример
Модули Fomantic UI 2.9.4 CSS с jQuery 3.7.1. Иллюстрации обложек и дополнительная поддержка клавиатуры для рейтинга созданы специально для этого примера. · Справочник по реализации
02

Справочник по дизайн-системе Fomantic UI

Скомпилированные значения по умолчанию Fomantic UI 2.9.4 проверены непосредственно. Это значения по умолчанию на уровне селекторов из темы на основе Less, а не придуманные токены CSS времени выполнения. Исходные цвета обложек и размеры приложения указаны отдельно.

Типографика сайта по умолчанию

Источник
Название / правилоЗначение / конфигурацияПрименение
html font-size14pxБазовый размер rem по умолчанию.
body font-familyLato, system-ui, platform and emoji fallbacksВ предварительный просмотр включены локальные файлы шрифта Lato.
body line-height1.4285emОколо 20px при размере текста по умолчанию 14px.
body text colorrgba(0, 0, 0, 0.87)Текст с высокой степенью акцента по умолчанию.
h1 / h2 / h32rem / 1.71428571rem / 1.28571429remРазмеры заголовков по умолчанию до переопределений исходной страницы.
heading line-height1.28571429emРитм заголовков по умолчанию.

Кнопки по умолчанию

Источник
Название / правилоЗначение / конфигурацияПрименение
.ui.button background#e0e1e2 Нейтральная кнопка по умолчанию.
.ui.button border-radius0.28571429remОколо 4px при размере корневого элемента по умолчанию.
.ui.teal.button background#00b5ad Нативный бирюзовый цвет действия, используемый в списке для чтения.
.ui.teal.button:hover#009c95 Нативное состояние наведения бирюзовой кнопки.
.ui.teal.button:focus#008c86 Нативный фон фокуса бирюзового цвета.
.ui.teal.button:active#00827c Нативный бирюзовый фон нажатой кнопки.
.ui.primary.button background#2185d0 Основной синий цвет отличается от именованного бирюзового варианта.

Геометрия карточек по умолчанию

Источник
Название / правилоЗначение / конфигурацияПрименение
.ui.card width290pxФиксированная ширина по умолчанию; вариант с автоматической шириной заполняет эту сетку приложения.
.ui.card border-radius0.28571429remОколо 4px при размере корневого элемента по умолчанию.
.ui.card box-shadow0 1px 3px 0 #d4d4d5, 0 0 0 1px #d4d4d5Тень и обводка по умолчанию.
.ui.card margin1em 0В исходной сетке задано нулевое внешнее поле, чтобы карточки выравнивались.
.ui.card transitionbox-shadow 0.1s ease, transform 0.1s easeАнимация карточки по умолчанию.

Настройки рейтинга

Источник
Название / правилоЗначение / конфигурацияПрименение
maxRating4 by default; 5 in this exampleЯвно заданная пятибалльная шкала соответствует максимальному значению доступного ползунка.
initialRating0До взаимодействия с пользователем рейтинг не задан.
clearableauto by default; true in this exampleПозволяет сбросить существующий рейтинг.
interactivetrueВзаимодействие мышью включено.
onRate(value)Callback after a rating is selectedСинхронизирует текстовый вывод и доступное значение.

Исходная шкала читального зала

Источник
Название / правилоЗначение / конфигурацияПрименение
Page padding36px 28px / 24px 18px mobileИсходные отступы макета.
Grid gap22pxИсходная полка для чтения из трёх столбцов.
Page heading34px / 1.15; 29px mobileИсходное переопределение заголовка.
Cover height175px / 155px mobileИллюстрация обложки книги CSS, созданная специально для этого примера.
Layout breakpoint760pxИсходное переключение на один столбец карточек.
03

Полное руководство по дизайн-системе Fomantic UI

Практическое руководство по выбору, применению и оценке этой системы для реального интерфейса.

DESIGN-fomantic-ui.md

Подробные рекомендации, отправная точка для реализации и ссылки на источники.

Скачать руководство

Дизайн-система Fomantic UI: словарь CSS с модулями jQuery

Терминология CSS и модули jQuery

Fomantic UI сочетает семантические строки классов с необязательными модулями, поддерживающими состояние. В полке для чтения используются классы ui fluid card, ui teal button и ui basic label для оформления. Выпадающий список и рейтинги явно инициализируются через jQuery. Если загрузить только таблицу стилей, карточки отобразятся, но такое же интерактивное поведение не появится.

Из этого руководства OpenDesign

В этом примере зафиксированы версии Fomantic UI 2.9.4 и jQuery 3.7.1. Модуль transition подключается перед dropdown, а затем — rating. Лучше наглядно показать эти зависимости, чем вывести статичный ряд звёзд и назвать его примером интерактивной библиотеки. Исходный модуль приложения запускается только после появления разметки карточек.

Прочитать вспомогательную спецификацию

Скомпилированные значения дизайн-системы Fomantic UI — это не имена токенов времени выполнения

Скомпилированные значения по умолчанию — не имена токенов во время выполнения

Тема Fomantic по умолчанию создаётся с помощью Less. Поэтому в справочнике приведены фактические значения селекторов, например цвет фона бирюзовой кнопки и радиус скругления карточки. В нём не придуман токен --fomantic-primary API, которого нет в скомпилированном пакете. Для более масштабного изменения темы используйте документированные файлы темы и переменных для сборки.

Именованный бирюзовый вариант отличается от основного синего. В этой полке для чтения действие добавления в список окрашено в бирюзовый цвет, а в оригинальных иллюстрациях обложек используются цвета бумаги, шалфея и тёплой глины. Эти обложки — иллюстрации приложения, а не официальные образцы палитры. Значения кнопки при наведении, фокусе и нажатии остаются нативными значениями Fomantic по умолчанию.

Прочитать вспомогательную спецификацию

В дизайн-системе Fomantic UI размер rem в 14px меняет геометрию

Размер rem в четырнадцать пикселей меняет геометрию

В таблице стилей сайта по умолчанию для корневого элемента и текста основного содержимого задан размер 14px. Поэтому радиус кнопки и карточки 0.28571429rem составляет примерно четыре пикселя. Если перенести это значение rem в другой проект с корневым размером 16px, геометрия будет отличаться. Именно поэтому в справочнике указан размер корневого элемента, а не только радиус без пояснений.

Предпочтительный шрифт — Lato; в скомпилированный пакет включены локальные файлы шрифтов. В этом автономном предварительном просмотре ресурсы шрифтов встроены в документ, а не загружаются со стороннего сервиса веб-шрифтов. Исходный размер заголовка страницы переопределён и составляет 34px; описания карточек сохраняют компактный размер основного текста, но используют более свободную высоту строки, заданную для приложения.

Прочитать вспомогательную спецификацию

Анатомия карточки в дизайн-системе Fomantic UI отделяет содержимое от действий

Структура карточки разделяет содержимое и действия

Каждая нативная карточка содержит декоративную обложку, блок с темой и описанием, отдельный блок с рейтингом и дополнительный блок с действием добавления в список. Карточки с автоматической шириной заполняют исходную сетку из трёх столбцов вместо использования ширины пакета по умолчанию — 290px. Для отдельных карточек убраны внешние поля, чтобы сетка обеспечивала равномерные промежутки.

У каждого задания своя цель для чтения: сравнить межбуквенный интервал, удалить элемент и изучить свободное пространство или понаблюдать за изменением цвета в зависимости от контекста. Иллюстрации обложек визуально поддерживают эти упражнения с помощью типографики, прямоугольников и наложения цветов. Это оригинальные задания, не одобренные издательством.

Прочитать вспомогательную спецификацию

В дизайн-системе Fomantic UI используйте нативное поведение рейтинга для всех способов ввода

Вызывайте стандартное поведение рейтинга при любом способе ввода

Модуль рейтинга настроен с максимальным значением пять и параметром clearable true. onRate получает текущее числовое значение и синхронизирует видимый результат с доступным значением ползунка. Действие «Сбросить рейтинг» вызывает функцию модуля clear rating, а не удаляет активные классы вручную.

Нативный модуль звёзд поддерживает взаимодействие мышью, но в этом примере также добавлена явная поддержка клавиатуры. Контейнер рейтинга — ползунок с меткой и диапазоном от нуля до пяти. Стрелки изменяют значение на один шаг, Home сбрасывает рейтинг, а End устанавливает пять. Каждый способ ввода вызывает set rating, поэтому отображаемые звёзды и вывод приложения используют одно и то же состояние модуля.

  1. Перейдите клавишей Tab к рейтингу и дважды нажмите стрелку вправо, чтобы выбрать два балла из пяти.
  2. Нажмите End, чтобы выбрать пять баллов, затем Home, чтобы вернуть состояние «Рейтинг не задан».
  3. Нажмите на звезду и убедитесь, что текстовый вывод и доступное значение обновляются одновременно.

Прочитать вспомогательную спецификацию

Фильтрация в выпадающем списке дизайн-системы Fomantic UI сохраняет скрытое состояние

Фильтрация выпадающего списка сохраняет скрытое состояние

Выбор темы превращается в нативный выпадающий список Fomantic при инициализации dropdown. Функция обратного вызова onChange скрывает карточки, тема которых не совпадает с выбранным значением, и обновляет счётчик видимых заданий. Пункт «Все темы» восстанавливает всю полку. Для анимации меню компонент использует модуль transition.

Фильтрация не удаляет карточку и не создаёт её заново. Существующие рейтинги и состояние списка остаются привязанными к исходным записям, когда карточки скрыты. Это сделано намеренно: сузить полку — значит изменить её отображение, а не удалить прежний выбор пользователя. Поэтому в сводке может упоминаться элемент, скрытый текущим фильтром.

Прочитать вспомогательную спецификацию

В дизайн-системе Fomantic UI добавление в список не зависит от рейтинга

Список избранного не зависит от оценки

Рейтинг показывает интерес по шкале от нуля до пяти, а добавление в список — отдельное решение да или нет. Пользователь может сохранить задание для обсуждения, ещё не выставив ему оценку. Кнопка добавления в список сообщает о выбранном состоянии через aria-pressed и меняет подписи «Добавить» и «Удалить». Сводка получает названия из Set, используя стабильные идентификаторы тем.

Область статуса описывает выбранные задания, не утверждая, что коллекция сохранена на удалённом сервере. После перезагрузки браузера данные этого примера очищаются. Для общего списка чтения в реальном приложении понадобятся постоянное хранение данных, идентификация пользователей и обработка конфликтов; эти возможности не появляются от добавления класса карточке.

Прочитать вспомогательную спецификацию

В дизайн-системе Fomantic UI числовое значение важно и помимо декоративных звёзд

Числовое значение важно и помимо декоративных звёзд

Звёздочки скрыты от вспомогательных технологий, поскольку родительский ползунок сообщает числовое значение и метку. Видимое значение «Рейтинг не задан» или дробный результат передаёт ту же информацию, не заставляя пользователя считать цветные значки. Обводка focus-visible показывает, что ползунок активен, а кнопка «Сбросить» возвращает фокус на этот элемент управления.

Формы на обложках книг также служат украшением. Настоящие название задания, длительность и описание остаются текстом внутри карточки. На узких экранах карточки располагаются в один столбец; исходная контрольная точка — 760px. В примере сбрасывается высота области просмотра, заданная для body в скомпилированных стилях, и отключается скрытие горизонтального переполнения, чтобы при встраивании высота соответствовала фактической высоте содержимого и не маскировала дефекты макета.

  • Передавайте текущее число и текстом, и через доступное значение.
  • Используйте нативные кнопки для сброса рейтинга и изменения списка.
  • Сохраняйте метки и полные описания при переходе сетки к одному столбцу.

Прочитать вспомогательную спецификацию

В дизайн-системе Fomantic UI подключайте шрифты рядом с таблицами стилей или включайте их в сборку

Поставляйте шрифты вместе со стилями или включайте их в сборку

Для обычного проекта скопируйте весь каталог fomantic-ui-css, а не извлекайте semantic.css, забывая о каталоге themes. В скомпилированных стилях используются относительные пути к файлам шрифтов Lato и иконок. Приведённая ниже настройка сохраняет эти пути и загружает jQuery до модулей пакета.

В локальном предварительном просмотре используются только необходимые стили и сценарии компонентов, а затем указанные в них ресурсы встраиваются в единый документ. Внешние шрифты не загружаются. В производственных сборщиках эти ресурсы могут обрабатываться иначе, но пути к шрифтам и порядок подключения модулей всё равно нужно проверить на готовой странице, а не считать правильными лишь потому, что npm install завершился успешно.

Прочитать вспомогательную спецификацию

Примеры компонентов дизайн-системы Fomantic UI

Полка для чтения из трёх карточек

Нативные карточки, метки, кнопки, разметка выпадающего списка и контейнеры рейтинга.

html
<main class="reading-room"><header><div><p class="kicker">FOMANTIC UI · READING ROOM</p><h1>Make a shelf worth returning to.</h1><p class="intro">Rate three original reading prompts and build a local discussion shortlist.</p></div><span class="ui teal basic label">Local collection</span></header><div class="toolbar"><label for="topic">Show topic</label><select id="topic" class="ui selection dropdown"><option value="all">All topics</option><option value="type">Typography</option><option value="space">Space & rhythm</option><option value="color">Color</option></select><span id="visible-count">3 prompts</span></div><div class="book-grid"><article class="ui fluid card" data-topic="type" data-name="Letters in the margins"><div class="book-cover type-cover" aria-hidden="true"><span>Aa</span><small>FORM / COUNTERFORM</small></div><div class="content"><div class="meta">TYPOGRAPHY · 18 MIN</div><h2 class="header">Letters in the margins</h2><div class="description">Compare a narrow editorial column with a generous display line. Find where the rhythm changes.</div></div><div class="content"><label class="rating-label" id="label-type">Your interest</label><div class="ui huge star rating" data-rating="0" data-max-rating="5" role="slider" tabindex="0" aria-labelledby="label-type" aria-valuemin="0" aria-valuemax="5" aria-valuenow="0"></div><output class="score">Not rated</output><button class="ui tiny basic button clear-rating" type="button">Clear rating</button></div><div class="extra content"><button class="ui fluid teal button shortlist" aria-pressed="false">Add to shortlist</button></div></article><article class="ui fluid card" data-topic="space" data-name="The space between"><div class="book-cover space-cover" aria-hidden="true"><span></span><span></span><span></span><small>PAUSE / SEQUENCE</small></div><div class="content"><div class="meta">SPACE & RHYTHM · 12 MIN</div><h2 class="header">The space between</h2><div class="description">Remove one element from a crowded page. Rebalance the remaining space without adding decoration.</div></div><div class="content"><label class="rating-label" id="label-space">Your interest</label><div class="ui huge star rating" data-rating="0" data-max-rating="5" role="slider" tabindex="0" aria-labelledby="label-space" aria-valuemin="0" aria-valuemax="5" aria-valuenow="0"></div><output class="score">Not rated</output><button class="ui tiny basic button clear-rating" type="button">Clear rating</button></div><div class="extra content"><button class="ui fluid teal button shortlist" aria-pressed="false">Add to shortlist</button></div></article><article class="ui fluid card" data-topic="color" data-name="A color and its neighbor"><div class="book-cover color-cover" aria-hidden="true"><span></span><span></span><small>CONTEXT / CONTRAST</small></div><div class="content"><div class="meta">COLOR · 15 MIN</div><h2 class="header">A color and its neighbor</h2><div class="description">Place the same accent on two backgrounds. Describe the shift before changing its value.</div></div><div class="content"><label class="rating-label" id="label-color">Your interest</label><div class="ui huge star rating" data-rating="0" data-max-rating="5" role="slider" tabindex="0" aria-labelledby="label-color" aria-valuemin="0" aria-valuemax="5" aria-valuenow="0"></div><output class="score">Not rated</output><button class="ui tiny basic button clear-rating" type="button">Clear rating</button></div><div class="extra content"><button class="ui fluid teal button shortlist" aria-pressed="false">Add to shortlist</button></div></article></div><section class="ui message summary"><h2 class="header">Discussion shortlist</h2><p id="summary" role="status">No prompts selected. Add one to begin.</p><p class="scope">Ratings and selections stay in this browser page. These are original prompts, not published books.</p></section></main>

Справочник по коду

  • Это оригинальные задания для упражнений, а не настоящие обложки книг.
  • Для каждого рейтинга заданы собственная доступная метка и числовой диапазон.
  • В действиях списка используется aria-pressed.

Инициализация модулей и локальное взаимодействие

Фильтрация выпадающего списка, вызовы функций рейтинга, поддержка клавиатуры и состояние списка.

javascript
const cards=[...document.querySelectorAll('.book-grid article')],selected=new Set();
$('#topic').dropdown({onShow(){this.setAttribute('aria-expanded','true');},onHide(){this.setAttribute('aria-expanded','false');},onChange(value){let count=0;cards.forEach(card=>{card.hidden=value!=='all'&&card.dataset.topic!==value;if(!card.hidden)count++;});document.querySelectorAll('.toolbar .menu .item').forEach(item=>item.setAttribute('aria-selected',String(item.dataset.value===value)));document.querySelector('#visible-count').textContent=`${count} ${count===1?'prompt':'prompts'}`;}});
const dropdown=document.querySelector('.toolbar div.dropdown');dropdown.setAttribute('role','combobox');dropdown.setAttribute('aria-label','Show topic');dropdown.setAttribute('aria-expanded','false');dropdown.setAttribute('aria-haspopup','listbox');dropdown.querySelector('.menu').setAttribute('role','listbox');dropdown.querySelectorAll('.menu .item').forEach(item=>{item.setAttribute('role','option');item.setAttribute('aria-selected',String(item.dataset.value==='all'));});
$('.ui.rating').each(function(){const node=this,$rating=$(node);$rating.rating({maxRating:5,clearable:true,onRate(value){node.setAttribute('aria-valuenow',value);node.setAttribute('aria-valuetext',value?`${value} out of 5`:'Not rated');node.closest('article').querySelector('.score').textContent=value?`${value} / 5`:'Not rated';}});node.setAttribute('aria-valuetext','Not rated');node.querySelectorAll('.icon').forEach(i=>i.setAttribute('aria-hidden','true'));node.addEventListener('keydown',e=>{let value=Number($rating.rating('get rating'));if(['ArrowRight','ArrowUp'].includes(e.key))value=Math.min(5,value+1);else if(['ArrowLeft','ArrowDown'].includes(e.key))value=Math.max(0,value-1);else if(e.key==='Home')value=0;else if(e.key==='End')value=5;else return;e.preventDefault();$rating.rating('set rating',value);});node.closest('article').querySelector('.clear-rating').onclick=()=>{$rating.rating('clear rating');node.focus();};});
cards.forEach(card=>{card.querySelector('.shortlist').onclick=e=>{const id=card.dataset.topic,button=e.currentTarget;if(selected.has(id)){selected.delete(id);button.textContent='Add to shortlist';button.setAttribute('aria-pressed','false');}else{selected.add(id);button.textContent='Remove from shortlist';button.setAttribute('aria-pressed','true');}const names=cards.filter(c=>selected.has(c.dataset.topic)).map(c=>c.dataset.name);document.querySelector('#summary').textContent=names.length?`${names.length} selected: ${names.join('; ')}.`:'No prompts selected. Add one to begin.';};});

Справочник по коду

  • jQuery и модули Fomantic должны загружаться до этого файла.
  • Для изменений клавишами со стрелками используется тот же метод set rating.
  • Фильтрация скрывает карточки, не сбрасывая оценки и выбор.

Исходная композиция книжной полки

Адаптивная сетка, обложки и явное выделение фокуса.

css
body{background:#f6f5f2}.reading-room{max-width:1120px;margin:auto;padding:36px 28px}.reading-room header{display:flex;justify-content:space-between;align-items:flex-start;gap:24px;margin-bottom:32px}.kicker{font-size:11px;letter-spacing:.14em;font-weight:700;color:#008c86}h1{font-size:34px;line-height:1.15;margin:12px 0}.intro{color:#666;font-size:15px;line-height:1.6}.toolbar{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-bottom:24px;font-size:14px}.toolbar>label{font-weight:700}.toolbar>span{color:#767676;margin-left:auto}.book-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;align-items:start}.book-grid>.ui.card{margin:0;height:100%}.book-grid>.ui.card[hidden]{display:none}.book-cover{height:175px;position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center}.book-cover small{position:absolute;bottom:16px;left:18px;letter-spacing:.15em;font-size:9px;font-weight:700}.type-cover{background:#e2ccb0;color:#4a332a}.type-cover>span{font-family:Georgia,serif;font-size:90px;line-height:1}.space-cover{background:#ccd7d5;gap:10px}.space-cover>span{height:65px;width:25px;background:#3c6763}.space-cover>span:nth-child(2){height:90px;width:45px}.color-cover{background:#dcb9b0}.color-cover>span{width:85px;height:85px;background:#a85243}.color-cover>span:nth-child(2){width:50px;height:50px;border-radius:50%;background:#e6c57c;position:absolute}.book-grid .description{font-size:14px;line-height:1.6;min-height:88px}.rating-label{display:block;font-size:12px;font-weight:bold;margin-bottom:10px}.score{display:block;font-size:12px;color:#666;margin:8px 0 12px}.clear-rating{margin-bottom:0!important}.book-grid .ui.rating:focus-visible{outline:3px solid #00b5ad;outline-offset:4px}.summary{margin-top:28px!important}.scope{font-size:12px;color:#666}button:focus-visible{outline:3px solid #00b5ad!important;outline-offset:3px}@media(max-width:760px){.reading-room{padding:24px 18px}.reading-room header{flex-direction:column;gap:8px}h1{font-size:29px}.book-grid{grid-template-columns:1fr}.book-grid .description{min-height:0}.book-cover{height:155px}.toolbar>span{width:100%;margin-left:0}.toolbar .dropdown{min-width:180px}}
html,body{height:auto;min-height:0}body{min-width:0;overflow-x:visible}

Справочник по коду

  • Значение height:100% по умолчанию в собранном сайте сбрасывается на auto для встраивания.
  • Переполнение body не используется для сокрытия ошибок вёрстки.
04

Настройка агента дизайн-системы Fomantic UI

Отправная точка для реализации

Проверено с Fomantic UI 2.9.4 и jQuery 3.7.1. В автономном примере встроены необходимые файлы шрифтов; при обычной настройке сохраняются пути относительно пакета. Обёртка HTML содержит всю разметку body; сохраните предоставленные примеры взаимодействия и CSS под указанными здесь именами файлов.

html
<!-- npm install [email protected] [email protected] -->
<!-- Copy node_modules/fomantic-ui-css into public/vendor/fomantic-ui-css. -->
<!-- Copy node_modules/jquery/dist/jquery.min.js into public/vendor/jquery.min.js. -->
<link rel="stylesheet" href="/vendor/fomantic-ui-css/semantic.min.css">
<link rel="stylesheet" href="style.css">
<main class="reading-room"><header><div><p class="kicker">FOMANTIC UI · READING ROOM</p><h1>Make a shelf worth returning to.</h1><p class="intro">Rate three original reading prompts and build a local discussion shortlist.</p></div><span class="ui teal basic label">Local collection</span></header><div class="toolbar"><label for="topic">Show topic</label><select id="topic" class="ui selection dropdown"><option value="all">All topics</option><option value="type">Typography</option><option value="space">Space & rhythm</option><option value="color">Color</option></select><span id="visible-count">3 prompts</span></div><div class="book-grid"><article class="ui fluid card" data-topic="type" data-name="Letters in the margins"><div class="book-cover type-cover" aria-hidden="true"><span>Aa</span><small>FORM / COUNTERFORM</small></div><div class="content"><div class="meta">TYPOGRAPHY · 18 MIN</div><h2 class="header">Letters in the margins</h2><div class="description">Compare a narrow editorial column with a generous display line. Find where the rhythm changes.</div></div><div class="content"><label class="rating-label" id="label-type">Your interest</label><div class="ui huge star rating" data-rating="0" data-max-rating="5" role="slider" tabindex="0" aria-labelledby="label-type" aria-valuemin="0" aria-valuemax="5" aria-valuenow="0"></div><output class="score">Not rated</output><button class="ui tiny basic button clear-rating" type="button">Clear rating</button></div><div class="extra content"><button class="ui fluid teal button shortlist" aria-pressed="false">Add to shortlist</button></div></article><article class="ui fluid card" data-topic="space" data-name="The space between"><div class="book-cover space-cover" aria-hidden="true"><span></span><span></span><span></span><small>PAUSE / SEQUENCE</small></div><div class="content"><div class="meta">SPACE & RHYTHM · 12 MIN</div><h2 class="header">The space between</h2><div class="description">Remove one element from a crowded page. Rebalance the remaining space without adding decoration.</div></div><div class="content"><label class="rating-label" id="label-space">Your interest</label><div class="ui huge star rating" data-rating="0" data-max-rating="5" role="slider" tabindex="0" aria-labelledby="label-space" aria-valuemin="0" aria-valuemax="5" aria-valuenow="0"></div><output class="score">Not rated</output><button class="ui tiny basic button clear-rating" type="button">Clear rating</button></div><div class="extra content"><button class="ui fluid teal button shortlist" aria-pressed="false">Add to shortlist</button></div></article><article class="ui fluid card" data-topic="color" data-name="A color and its neighbor"><div class="book-cover color-cover" aria-hidden="true"><span></span><span></span><small>CONTEXT / CONTRAST</small></div><div class="content"><div class="meta">COLOR · 15 MIN</div><h2 class="header">A color and its neighbor</h2><div class="description">Place the same accent on two backgrounds. Describe the shift before changing its value.</div></div><div class="content"><label class="rating-label" id="label-color">Your interest</label><div class="ui huge star rating" data-rating="0" data-max-rating="5" role="slider" tabindex="0" aria-labelledby="label-color" aria-valuemin="0" aria-valuemax="5" aria-valuenow="0"></div><output class="score">Not rated</output><button class="ui tiny basic button clear-rating" type="button">Clear rating</button></div><div class="extra content"><button class="ui fluid teal button shortlist" aria-pressed="false">Add to shortlist</button></div></article></div><section class="ui message summary"><h2 class="header">Discussion shortlist</h2><p id="summary" role="status">No prompts selected. Add one to begin.</p><p class="scope">Ratings and selections stay in this browser page. These are original prompts, not published books.</p></section></main>

<script src="/vendor/jquery.min.js"></script>
<script src="/vendor/fomantic-ui-css/components/transition.min.js"></script>
<script src="/vendor/fomantic-ui-css/components/dropdown.min.js"></script>
<script src="/vendor/fomantic-ui-css/components/rating.min.js"></script>
<script src="app.js"></script>
<!-- Keep the themes/ assets beside the copied CSS. -->

Запрос для вашего проекта

Промпт для AI-агента
Расширьте список для читального зала на основе Fomantic UI 2.9.4, используя предоставленную инициализацию модуля jQuery и компоненты Dropdown и Rating. Свяжите три задания для чтения, состояние их оценок и локальную работу списка с отображаемыми карточками. Сохраните явную поддержку клавиатуры и семантику ползунка, добавленные элементу оценки, а также соответствующие теме иконки. Список не должен допускать повторного добавления и должен наглядно показывать текущее содержимое; это не процесс обработки обращений в поддержку и не удалённый сервис рекомендаций.
05

Источники и область применения дизайн-системы Fomantic UI

Fomantic UI 2.9.4 с jQuery 3.7.1. Значения темы — скомпилированные значения по умолчанию; оригинальные обложки и дополнения для клавиатуры обозначены отдельно. Все выбранные элементы остаются локальными.