DataLife Engine > Версия для печати > Анимация с появлением текста на CSS Animations

Сегодня мы хотим рассказать вам о том, как сделать небольшой текстовый эффект при помощи css-анимации и тени текста. Возможно, вы уже встречались с подобной анимацией текста при просмотре, к примеру, трейлеров к фильмам. После просмотра Introducing Briefs (это, конечно, не трейлер к фильму, но превью к очень интересному приложению), мы вдохновились на воссоздание подобного эффекта при помощи CSS.

Суть заключается в том, чтобы размывать текст, который появляется по частям, а также в создании анимации будто движущегося текста. Всего этого можно добиться при помощи новых css-фильтров, применив анимацию к отступам и полям. Сегодня мы собираемся воспользоваться тенью текста и свойством letter-spacing, чтобы добиться желаемого эффекта. Так как нам нужно контролировать каждый символ, мы воспользуемся Lettering.js от Dave Rupert, чтобы облачить слова и символы в раздельные span-элементы.

Итак, давайте приступим.

Примечание: этот эксперимент будет работать только в тех браузерах, где имеется поддержка соответствующих CSS-свойств.

Суть заключается в том, чтобы у нас было несколько предложений текста, которые появляются одно за другим, как уже было описано выше, поэтому нам нужно обернуть каждое предложение в H2:


    

Sometimes it's better

    

to hide

    

in order to

    

survive evil

    

Thanatos

    

This fall

    

Prepare

    

Refresh to replay


Помните о том, что это просто экспериментальный эффект, поэтому давайте не будем строго судить предложенную разметку.Теперь наши предложения на своих местах, и давайте попробуем применить lettering, чтобы обернуть каждое слово и букву в отдельный span. Нам нужно, чтобы буква была обернута в два span-элемента, так как нам нужно будет использовать перспективу на каждой букве. Итак, давайте все-таки сделаем это:

$("#os-phrases > h2").lettering('words').children("span").lettering().children("span").lettering();

Это приведет нас к следующей безумной структуре:


    

S o m

 
    
    

Конечно же, сильно наседать не нужно, но здесь необходимо довольно тщательно подойти к вращениям: нам нужно, чтобы оно происходило в перспективе. Вращение текста без перспективы не даст нужного эффекта, а мы хотим, чтобы все было замечательно. Если мы уже используем lettering.js, то есть смысл пройти этот путь до конца.Теперь, когда мы разобрались с этим адом из оболочек в виде span-элементов, давайте используем его для стилизации вложенных букв.Учтите, что CSS не содержит браузерных префиксов здесь, но в исходный файлах вы их увидите.Наш заголовок будет позиционирован на экране абсолютно, занимая все пространство:

.os-phrases h2 {
    font-family: 'Dosis', 'Lato', sans-serif;
    font-size: 70px;
    font-weight: 200;
    height: 100%;
    width: 100%;
    overflow: hidden;
    text-transform: uppercase;
    padding: 0;
    margin: 0;
    position: absolute;
    top: 0;
    left: 0;
    letter-spacing: 14px;
    text-align: center;
}

Нам нужно, чтобы наши предложения не оборачивали его, а были расположены по центру экрана, как по вертикали, так и по горизонтали. Как мы реализуем это? Правильно, для этого мы воспользуемся flexbox:

.os-phrases h2,
.os-phrases h2 > span {
    height: 100%;
    /* Centering with flexbox */
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
}

Учтите, что стандартное значение для flex-wrap – это nowrap, которое и представляет собой то, что нам нужно.Это позволит нам красиво центрировать предложения.Теперь давайте добавим немного пространства между словами:

.os-phrases h2 > span {
    margin: 0 15px;
}

Первая оболочка для буквы будет иметь перспективу:

.os-phrases h2 > span > span {
    display: inline-block;
    perspective: 1000px;
    transform-origin: 50% 50%;
}

Сами буквы будут прозрачны, и к ним мы применим анимацию. Длительность анимации составляет 5.2 секунды.

.os-phrases h2 > span > span > span {
    display: inline-block;
    color: hsla(0,0%,0%,0);
    transform-style: preserve-3d;
    transform: translate3d(0,0,0);
    animation: OpeningSequence 5.2s linear forwards;
}

Перед тем, как перейти к анимациям, давайте сразу определим задержки для частей предложения. 5-я часть предложения – та, в которой у нас присутствует заголовок фильма «Thanatos», будет особенной, и поэтому она будет появляться немного дольше и позже. 6-я и 7-я части следуют друг за другом довольно быстро. 1367994999_1367939235_openingsequence021-1381287

.os-phrases h2:nth-child(2) > span > span > span {
    animation-delay: 5s;
}
 
.os-phrases h2:nth-child(3) > span > span > span {
    animation-delay: 10s;
}
 
.os-phrases h2:nth-child(4) > span > span > span {
    animation-delay: 15s;
}
 
.os-phrases h2:nth-child(5) > span > span > span {
    font-size: 150px;
    animation-delay: 21s;
    animation-duration: 8s;
}
 
.os-phrases h2:nth-child(6) > span > span > span {
    animation-delay: 30s;
}
 
.os-phrases h2:nth-child(7) > span > span > span {
    animation-delay: 34s;
}

И последней части мы зададим особенную анимацию, но давайте сначала взглянем на базовую.В этой анимации нам сначала нужно, чтобы text-shadow немного размыл буквы. Межбуквенный пробел будет большим, и буквы будут вращаться по оси Y, поэтому мы будем видеть всего лишь кусочек. Уровень непрозрачности установлен на 0.2.На половине анимации мы добавляем резкости буквам и понижаем межбуквенный пробел до 14 пикселей, увеличиваем уровень непрозрачности, и вращаем буквы до 0, чтобы они предстали прямо перед нами. 1367995097_1367939283_openingsequence011-2151783 Последний же этап заключается в том, что мы затемняем буквы, и слегка их увеличиваем, снова добавляя размытости:

@keyframes OpeningSequence {
    0% {
        text-shadow: 0 0 50px #fff;
        letter-spacing: 80px;
        opacity: 0.2;
        transform: rotateY(-90deg);
    }
    50% {
        text-shadow: 0 0 1px #fff;
        letter-spacing: 14px;
        opacity: 0.8;
        transform: rotateY(0deg);
    }
    85% {
        text-shadow: 0 0 1px #fff;
        opacity: 0.8;
        transform: rotateY(0deg) translateZ(100px);
    }
    100% {
        text-shadow: 0 0 10px #fff;
        opacity: 0;
        transform: translateZ(130px);
        pointer-events: none;
    }
}

Наша последняя часть предложения будет обозначена другой анимацией, которая просто отобразит нам текст и оставит его в таком положении:

.os-phrases h2:nth-child(8) > span > span > span {
    font-size: 30px;
    animation: FadeIn 4s linear 40s forwards;
}
 
@keyframes FadeIn { 
    0% {
        opacity: 0;
        text-shadow: 0 0 50px #fff;
    }
    100% {
        opacity: 0.8;
        text-shadow: 0 0 1px #fff;
    }
}

Последнее, но не менее важное заключается в том, чтобы добавить акценты на определенные слова, выделив их полужирным шрифтом:

/* Bold words */
.os-phrases h2:first-child .word3,
.os-phrases h2:nth-child(2) .word2,
.os-phrases h2:nth-child(4) .word2 {
    font-weight: 600;
}

И на этом все! Надеемся, что вам понравилось данное руководство!Исходники в архиве…