Для создания простенького параллакс эффекта вполне можно обойтись и без использования сторонних плагинов и библиотек. Более того, для реализации несложного параллакс эффекта достаточно только CSS кода, используя 3d перспективу и псевдоэлемент.

Параллакс эффект на чистом CSS

Для создания простенького параллакс эффекта вполне можно обойтись и без использования сторонних плагинов и библиотек. Более того, для реализации несложного параллакс эффекта достаточно только CSS кода, используя 3d перспективу и псевдоэлемент.

HTML разметка

Вам потребуется тег шапки header, заголовок h1 и некий текст.

<header>
    <h1>Параллакс эффект</h1>
    <small>Только CSS, никакого JavaScript</small>
</header>

CSS стили

Свойство perspective задает элементу перспективу, а transform-style задает стиль трансформации. Эффект параллакс достигается за счет трансформации блоков с разной скоростью, что создает ощущение глубины. Эффекта глубины мы будем достигать с помощью 3d.

body {
    margin: 0; /* обнуление полей */
    padding: 0; /* обнуление отступов */
    perspective: 1px;/* задание перспективы трансформации */
    transform-style: preserve-3d; /* задание стиля трансформации */
    overflow-y: scroll; /* разрешить скролл по вертикали */
    overflow-x: hidden; /* спрятать все лишнее по горизонтали */
    font-family: 'Pacifico', cursive; /* семейство шрифтов */
    color: #fff; /* цвет текста */
}

header {
    box-sizing: border-box; /* ширина рамок и отступов не влияют на ширину элемента */
    min-height: 100vh; /* шапка занимает 100% первого экрана по высоте */
    text-align: center;/* выравнивание по центру */
    padding-top: 20%; /* поля со всех сторон */
    transform-style: inherit; /* значение наследуется от родителя body */
    width: 100vw; /* шапка занимает 100% ширины экрана */
    font-size: 34px; /* размер шрифта */
}

Стили псевдоэлемента before являются ключевыми для достижения эффекта параллакс, который заключается в значениях свойства transform. Трансформация будет происходить по оси Z: фоновое изображение сдвинется на глубину в 1 пиксель. Фоновая картинка движется медленнее, чем заголовок.

header::before {
    content: ''; /* условие отображения псевдоэлемента */
    display: block; /* позиционирование псевдоэлемента */
    position: absolute; /* позиционирование псевдоэлемента */
    left: 0; /* левая координата */
    right: 0; /* правая координата */
    bottom: 0; /* нижняя координата */
    top: 0;/* верхняя координата */
    z-index: -1; /* расположение на нижнем слое */
    transform-origin: center; /* направление трансформации из центра */
    min-height: 100vh;/* 100% по высоте */
    background-image: url('https://cdn.pixabay.com/photo/2020/12/22/12/38/cat-5852139_1280.jpg');
    background-repeat: no-repeat; /* запрет на размножение фона */
    background-size: cover; /* растянуть фон, сохраняя пропорции */
    transition: 1s; /* плавный переход */
    /* Параллакс */
    transform: translateZ(-1px) scale(2);
}

header h1 {
    margin-top: -100px;
    font-size: 40px;
}

Посмотрите пример на CodePen