Использование CSS-препроцессоров значительно упрощает разработку интерфейсов, особенно в проектах с большим количеством секций, сложной анимацией и адаптивной версткой, характерных для fullPage.js. Препроцессоры позволяют структурировать стили, переиспользовать код и минимизировать дублирование.
Наиболее распространённые инструменты — Sass (SCSS), Less и Stylus. В контексте fullPage.js чаще всего применяется SCSS благодаря его расширенным возможностям и популярности в современных сборщиках.
При использовании fullPage.js интерфейс обычно состоит из:
#fullpage.section.slide (при необходимости)Препроцессоры позволяют удобно организовать вложенность:
#fullpage {
.section {
height: 100vh;
&.dark {
background-color: #111;
color: #fff;
}
&.light {
background-color: #f5f5f5;
color: #333;
}
.slide {
display: flex;
align-items: center;
justify-content: center;
}
}
}
Вложенность отражает структуру DOM, что особенно полезно при работе с многоуровневыми слайдами.
fullPage.js часто используется для лендингов и презентаций, где важно единообразие. Переменные позволяют централизованно управлять цветами, отступами и анимациями:
$primary-color: #3498db;
$transition-speed: 0.7s;
.section {
transition: background-color $transition-speed ease;
&.active {
background-color: $primary-color;
}
}
Изменение значения переменной автоматически обновляет стили во всех секциях.
В fullPage.js часто используются одинаковые стили для центрирования, анимаций и позиционирования. Миксины помогают избежать дублирования:
@mixin flex-center {
display: flex;
align-items: center;
justify-content: center;
}
.section {
@include flex-center;
}
Пример с анимацией:
@mixin fade-in($duration: 0.5s) {
opacity: 0;
transition: opacity $duration ease;
&.active {
opacity: 1;
}
}
.section {
@include fade-in(0.8s);
}
Библиотека автоматически добавляет классы, такие как:
.active.fp-section.fp-slide.fp-completelyПрепроцессоры позволяют удобно описывать состояния:
.section {
opacity: 0.5;
&.active {
opacity: 1;
}
&.fp-completely {
transform: scale(1);
}
}
Если проект содержит большое количество секций, можно использовать циклы:
@for $i from 1 through 10 {
.section-#{$i} {
background-color: lighten(#3498db, $i * 5%);
}
}
Это особенно полезно для:
fullPage.js поддерживает адаптивность через опции
(responsiveWidth, responsiveHeight), но стили
также требуют настройки.
Препроцессоры упрощают работу с медиа-запросами:
@mixin mobile {
@media (max-width: 768px) {
@content;
}
}
.section {
font-size: 18px;
@include mobile {
font-size: 14px;
}
}
Можно централизовать брейкпоинты:
$breakpoints: (
small: 480px,
medium: 768px,
large: 1024px
);
@mixin respond($size) {
@media (max-width: map-get($breakpoints, $size)) {
@content;
}
}
fullPage.js активно используется с анимациями при смене секций. Препроцессоры помогают стандартизировать эффекты:
@mixin slide-up {
transform: translateY(50px);
opacity: 0;
transition: all 0.6s ease;
&.active {
transform: translateY(0);
opacity: 1;
}
}
.section {
@include slide-up;
}
При работе с препроцессорами рекомендуется разбивать стили на модули:
styles/
│
├── base/
│ ├── _variables.scss
│ ├── _mixins.scss
│
├── layout/
│ ├── _fullpage.scss
│
├── sections/
│ ├── _section1.scss
│ ├── _section2.scss
│
└── main.scss
В main.scss:
@import 'base/variables';
@import 'base/mixins';
@import 'layout/fullpage';
@import 'sections/section1';
@import 'sections/section2';
Библиотека подключает собственные стили, которые часто требуется переопределять. Препроцессоры помогают делать это аккуратно:
#fp-nav {
ul li a span {
background: $primary-color;
}
}
Или с вложенностью:
#fp-nav {
ul {
li {
a {
span {
background: $primary-color;
}
}
}
}
}
Препроцессоры позволяют легко создавать темы:
$themes: (
dark: (#111, #fff),
light: (#fff, #000)
);
@each $name, $colors in $themes {
.theme-#{$name} {
background-color: nth($colors, 1);
color: nth($colors, 2);
}
}
Применение:
<div class="section theme-dark"></div>
fullPage.js предоставляет callbacks (afterLoad,
onLeave), которые можно использовать вместе с классами,
описанными в SCSS:
new fullpage('#fullpage', {
afterLoad: function(origin, destination) {
destination.item.classList.add('loaded');
}
});
SCSS:
.section {
opacity: 0;
&.loaded {
opacity: 1;
transition: opacity 0.8s ease;
}
}
Использование препроцессоров даёт преимущества:
Особенно это важно для fullPage.js-проектов, где каждая секция может представлять отдельный экран с уникальным дизайном и поведением.
SCSS-функции помогают вычислять значения:
@function section-height($vh) {
@return $vh * 1vh;
}
.section {
height: section-height(100);
}
Препроцессоры легко интегрируются с:
Пример для Vite:
css: {
preprocessorOptions: {
scss: {
additionalData: `@import "src/styles/variables.scss";`
}
}
}
fullPage.js активно использует позиционирование. Препроцессоры позволяют управлять слоями через переменные:
$z-navigation: 100;
$z-content: 10;
#fp-nav {
z-index: $z-navigation;
}
.section {
z-index: $z-content;
}
@mixin gradient($from, $to) {
background: linear-gradient(to bottom, $from, $to);
}
.section {
@include gradient(#3498db, #8e44ad);
}
При увеличении количества секций и слайдов:
Каждая новая секция добавляется как отдельный модуль, а общие стили остаются централизованными.
fullPage.js можно расширять кастомными стилями:
.section {
transform: scale(0.9);
transition: transform 0.7s ease;
&.active {
transform: scale(1);
}
}
Использование препроцессоров при работе с fullPage.js включает:
Такой подход позволяет создавать сложные, масштабируемые и легко поддерживаемые интерфейсы.