UIkit — фреймворк для быстрого создания веб-приложений и сайтов
easy

UIkit — фреймворк для быстрого создания веб-приложений и сайтов

Легко, доступно, адаптивно

Мы как-то рассказывали о Pure CSS — простом фреймворке для создания страниц. Сегодня познакомимся с более сложным фреймворком UIkit: подключим его и соберём страницу с разными элементами.

Коротко про фреймворки

Чтобы не создавать пользовательский интерфейс с нуля, используют фреймворки. Это как строительные наборы с уже готовыми элементами, из которых можно собрать внешний вид веб-сайта или приложения. Так получается быстрее и проще, чем писать всё с нуля. Если в команде нет дизайнера или нужно быстро собрать прототип сайта, то фреймворк — идеальное решение. Все компоненты сразу выглядят хорошо и выдержаны в едином стиле, так что не нужно быть дизайнером. Элементы автоматически подстраиваются под экраны разных размеров, и не нужно отдельно предусматривать адаптивность. А поскольку всё уже проверено, меньше вероятность допустить ошибки в коде.

Что такое UIkit

UIkit — CSS-фреймворк для разработки интерфейсов. Это проект с открытым исходным кодом от компании YOOtheme, которая делает продукты для WordPress и Joomla — популярных систем управления контентом (CMS).

В первую очередь UIkit содержит базовые стили для элементов: кнопок, форм, таблиц и так далее. Но, кроме них, в этом фреймворке есть много готовых JavaScript-компонентов, которые помогают создавать интерактивные элементы: модальные окна, слайдеры, выпадающие меню, карусели и другие. Вот ключевые возможности UIkit:

  • Можно загружать только нужные компоненты и таким образом уменьшать размер и сложность проекта.
  • С помощью препроцессоров Less и Sass можно легко менять стили, цвета, шрифты и другие параметры, используя переменные и миксины.
  • Акцент на мобильные устройства — все компоненты автоматически подстраиваются под различные размеры экранов. Сетку вообще можно настроить как угодно.
  • Встроенные скрипты позволяют добавлять интерактивные элементы, не углубляясь в JavaScript.

Ключевая особенность этого фреймворка — адаптивность, простота и много готового кода, который можно поправить под себя, не боясь сломать всё остальное.

Как подключить UIkit

Для работы над небольшим проектом или простой тренировки достаточно добавить в код ссылки на файлы стилей и скриптов, и они будут загружаться напрямую с сервера:

<!-- UIkit CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/uikit@3.21.11/dist/css/uikit.min.css" />

<!-- UIkit JS -->
<script src="https://cdn.jsdelivr.net/npm/uikit@3.21.11/dist/js/uikit.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/uikit@3.21.11/dist/js/uikit-icons.min.js"></script>

Такой способ подходит, если работаете над небольшим проектом или просто хотите познакомиться с фреймворком поближе и понять, что он умеет. А если уже нужно гибко настраивать UIkit, интегрировать его с другими инструментами разработки или использовать сборщики проектов, то лучше скачать исходные файлы через пакетный менеджер или git и интегрировать их с инструментами сборки проекта. 

Вот как это можно поставить себе UIkit:

  • Скачать последнюю версию с готовыми CSS- и JS-шаблонами.
  • Установить через npm install uikit.
  • Установить через yarn add uikit.
  • Установить через pnpm add uikit.
  • Клонировать репозиторий для доступа к исходным файлам и скриптам сборки: git clone git@github.com:uikit/uikit.git.

Короче, смысл любой из этих схем в том, что вы получаете полный контроль над кодом фреймворка и сможете править его под свои задачи как вам угодно. Если подключать UIkit в теле HTML-кода как обычный скрипт, то возможностей для кастомизации будет уже меньше. Если она не нужна — можно не качать, а подключить как есть.

Цветовая схема

В UIkit есть уже готовый набор цветов, которые применяются ко всем основным компонентам:

  • uk-background-primary: основной цвет фона, который чаще всего используется для хедеров, футеров и других крупных элементов.
  • uk-background-secondary: вторичный цвет фона, подходит для создания контрастных секций.
  • uk-background-muted: нейтральный цвет для боковых панелей и областей, где требуется меньше акцентов.
  • uk-light и uk-dark: используются для текста.

