Настройка и кастомизация темы Jekyll

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка и кастомизация темы Jekyll
Простая
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Настройка и кастомизация темы Jekyll

Jekyll-темы распространяются двумя способами: как gem-пакеты (устанавливаются через Bundler) и как обычные репозитории (копируются напрямую). Механизм кастомизации различается, но принцип override одинаковый: файлы в корне проекта перекрывают файлы темы.

Gem-based темы: как это работает

Когда тема установлена как gem, её файлы находятся в директории Ruby gems, не в проекте:

bundle info --path minima
# => /path/to/gems/minima-2.5.1

Для просмотра файлов темы:

bundle exec jekyll theme-files

Для override: скопировать нужный файл из gem в корень проекта, сохранив структуру папок:

# Скопировать лейаут темы в проект
cp $(bundle info --path minima)/_layouts/post.html _layouts/post.html

# Скопировать партиал
cp $(bundle info --path minima)/_includes/header.html _includes/header.html

После этого редактировать скопированный файл — Jekyll автоматически использует его вместо оригинала.

Настройка через _config.yml

Большинство тем читают параметры из конфига. Пример для популярной темы Minimal Mistakes:

# Тема
remote_theme: "mmistakes/[email protected]"

# Скин темы
minimal_mistakes_skin: "air" # "default", "air", "aqua", "contrast", "dark", "dirt", "neon", "mint", "plum", "sunrise"

# Параметры сайта
locale: "ru-RU"
title: "Название сайта"
name: "Команда"
description: "Описание"
url: "https://example.com"

# Автор по умолчанию
author:
  name: "Имя"
  avatar: "/assets/images/avatar.jpg"
  bio: "Краткое описание"
  links:
    - label: "Email"
      icon: "fas fa-fw fa-envelope-square"
      url: "mailto:[email protected]"
    - label: "LinkedIn"
      icon: "fab fa-fw fa-linkedin"
      url: "https://linkedin.com/in/username"

# Навигация
navigation:
  - title: "Главная"
    url: /
  - title: "Блог"
    url: /blog/
  - title: "О нас"
    url: /about/

# Аналитика
analytics:
  provider: "google-gtag"
  google:
    tracking_id: "G-XXXXXXXXXX"
    anonymize_ip: false

# Комментарии
comments:
  provider: "disqus"
  disqus:
    shortname: "mysite"

Кастомизация стилей

Gem-темы обычно позволяют добавить кастомные стили через специальный файл. Для Minima:

/* assets/css/style.scss */
---
---
@import "minima";

/* Ваши переопределения */
:root {
  --base-font-size: 16px;
  --base-line-height: 1.7;
  --brand-color: #2563eb;
  --brand-color-dark: #1e40af;
}

.site-header {
  border-top: 4px solid var(--brand-color);
  background: #fff;
  box-shadow: 0 1px 3px rgba(0,0,0,0.08);
}

.post-title {
  font-size: 2.25rem;
  line-height: 1.2;
  letter-spacing: -0.02em;
}

Для Minimal Mistakes — через _sass/minimal-mistakes/_variables.scss (нужно скопировать из gem):

/* _sass/minimal-mistakes/_variables.scss */
$sans-serif: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !default;
$monospace: "JetBrains Mono", "Fira Code", monospace !default;

$primary-color: #2563eb !default;
$success-color: #22c55e !default;
$warning-color: #f59e0b !default;
$danger-color: #ef4444 !default;

$border-radius: 6px !default;
$box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1) !default;

Переопределение шаблонов Liquid

Пример: добавить таблицу содержания (TOC) в лейаут поста:

<!-- _layouts/post.html -->
---
layout: default
---
<article class="post h-entry">
  <header class="post-header">
    <h1 class="post-title p-name">{{ page.title | escape }}</h1>
    <p class="post-meta">
      <time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}">
        {{ page.date | date: "%d %B %Y" }}
      </time>
      {% if page.author %}· {{ page.author }}{% endif %}
    </p>
  </header>

  {% if page.toc %}
  <aside class="toc">
    <h2>Содержание</h2>
    {% include toc.html html=content %}
  </aside>
  {% endif %}

  <div class="post-content e-content">
    {{ content }}
  </div>

  {% if page.tags.size > 0 %}
  <div class="post-tags">
    {% for tag in page.tags %}
    <a href="/tags/{{ tag | slugify }}/" class="tag">#{{ tag }}</a>
    {% endfor %}
  </div>
  {% endif %}
</article>

Добавление кастомных партиалов

Если тема не предусматривает нужный компонент, создаём в _includes/:

<!-- _includes/cta-banner.html -->
{% assign bg = include.bg | default: "primary" %}
{% assign title = include.title %}
{% assign subtitle = include.subtitle %}
{% assign button_text = include.button_text | default: "Узнать больше" %}
{% assign button_url = include.button_url | default: "/contact/" %}

<section class="cta-banner cta-banner--{{ bg }}">
  <div class="container">
    <h2>{{ title }}</h2>
    {% if subtitle %}
    <p>{{ subtitle }}</p>
    {% endif %}
    <a href="{{ button_url }}" class="btn btn--primary">{{ button_text }}</a>
  </div>
</section>

Использование в странице или лейауте:

{% include cta-banner.html
  title="Готовы начать проект?"
  subtitle="Обсудим ваши задачи и подберём решение"
  button_text="Связаться"
  button_url="/contact/"
  bg="dark"
%}

Управление навигацией

Для сложных меню — через _data/navigation.yml:

main:
  - title: "Услуги"
    url: /services/
    children:
      - title: "Веб-разработка"
        url: /services/web/
      - title: "Мобильные приложения"
        url: /services/mobile/
  - title: "Блог"
    url: /blog/
  - title: "Контакты"
    url: /contact/
<!-- _includes/header.html -->
<nav>
  {% for item in site.data.navigation.main %}
  <div class="nav-item {% if item.children %}has-dropdown{% endif %}">
    <a href="{{ item.url | relative_url }}"
       {% if page.url == item.url %}aria-current="page"{% endif %}>
      {{ item.title }}
    </a>
    {% if item.children %}
    <ul class="dropdown">
      {% for child in item.children %}
      <li><a href="{{ child.url | relative_url }}">{{ child.title }}</a></li>
      {% endfor %}
    </ul>
    {% endif %}
  </div>
  {% endfor %}
</nav>

Сроки

Настройка gem-темы через конфиг и кастомный CSS — 1–2 дня. Override шаблонов, добавление кастомных партиалов и данных — 3–5 дней.