Структура CSS библиотеки

CSS в библиотеке fullPage.js построен вокруг концепции полноэкранных секций, которые занимают 100% высоты окна браузера. Основная задача стилей — обеспечить корректное позиционирование, плавную прокрутку и управление отображением элементов при переходах между секциями.

Ключевая особенность — строгая иерархия классов и зависимость визуального поведения от состояния DOM-элементов, задаваемого JavaScript-логикой библиотеки.


Базовые контейнеры и их роль

.fp-wrapper

Главный контейнер, в который оборачивается весь контент fullPage. Отвечает за глобальные трансформации при прокрутке.

Основные свойства:

  • position: relative
  • управление трансформацией (transform) при переходах
  • плавность анимации (transition)

.fp-section

Каждая секция страницы. Представляет собой отдельный экран.

Характеристики:

  • height: 100vh
  • position: relative
  • часто используется display: table или flex для вертикального центрирования

Дополнительные состояния:

  • .active — текущая видимая секция
  • .fp-completely — секция полностью отображена (после завершения анимации)

.fp-slide

Горизонтальные слайды внутри секции.

Особенности:

  • вложены в .fp-section
  • используют float или flex в зависимости от версии
  • управляются отдельно от вертикальной прокрутки

Обёртки для слайдов

.fp-slides

Контейнер для всех горизонтальных слайдов внутри секции.

Свойства:

  • position: relative
  • width вычисляется динамически (например, 300% для трёх слайдов)
  • содержит .fp-slidesContainer

.fp-slidesContainer

Непосредственный контейнер, который перемещается при горизонтальной прокрутке.

Основные стили:

  • display: flex
  • transition для анимации
  • смещение через transform: translate3d(...)

Управление прокруткой и анимациями

Использование transform

Вместо изменения top или left, fullPage.js применяет:

  • transform: translate3d(0, -100%, 0) для вертикальных переходов
  • transform: translate3d(-100%, 0, 0) для горизонтальных

Преимущества:

  • аппаратное ускорение
  • высокая производительность
  • плавность анимации

Классы состояния

CSS активно использует классы, которые динамически добавляются:

  • .fp-viewing-SECTION-SLIDE — текущая позиция
  • .fp-responsive — адаптивный режим
  • .fp-enabled — активирован fullPage

Это позволяет:

  • изменять стили в зависимости от текущего экрана
  • реализовывать кастомные эффекты

Вертикальное выравнивание контента

.fp-table и .fp-tableCell

Классический подход:

  • .fp-table — контейнер с display: table
  • .fp-tableCell — ячейка с display: table-cell; vertical-align: middle

Альтернатива (в новых проектах):

  • использование flexbox:

    • display: flex
    • align-items: center
    • justify-content: center

Навигационные элементы

.fp-nav

Вертикальное меню навигации (точки справа).

Содержит:

  • список <ul>
  • элементы <li> с ссылками

Основные стили:

  • position: fixed
  • z-index выше контента
  • выравнивание по центру по вертикали

Активный элемент:

  • .active внутри <li>

.fp-tooltip

Подсказки при наведении на навигацию.

Особенности:

  • абсолютное позиционирование
  • скрыты по умолчанию (opacity: 0)
  • появляются при hover

Контроль переполнения

.fp-overflow

Используется для секций с прокручиваемым содержимым.

Свойства:

  • overflow-y: auto
  • ограниченная высота (обычно 100%)

Позволяет:

  • прокручивать контент внутри секции
  • не нарушать общую навигацию fullPage

Фиксированные элементы

.fp-fixed

Класс для элементов, которые остаются на месте при прокрутке.

Реализация:

  • position: fixed
  • не участвуют в трансформациях .fp-wrapper

Примеры:

  • шапка сайта
  • кнопки управления

Адаптивность и responsive-режим

При включении адаптивного режима добавляется класс:

  • .fp-responsive

Изменения:

  • отключается fullPage-скролл
  • возвращается стандартная прокрутка страницы
  • пересматриваются размеры секций (height: auto)

CSS должен учитывать этот режим:

.fp-responsive .fp-section {
  height: auto;
}

Анимационные переходы

Параметры анимации задаются через CSS:

  • transition: all 0.7s ease
  • возможность кастомизации easing-функций

Поддерживаются:

  • стандартные easing
  • пользовательские cubic-bezier

Переопределение стандартных стилей

fullPage.js предполагает активное кастомизирование:

  • можно отключать стандартные стили
  • заменять layout (flex вместо table)
  • менять навигацию

Рекомендуемый подход:

  • не редактировать исходный CSS
  • использовать собственные классы поверх

Z-index и слои

Иерархия слоёв:

  • навигация (.fp-nav) — высокий z-index
  • секции — базовый уровень
  • fixed элементы — выше секций

Важно избегать конфликтов:

  • задавать явные значения
  • учитывать stacking context при transform

Взаимодействие с пользовательскими стилями

CSS fullPage.js минималистичен, но чувствителен к:

  • глобальным reset-стилям
  • изменению box-sizing
  • внешним overflow

Рекомендации:

  • проверять влияние сторонних библиотек
  • изолировать стили при необходимости

Оптимизация производительности

CSS влияет на производительность:

  • предпочтение transform и opacity
  • избегание top/left
  • минимизация repaint и reflow

Дополнительно:

  • использование will-change: transform
  • отключение лишних теней и фильтров

Расширение и кастомизация

Структура CSS позволяет:

  • добавлять собственные классы к секциям
  • использовать data-атрибуты
  • внедрять анимации через CSS или JS

Пример:

.section.dark {
  background: #000;
  color: #fff;
}

Типичные проблемы и особенности

  1. Конфликты с height

    • обязательное использование 100vh
    • проблемы на мобильных браузерах
  2. Скролл внутри секций

    • необходимость .fp-overflow
    • корректная работа с touch-событиями
  3. Fixed элементы

    • могут “ломаться” из-за transform родителя
    • требуется вынос за пределы .fp-wrapper
  4. Перекрытие элементов

    • важно контролировать z-index

Структурная схема CSS

Обобщённая иерархия:

body
 └── .fp-enabled
      └── #fullpage
           └── .fp-wrapper
                ├── .fp-section
                │    └── .fp-slides
                │         └── .fp-slidesContainer
                │              └── .fp-slide
                └── ...

Каждый уровень имеет собственную ответственность:

  • .fp-wrapper — движение
  • .fp-section — экран
  • .fp-slide — горизонтальная навигация

Принципы проектирования CSS fullPage.js

  • модульность (каждый класс решает одну задачу)
  • минимализм (основа для кастомизации)
  • зависимость от JS-состояний
  • ориентация на производительность
  • строгая структура DOM

Такой подход обеспечивает гибкость и позволяет адаптировать библиотеку под практически любые дизайнерские и UX-задачи.