Создание тем для FgSNotes
FgSNotes поддерживает кастомные темы, которые позволяют полностью изменить внешний вид редактора. Темы создаются с помощью CSS и используют систему CSS переменных для легкой настройки цветов и стилей.
themes/
для понимания структуры и возможностей.
Структура темы
Каждая тема представляет собой CSS файл с определенной структурой. Файл должен содержать:
- CSS переменные - для определения цветовой палитры
- Базовые стили - для основных элементов интерфейса
- Стили компонентов - для кнопок, панелей, редактора
- Стили Markdown - для отображения контента
Базовый шаблон темы
:root { /* Основные цвета */ --bg-color: #ffffff; --text-color: #333333; --card-bg: #f8f9fa; --border-color: #dee2e6; /* Акцентные цвета */ --accent-color: #007bff; --primary: #007bff; /* Дополнительные цвета */ --hover-color: #e9ecef; --sidebar-color: #f8f9fa; --header-bg: #f8f9fa; /* Цвета для Markdown */ --md-red: #dc3545; --md-green: #28a745; --md-blue: #007bff; --md-yellow: #ffc107; --md-purple: #6f42c1; --md-cyan: #17a2b8; } /* Базовые стили */ body { background: var(--bg-color); color: var(--text-color); font-family: 'Inter', sans-serif; } /* Стили компонентов */ .sidebar-toolbar { background: var(--sidebar-color); } #markdown-editor { background: var(--card-bg); color: var(--text-color); } /* Стили Markdown */ .preview-content h1, .preview-content h2, .preview-content h3 { color: var(--md-blue); } .preview-content code { background: var(--card-bg); color: var(--md-red); }
CSS переменные
CSS переменные определяют цветовую палитру и основные параметры темы. Все переменные должны быть определены в блоке :root
.
Основные переменные
Полный список переменных
:root { /* Основные цвета */ --bg-color: #ffffff; /* Основной фон */ --text-color: #333333; /* Основной текст */ --card-bg: #f8f9fa; /* Фон карточек */ --border-color: #dee2e6; /* Цвет границ */ --hover-color: #e9ecef; /* Цвет при наведении */ /* Акцентные цвета */ --accent-color: #007bff; /* Основной акцент */ --primary: #007bff; /* Основной цвет */ --link-color: #007bff; /* Цвет ссылок */ /* Компоненты */ --sidebar-color: #f8f9fa; /* Фон боковой панели */ --header-bg: #f8f9fa; /* Фон заголовка */ --active-bg: #007bff; /* Активный элемент */ --code-bg: #f8f9fa; /* Фон кода */ /* Тени и эффекты */ --shadow-color: rgba(0, 0, 0, 0.1); --text-muted: #6c757d; /* Приглушенный текст */ /* Цвета для Markdown */ --md-red: #dc3545; /* Красный */ --md-green: #28a745; /* Зеленый */ --md-blue: #007bff; /* Синий */ --md-yellow: #ffc107; /* Желтый */ --md-purple: #6f42c1; /* Фиолетовый */ --md-cyan: #17a2b8; /* Голубой */ }
Компоненты интерфейса
Каждый компонент интерфейса имеет свои CSS селекторы. Вот основные компоненты, которые можно стилизовать:
Основные селекторы
/* Боковая панель */ .sidebar-toolbar { background: var(--sidebar-color); } /* Заголовок с вкладками */ .tab-bar, .editor-label { background: var(--header-bg); border-bottom: 1px solid var(--border-color); } /* Активная вкладка */ .tab-item.active { background: var(--card-bg); border-color: var(--accent-color); } /* Редактор */ #markdown-editor, .preview-content { background: var(--card-bg); color: var(--text-color); } /* Панель инструментов */ .editor-tools { background: var(--card-bg); border: 1px solid var(--border-color); } /* Группы инструментов */ .tool-group { background: var(--bg-color); border: 1px solid var(--border-color); } /* Кнопки */ .tool-button:hover, .sidebar-button:hover, .new-tab-button:hover, .close-tab:hover { background: var(--hover-color); color: var(--accent-color); } /* Разделители панелей */ .panel-divider { background: var(--border-color); } .panel-divider:hover, .panel-divider.dragging { background: var(--accent-color); }
Стили Markdown
Стили для отображения Markdown контента определяют, как будет выглядеть предпросмотр документа.
Заголовки
.preview-content h1, .preview-content h2, .preview-content h3, .preview-content h4, .preview-content h5, .preview-content h6 { color: var(--md-green); font-weight: 600; }
Код и блоки кода
.preview-content pre { background: var(--code-bg); border: 1px solid var(--border-color); border-radius: 4px; padding: 15px; overflow-x: auto; } .preview-content code { background: var(--code-bg); color: var(--md-red); padding: 2px 4px; border-radius: 3px; font-family: 'Courier New', monospace; }
Цитаты и ссылки
.preview-content blockquote { border-left: 4px solid var(--md-yellow); background: var(--card-bg); color: var(--text-muted); padding: 10px 15px; margin: 15px 0; } .preview-content a { color: var(--link-color); text-decoration: none; } .preview-content a:hover { text-decoration: underline; }
Создание темы
Пошаговое руководство по созданию собственной темы:
Шаг 1: Создание файла
- Создайте новый CSS файл в папке
themes/
- Назовите файл по схеме:
your-theme-name.css
- Используйте только латинские буквы, цифры и дефисы
Шаг 2: Определение переменных
Начните с определения CSS переменных в блоке :root
:
:root { /* Определите вашу цветовую палитру */ --bg-color: #your-background-color; --text-color: #your-text-color; --accent-color: #your-accent-color; /* ... остальные переменные */ }
Шаг 3: Базовые стили
Добавьте базовые стили для body и основных элементов:
body { background: var(--bg-color); color: var(--text-color); font-family: 'Inter', sans-serif; }
Шаг 4: Стили компонентов
Добавьте стили для всех компонентов интерфейса, используя селекторы из раздела "Компоненты интерфейса".
Шаг 5: Стили Markdown
Добавьте стили для отображения Markdown контента, используя селекторы из раздела "Стили Markdown".
Тестирование темы
После создания темы важно протестировать её на различных типах контента:
- Заголовки - все уровни h1-h6
- Текст - обычный текст, жирный, курсив
- Списки - маркированные и нумерованные
- Код - inline код и блоки кода
- Ссылки - обычные и с якорями
- Изображения - с подписями и без
- Таблицы - простые и сложные
- Цитаты - вложенные цитаты
Публикация темы
После создания и тестирования темы вы можете поделиться ею с сообществом:
Подготовка к публикации
- Убедитесь, что тема полностью протестирована
- Добавьте комментарии к CSS коду
- Создайте превью темы (скриншот)
- Подготовьте описание темы
Добавление в магазин тем
Чтобы добавить тему в магазин тем:
- Создайте запись в файле
themes-data.json
- Добавьте метаданные темы (название, описание, автор)
- Создайте превью для карточки темы
- Укажите категорию и теги
themes-data.json
для понимания структуры метаданных.
Примеры тем
Изучите существующие темы для вдохновения и понимания различных подходов:
Светлые темы
- Solar Light - чистая светлая тема с мягкими тенями
- Paper - тема в стиле бумаги с теплыми оттенками
- Zen - минималистичная тема для концентрации
Темные темы
- Midnight Pro - элегантная темная тема с синими акцентами
- Carbon - техническая тема в стиле углеродного волокна
- Ocean Deep - глубокая синяя тема, вдохновленная океаном
Градиентные темы
- Aurora - красочная тема с эффектом северного сияния
- Sunset Glow - теплая тема с закатными красками
Пример простой темы
Вот пример минималистичной темы:
:root { --bg-color: #fafafa; --text-color: #333333; --card-bg: #ffffff; --border-color: #e0e0e0; --accent-color: #2196f3; --sidebar-color: #f5f5f5; --header-bg: #f5f5f5; --hover-color: #f0f0f0; --code-bg: #f8f9fa; --text-muted: #666666; --md-red: #f44336; --md-green: #4caf50; --md-blue: #2196f3; --md-yellow: #ff9800; --md-purple: #9c27b0; --md-cyan: #00bcd4; } body { background: var(--bg-color); color: var(--text-color); font-family: 'Inter', sans-serif; } .sidebar-toolbar { background: var(--sidebar-color); } .tab-bar, .editor-label { background: var(--header-bg); border-bottom: 1px solid var(--border-color); } .tab-item.active { background: var(--card-bg); border-color: var(--accent-color); } #markdown-editor, .preview-content { background: var(--card-bg); color: var(--text-color); } .preview-content h1, .preview-content h2, .preview-content h3 { color: var(--md-blue); } .preview-content code { background: var(--code-bg); color: var(--md-red); }