UIkit — фреймворк для быстрого создания веб-приложений и сайтов

Ещё UIkit поддерживает кастомизацию цветовой схемы — напрямую или через препроцессоры Less или Sass. Можно изменить переменные, отвечающие за цвета, и перекомпилировать стили, чтобы настроить UIkit под цветовую гамму своего проекта.

Сетки 

В современной вёрстке используют системы сеток, которые позволяют правильно расположить элементы и сделать страницу адаптивной — для этого они используют flex или grid. Например, в Bootstrap используется система сеток на основе flexbox с фиксированной 12-колоночной структурой. Это стандартный подход для создания адаптивных макетов, где элементы страницы выстраиваются в колонки и строки с заранее заданным числом колонок.

В UIkit использует более гибкий подход. Здесь макеты разделяются на три основных компонента: grid, flex и width. В отличие от фиксированной 12-колоночной системы, UIkit позволяет создавать любое количество колонок, что даёт больше возможностей для адаптации макета. Нужно 20 колонок — легко, хватает трёх и больше не надо — тоже не проблема. 

Пример работы сетки в UIkit

Чтобы показать возможности сеток UIkit, создадим адаптивную разметку Holy Grail. Это классический шаблон макета с хедером, футером и тремя секциями посредине: левым и правым сайдбарами и основным контентом. Такую задачу по вёрстке иногда задают на собеседованиях, поэтому вот ещё один пример для тренировки и насмотренности.

Чтобы сделать элемент флекс-контейнером, нужно применить к нему класс uk-flex. Дальше для настройки разметки используют комбинации классов uk-grid, uk-width-* и uk-child-width-*. Классы определяют, сколько колонок займёт элемент в сетке. Например, uk-width-1-2 означает, что элемент займёт 50% ширины контейнера, uk-width-1-3 — 33,33% и так далее.

Чтобы определить ширину колонок в зависимости от размера экрана, используют классы uk-child-width-1-2@s, где @s обозначает, что колонка будет занимать половину экрана только на малых экранах. На больших экранах можно задать другие значения.

Для разметки Holy Grail создадим контейнер uk-flex, где разместим header, контейнер с основным содержимым с тремя секциями, и footer:

<div class="uk-flex uk-flex-column" style="height: 100vh;">
  <!-- 
    uk-flex включает flexbox-контейнер, а uk-flex-column задаёт вертикальное направление для flex-контейнера. 
    Высота контейнера устанавливается на 100% от высоты видимого экрана, чтобы распределить всё содержимое на всю высоту экрана.
  -->
  <header class="uk-background-primary uk-light uk-padding">
    <!-- 
      uk-background-primary устанавливает основной цвет фона
      uk-light светлый цвет текста
      uk-padding добавляет отступы внутри элемента
    -->
    <p>Хэдер</p>
  </header>
  <div class="uk-grid-collapse uk-child-width-expand@s uk-text-center uk-flex-1" uk-grid>
    <!-- 
      uk-grid-collapse убирает промежутки между колонками сетки
      uk-child-width-expand@s устанавливает равномерное расширение всех колонок на малых экранах и выше (размер @s — примерно 640px)
      uk-text-center центрирует текст внутри колонок.
      uk-flex-1 контейнер должен занимать всю оставшуюся доступную высоту, оставляя футер у нижнего края экрана.
      uk-grid включает сетку
    -->
    <aside class="uk-background-muted uk-padding">
      <!-- 
        uk-background-muted нейтральный фон
        uk-padding добавляет отступы внутри элемента
      -->
      <p>Левый сайдбар</p>
    </aside>
    <main class="uk-background-default uk-padding">
      <!-- 
        uk-background-default белый фон
        uk-padding добавляет отступы внутри элемента
      -->
      <p>Основное содержимое</p>
    </main>
    <aside class="uk-background-muted uk-padding">
         <p>Правый сайдбар</p>
    </aside>
  </div>
  <footer class="uk-background-secondary uk-light uk-padding">
    <p>Футер</p>
  </footer>
