Создание структуры
Структура HTML для каждого эффекта довольно проста: section.cd-intro используется в качестве контейнера для элемента div.cd-intro-content который обертывает основной подзаголовок
Структура для основного подзаголовка слегка отличается от одного эффекта к другому: для живого эффекта, например, мы используем тег <h1> для заголовка страницы, тег <p> как подзаголовок, и div.action-wrapper для обертывания кнопки действия:
Код:
<section class="cd-intro">
<div class="cd-intro-content bouncy">
<h1>Animated Intro Section</h1>
<p>A collection of text effects for the intro section of your website</p>
<div class="action-wrapper">
<a href="#0" class="cd-btn main-action">Get started</a>
<a href="#0" class="cd-btn">Learn More</a>
</div>
</div>
</section>
Класс .bouncy добавлен в .cd-into-content чтобы использовать для запуска анимации.
Добавление стиля
По умолчанию, мы прячем ввод содержимого, установив его непрозрачность до нуля, затем мы оживляем его с помощью CSS-анимации.
Для живого эффекта, например, мы создали 3 различных анимации для <h1>, <p> и .cd-btn кнопок:
Код:
.cd-intro-content h1,
.cd-intro-content p,
.cd-intro-content .cd-btn {
opacity: 0;
animation-delay: 0.3s;
animation-fill-mode: forwards;
}
.bouncy.cd-intro-content h1 {
animation-name: cd-bounce-right;
}
.bouncy.cd-intro-content p {
animation-name: cd-bounce-left;
}
.bouncy.cd-intro-content h1,
.bouncy.cd-intro-content p {
animation-duration: 0.6s;
}
.bouncy.cd-intro-content .cd-btn {
animation-name: cd-bounce-rotate;
animation-duration: 0.5s;
}
.bouncy.cd-intro-content .cd-btn.main-action {
animation-delay: 0.4s;
}
@keyframes cd-bounce-right {
0% {
opacity: .2;
transform: translateX(-200px);
}
60% {
opacity: .7;
transform: translateX(15px);
}
100% {
opacity: 1;
transform: translateX(0);
}
}
@keyframes cd-bounce-left {
0% {
opacity: .2;
transform: translateX(200px);
}
60% {
opacity: .7;
transform: translateX(-15px);
}
100% {
opacity: 1;
transform: translateX(0);
}
}
@keyframes cd-bounce-rotate {
0% {
opacity: .2;
transform: perspective(800px) rotateX(-80deg);
}
20% {
opacity: 1;
}
60% {
transform: perspective(800px) rotateX(20deg);
}
100% {
opacity: 1;
transform: perspective(800px) rotateX(0);
}
}
Давайте взгялнем на видео эффект сейчас: если открыть файл video.html, вы можете увидеть, что дополнительно была выставлена div.cd-bg-video-wrapper; этот элемент используется, чтобы обернуть фоновое видео (Вы не увидите ни одного элемента "video" внутри HTML, так как он загружается с помощью javascript - еще из раздела 'Обработка событий').
Кроме того, мы выставили два элемента (.svg-mask и .svg-mask-mobile) внутри тегов <h1>: эти svgs используются для создания эффекта прозрачности заголовка (первая, когда ширина устройства больше чем, 768px, вторая для других устройств).
В принципе, идея такова: мы создаем непрозрачный прямоугольный <path> элемент, а затем мы добавляем прозрачную область в форме заголовка страницы (в нашем демо, 'Видео Эффект')
Затем svg используется в качестве слоя, чтобы покрыть всю .cd-intro-content: прозрачная область в формате svg позволяет увидеть то, что ниже его (на фоне видео).
Вы можете создать svg маску, просто используя графический векторный редактор. Мы использовали Adobe Illustrator, где мы создали прямоугольник, а затем удалили текст, используя инструмента Pathfinder.
Код:
.cd-bg-video-wrapper {
/* background cover video */
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
background: url(../assets/bg-img.jpg) no-repeat center center;
background-size: cover;
}
.cd-bg-video-wrapper video {
/* you won't see this element in the html, but it will be injected using js */
display: block;
position: absolute;
left: 50%;
top: 50%;
bottom: auto;
right: auto;
transform: translateX(-50%) translateY(-50%);
min-height: 100%;
min-width: 100%;
max-width: none;
height: auto;
width: auto;
}
.video.cd-intro-content svg {
position: absolute;
z-index: 2;
/* center the svg inside its parent */
left: 50%;
top: 50%;
bottom: auto;
right: auto;
transform: translateX(-50%) translateY(-50%);
opacity: 0.8;
}
.video.cd-intro-content svg.svg-mask {
/* this is the svg mask used on desktop version */
display: none;
}
@media only screen and (min-width: 768px) {
.video.cd-intro-content svg.svg-mask-mobile {
display: none;
}
.video.cd-intro-content svg.svg-mask {
display: block;
}
}
Обработка событий
Эти эффекты были созданы с использованием только CSS.
Мы использовали jQuery для видео эффекта только к загрузки фонового видео, если ширина устройства больше, чем 768px. data-video был добавлен в div.cd-bg-video-wrapper чтобы доставать url video.