Небольшая CSS-библиотека для вдумчивых текстов и функциональных интерфейсов. ZeroUI отвечает за типографику и компоновку, а браузер и операционная система — за элементы управления.
Общий скрипт нужен для автоматического оглавления, просмотра изображений, интерактивных вкладок и возврата из Google Translate. Формы, раскрывающиеся блоки, обычные модальные окна и слайдер работают без него. При сборке CSS объединяется, а готовый zeroui.js копируется в dist.
Свой состав сборки
Выберите CSS-модули в массиве zeroui.files в package.json. Уберите ненужные компоненты и выполните npm run build. Порядок файлов в массиве определяет порядок стилей; foundation.css должен идти первым.
Результат — два готовых файла: dist/zeroui.css без импортов и dist/zeroui.js.
ZEROUI / ОСНОВА
Основа
Системные цвета автоматически следуют теме браузера. Шкала отступов: 3, 6, 12, 24 и 48 pt. Для текста используется system-ui, для кода — ui-monospace.
Системное оформление
Canvas и CanvasText адаптируются к окружению.
Пять интервалов
Единая небольшая шкала применяется к внешним и внутренним отступам и промежуткам.
Показать пример кода
<div class="grid">
<div class="col-md-6">
<h3>Системное оформление</h3>
<p>Canvas и CanvasText адаптируются к окружению.</p>
</div>
<div class="col-md-6">
<h3>Пять интервалов</h3>
<p>Единая небольшая шкала применяется к внешним и внутренним отступам и промежуткам.</p>
</div>
</div>
ZEROUI / ТИПОГРАФИКА
Типографика
Стандартные элементы создают иерархию без классов. Заголовки расположены рядом со своим содержимым; списки, цитаты и код сохраняют семантику.
Исследование наблюдений
Исследовательская заметка · 2026
Данные интерпретируются в контексте. Внимательный читатель увидит важные фрагменты, старые утверждения и исправления.
Методы и обозначения
Вода — H2O; площадь можно записать как м2. СО обозначает разброс.
Наблюдения
Первое наблюдение
Вложенное уточнение.
Второе наблюдение
Соберите данные.
Проверьте результат.
Выборка
Определённая совокупность наблюдений.
«Ценность результата зависит и от того, как он был получен».
Исследовательский журнал
Используйте mean(x), нажмите Enter, проверьте Готово. короткая цитата остаётся внутри строки.
Четвёртый уровень
Пятый уровень
Шестой уровень
Содержимым рисунка может быть текст, изображение или таблица.
Рисунок 1. Семантическая подпись.
Показать пример кода
<article>
<h1>Исследование наблюдений</h1>
<p><small>Исследовательская заметка · 2026</small></p>
<p><strong>Данные</strong> интерпретируются в контексте. <em>Внимательный</em> читатель увидит <mark>важные фрагменты</mark>, <del>старые утверждения</del> и <ins>исправления</ins>.</p>
<h2>Методы и обозначения</h2>
<p>Вода — H<sub>2</sub>O; площадь можно записать как м<sup>2</sup>. <abbr title="Стандартное отклонение">СО</abbr> обозначает разброс.</p>
<h3>Наблюдения</h3>
<ul>
<li>Первое наблюдение
<ul>
<li>Вложенное уточнение.</li>
</ul>
</li>
<li>Второе наблюдение</li>
</ul>
<ol>
<li>Соберите данные.</li>
<li>Проверьте результат.</li>
</ol>
<dl>
<dt>Выборка</dt>
<dd>Определённая совокупность наблюдений.</dd>
</dl>
<blockquote>
<p>«Ценность результата зависит и от того, как он был получен».</p>
<cite>Исследовательский журнал</cite>
</blockquote>
<p>Используйте <code>mean(x)</code>, нажмите <kbd>Enter</kbd>, проверьте <samp>Готово</samp>. <q>короткая цитата</q> остаётся внутри строки.</p>
<h4>Четвёртый уровень</h4>
<h5>Пятый уровень</h5>
<h6>Шестой уровень</h6>
<figure>
<p>Содержимым рисунка может быть текст, изображение или таблица.</p>
<figcaption>Рисунок 1. Семантическая подпись.</figcaption>
</figure>
</article>
Нумерация заголовков и списков
Класс numbered-headings включает иерархическую нумерацию заголовков h2–h4 внутри контейнера. Заголовки остаются обычными HTML-элементами.
Метод
Сначала определяем условия исследования.
Выборка
Затем описываем данные.
Критерии
Указываем основания отбора.
Результаты
Представляем наблюдения.
Показать пример кода
<article class="numbered-headings">
<h2>Метод</h2>
<p>Сначала определяем условия исследования.</p>
<h3>Выборка</h3>
<p>Затем описываем данные.</p>
<h4>Критерии</h4>
<p>Указываем основания отбора.</p>
<h2>Результаты</h2>
<p>Представляем наблюдения.</p>
</article>
Класс numbered-list нумерует вложенные списки ul внутри контейнера. Нативный details раскрывает оглавление без JavaScript; именно так устроено оглавление этой страницы.
По умолчанию элементы 12-колоночной сетки занимают всю ширину. Классы колонок действуют на всех размерах или начиная с md (640 px) и lg (1024 px). Сетки можно вкладывать.
8 колонок с md
4 колонки с md
6 при md / 4 при lg
6 при md / 8 при lg
Показать пример кода
<div class="grid">
<div class="card col-md-8">8 колонок с md</div>
<div class="card col-md-4">4 колонки с md</div>
<div class="card col-md-6 col-lg-4">6 при md / 4 при lg</div>
<div class="card col-md-6 col-lg-8">6 при md / 8 при lg</div>
</div>
ZEROUI / ВСПОМОГАТЕЛЬНЫЕ КЛАССЫ
Вспомогательные классы
Для отступов используются m, mt, mb, ms, me, p, pt, pb, ps, pe и gap с уровнями 1–5. Логические начало и конец учитывают направление письма. Выравнивание: text-start, text-center, text-end, items-start, items-center, items-end, justify-start, justify-center, justify-between и justify-end. Отображение: d-block, d-flex, d-grid, d-none и flex-wrap. Ширина: w-full и w-auto. Класс visually-hidden скрывает текст только визуально, сохраняя его для программ чтения с экрана.
Карточки, навигация, раскрывающиеся блоки, формы и таблицы используют обычный HTML. Элементы управления сохраняют системный вид; навигационные вкладки используют ссылки. Пример переключаемых панелей с клавиатурным управлением находится в приложении.
Полевые заметки
Карточка объединяет связанную информацию, не меняя её смысл.
Нативный диалог открывается HTML-командой show-modal, закрывается командой close или клавишей Escape. JavaScript для обычного диалога не требуется.
Показать пример кода
<button type="button" commandfor="example-modal" command="show-modal">Открыть окно</button>
<dialog class="modal" id="example-modal" aria-labelledby="example-modal-title">
<h3 id="example-modal-title">Модальное окно</h3>
<p>Нативный диалог поддерживает фокус и закрытие по Escape.</p>
<button type="button" commandfor="example-modal" command="close">Закрыть</button>
</dialog>
<button type="button" commandfor="example-full" command="show-modal">На весь экран</button>
<dialog class="modal modal-full" id="example-full" aria-labelledby="example-full-title">
<h3 id="example-full-title">Полноэкранное окно</h3>
<p>Содержимое может занимать весь экран.</p>
<button type="button" commandfor="example-full" command="close">Закрыть</button>
</dialog>
Слайдер и галерея
Слайдер без JavaScript
Прокручивайте горизонтально жестом, трекпадом или полосой прокрутки. Область доступна с клавиатуры. Размер sm, md или lg задаёт высоту 96, 192 или 288 pt. По умолчанию используется md.
Маленький
Показать пример кода
<div class="slider slider-sm" tabindex="0" role="region" aria-label="Маленький слайдер">
<img src="examples/observation-a.svg" alt="Наблюдение A: три точки">
<img src="examples/observation-b.svg" alt="Наблюдение Б: пять точек">
</div>
Средний
Показать пример кода
<div class="slider slider-md" tabindex="0" role="region" aria-label="Средний слайдер">
<img src="examples/observation-a.svg" alt="Наблюдение A: три точки">
<img src="examples/observation-b.svg" alt="Наблюдение Б: пять точек">
</div>
Большой
Показать пример кода
<div class="slider slider-lg" tabindex="0" role="region" aria-label="Большой слайдер">
<img src="examples/observation-a.svg" alt="Наблюдение A: три точки">
<img src="examples/observation-b.svg" alt="Наблюдение Б: пять точек">
</div>
Соотношение сторон всех слайдов задаётся переменной --slider-ratio на обёртке. По умолчанию calc(16 / 9); для другого формата укажите, например, calc(4 / 3). Изображения заполняют кадр с обрезкой (cover). Обёртка остаётся в ширине страницы, а крупные слайды прокручиваются внутри неё.
Галерея
Галерея располагает изображения адаптивной сеткой и переносит их на следующую строку. Подписи оформляются обычными figure и figcaption. Сетка не требует JavaScript. Метка data-modal добавляет просмотр изображения: небольшой общий скрипт подставляет его в диалог. Enter и пробел открывают изображение с клавиатуры.
Подписи и заголовки с областью действия делают данные понятнее. Оборачивайте широкие таблицы, чтобы на маленьких экранах прокручивалась только таблица.
Правила print.css автоматически применяются при печати: делают текст компактнее, стараются сохранить блоки целыми и скрывают навигацию, шапки, раскрывающиеся блоки, фреймы и диалоги. Специальный класс не требуется. Класс noprint позволяет исключить отдельную панель или кнопку из печати.
Откройте предварительный просмотр печати в браузере, чтобы увидеть результат.
Показать пример кода
<link rel="stylesheet" href="css/print.css">
Примеры
Два полноценных примера используют ту же таблицу стилей, что и документация.
ПРИМЕР 01 / ПУБЛИКАЦИЯ
Статья о разработке
Заметка о разработке ZeroUI с таблицей, цитатой и примечаниями.