</div>

В итоге у нас получается классический адаптивный макет, где все работы по адаптивности берёт на себя фреймворк, а мы просто задаём правила расположения элементов:

UIkit — фреймворк для быстрого создания веб-приложений и сайтов

Чтобы было проще рассчитать размеры элементов на разных экранах, держите шпаргалку:

КлассПояснениеРазмер экранаМедиазапрос
.uk-width-1-1@sНа малых экранах элемент займёт всю строку (100% ширины)≥ 640px@media (min-width: 640px)
.uk-width-1-2@mНа средних экранах элемент займёт половину строки (50% ширины)≥ 960px@media (min-width: 960px)
.uk-width-1-3@lНа больших экранах элемент займёт треть строки (33,33% ширины)≥ 1200px@media (min-width: 1200px)
.uk-width-1-4@xlЗаймёт 25% ширины контейнера на очень больших экранах≥ 1600px@media (min-width: 1600px)

Компоненты 

UIkit предлагает много готовых компонентов: меню навигации, подсказки, аккордеоны, хлебные крошки, модальные окна, слайдеры, кнопки, поля ввода и другую подобную красоту.

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

Также компоненты поддерживают WAI-ARIA (Web Accessibility Initiative — Accessible Rich Internet Applications) роли и атрибуты, которые улучшают доступность. Атрибуты дают экранным считывателям и другим вспомогательным технологиям более точную и понятную информацию.

Пример модального окна с ARIA-ролями (исходный код на сайте проекта):

<!-- Кнопка для открытия модального окна -->
<button class="uk-button uk-button-primary" uk-toggle="target: #example-modal" aria-haspopup="true" aria-controls="example-modal">Открыть модальное окно</button>
<!--Модальное окно -->
<div id="example-modal" uk-modal aria-labelledby="modal-title" role="dialog">
    <div class="uk-modal-dialog uk-modal-body">
        <h2 class="uk-modal-title" id="modal-title">Заголовок модального окна</h2>
        <p>Контент модального окна</p>
        <button class="uk-modal-close uk-button uk-button-default" type="button" aria-label="Закрыть модальное окно">Закрыть</button>
    </div>
</div>
UIkit — фреймворк для быстрого создания веб-приложений и сайтов

Анимации в UIkit

Другая фишка UIkit — много разных анимаций. Здесь не только стандартные ховер-эффекты, но и параллакс и анимации на основе прокрутки. Например, модуль uk-scrollspy-nav позволяет делать плавные переходы к разным частям страницы при клике на навигационные элементы:

<!-- Навигационное меню с тремя пунктами, каждый из которых ссылается на соответствующую секцию страницы -->
<ul class="uk-subnav uk-subnav-pill" uk-scrollspy-nav="closest: li; scroll: true">
    <!-- Переход к Секции 1 -->
    <li><a href="#section1">Секция 1</a></li>
    <!-- Переход к Секции 2 -->
    <li><a href="#section2">Секция 2</a></li>
    <!-- Переход к Секции 3 -->
    <li><a href="#section3">Секция 3</a></li>
</ul>
<!-- Секция 1 -->
<div id="section1" class="uk-section uk-section-primary">
    <h2>Секция 1</h2>
</div>
<!-- Секция 2 -->
<div id="section2" class="uk-section uk-section-secondary">
    <h2>Секция 2</h2>
</div>
<!-- Секция 3 -->
<div id="section3" class="uk-section uk-section-default">
    <h2>Секция 3</h2>
</div>
<!-- Кнопка "Наверх" для быстрой прокрутки страницы к началу -->
<a href="" uk-totop></a>
Анимации в UIkit

Ещё одна интересная шутка — модули Sortable и Nestable для интерактивных списков и элементов, которые можно перетаскивать, изменяя их порядок. Это удобно для создания панелей администратора, интерактивных досок и других интерфейсов с динамическим содержимым. Если хотите сделать свой Ноушен, можно взять механику за основу.

Например, вот так просто можно создать перетаскиваемые списки:

  <ul class="uk-sortable" uk-sortable>
         <li class="uk-margin-small uk-card uk-card-default uk-card-body">Задача 1</li>
         <li class="uk-margin-small uk-card uk-card-default uk-card-body">Задача 2</li>
         <li class="uk-margin-small uk-card uk-card-default uk-card-body">Задача 3</li>
         <li class="uk-margin-small uk-card uk-card-default uk-card-body">Задача 4</li>
       </ul>
UIkit — фреймворк для быстрого создания веб-приложений и сайтов

Работа с препроцессорами

Если вы знаете, что такое в CSS переменные и миксины, то сможете переопределить практически любые встроенные стили в UIkit. Так можно переопределять как глобальные переменные, так и стили отдельных компонентов. Единственное, что нужно, чтобы получить доступ к файлам с переменными, — установить UIkit локально в проект.

Глобальные переменные в UIkit
Глобальные переменные в UIkit

Допустим, мы хотим изменить глобальный цвет ссылок $global-link-color с синего на зелёный. Для этого нужно задать стиль в своём scss-файле, импортировать основные стили фреймворка, скомпилировать scss-файл со своими стилями и подключить скомпилированный CSS-файл в HTML-файле проекта. Если звучит как тарабарщина, держите нашу статью про препроцессоры, там мы разбираемся в работе на примере Sass.

Теперь к практике. По умолчанию в UIkit ссылка выглядит так:

UIkit — фреймворк для быстрого создания веб-приложений и сайтов

Теперь папке scss нашего проекта мы создаём файл main.scss, где будем писать свои стили. В начале файла переопределяем переменную $global-link-color, чтобы ссылка стала зелёной.

// переопределяем глобальную переменную
$global-link-color: #02da2a;
// Импортируем базовые переменные и миксины
@import "../node_modules/uikit/src/scss/variables-theme.scss";
@import "../node_modules/uikit/src/scss/mixins-theme.scss";
// Импортируем основную тему UIkit, чтобы изменения вступили в силу
@import "../node_modules/uikit/src/scss/uikit.scss";

⚠️ Порядок важен: переменная должна быть переопределена до импорта основной темы UIkit, чтобы изменение применилось ко всем компонентам.

После этого через командную строку компилируем свой scss-файл. Мы указываем путь исходного scss-файла и путь конечного css-файла, куда запишутся новые стили, и в командной строке пишем такое:

sass scss/main.scss css/main.css

После компиляции в css-файле должны появится новые стили:

UIkit — фреймворк для быстрого создания веб-приложений и сайтов

После этого подключаем css-файл в html-файле:

<link rel="stylesheet" href="css/main.css" />
UIkit — фреймворк для быстрого создания веб-приложений и сайтов

Важно, чтобы файл с нашими стилями был подключён после основного файла стилей фреймворка. Проверяем, что получилось:

UIkit — фреймворк для быстрого создания веб-приложений и сайтов

Если нужно менять не всю тему, а только определённые компоненты, то вместо импорта uikit.scss можно импортировать только scss-файлы компонентов, чтобы не загромождать свой файл со стилями.

UIkit — фреймворк для быстрого создания веб-приложений и сайтов

Плюсы и минусы UIkit

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

Если вы вообще никогда не сталкивались с фреймворками для вёрстки, то можно потренироваться на маленьком Pure, а потом переходить к UIkit.

Плюсы UIkit

  • Содержит обширную коллекцию компонентов HTML, CSS и JS, которые просты в использовании, легко настраиваются и расширяются.
  • Доступно большое разнообразие анимаций.
  • Все компоненты интерактивны и доступы.
  • Есть простые сторонние шаблоны Joomla! или WordPress starter.

Минусы UIkit

  • Ограниченная документация и поддержка сообщества.
  • Запутанный код классов: вложенные классы усложняют чтение для получения желаемого результата.
  • Для сложных проектов может потребоваться больше кастомизации и доработки с препроцессорами.

Что дальше

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

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
easy