Сегодня мы создадим набор красивых эффектов для крупных заголовков используя CSS3 и JQuery. Множество вещей можно сделать при помощи CSS3-анимации и переходов, и мы рассмотрим некоторые из этих возможностей.
Мы также будем использовать скрипт Lettering.js, чтобы работать с отдельными буквами в слове, которое будет в нашем большом заголовке.
Затем мы вызовим плагин Lettering.js, чтобы каждая буква была обернута в тег span.
Теперь давайте взглянем на примеры. Я покажу все стили, которые имеют отношение к эффектам. В исходных файлах вы можете посмотреть все остальные стили, такие как: позиционирование, заголовки, шрифты и так далее.
Чтобы не загромождать урок, я не буду указывать в примерах кода какие-либо префиксы CSS для различных браузеров. В исходных файлах они есть, конечно.
В первом примере мы хотим исказить буквы, чтобы создать небольшую перспективу. Но мы также хотим изменить слово при наведении курсора мыши, поэтому наш код будет содержать дополнительный элемент A внутри тега h2. Чтобы эффект работал хорошо, мы выберем два слова с одинаковым числом букв:
Теги span будут иметь некоторые правила для тени текста и переходов. Каждый дочерний четный элемент будет повернут на 10 градусов, а нечетный на -10 градусов:
Во втором примере мы поиграем немного с псевдо-элементами. Во-первых, мы зададим стили для каждого тега span таким образом, чтобы он выглядел как фото полароида:
Теперь, мы будем поворачивать четные и нечетные буквы в разные стороны, чтобы они выглядели как разбросанные фотографии:
.letter-container h2 a span:nth-child(even){
transform: rotate(3deg); } .letter-container h2 a span:nth-child(odd){
transform: rotate(-5deg); }
Для каждого символа (мы используем классы, создаваемые lettering.js, но мы могли бы также использовать селектор nth-child) мы будем добавлять различные фоновые изображения:
В третьем примере мы будем применять анимацию к тегу span, которая будет выполняться один раз при загрузке страницы. Мы сделаем размытые буквы более строгими. Мы также будем использовать маску, чтобы добавить текстуру на буквы (поддерживается только Webkit браузерами, на данный момент):
.letter-container h2 a span { font-size:105px; color:#444;
opacity:1; text-shadow:0px0px2px#444,1px1px4px rgba(0,0,0,0.7);
mask-image:url(../images/mask2.png);
transition: all 0.3s linear;
animation: sharpen 0.6s linear backwards; }
При наведении на букву мы будем менять её цвет:
.letter-container h2 a span:hover{ color:#3f7f75; }
Мы создадим рандомное появления букв, задавая каждой букве задержку анимации:
.letter-container h2 a span:nth-child(1){
animation-delay: 1.2s; } .letter-container h2 a span:nth-child(2){
animation-delay: 0.1s; } .letter-container h2 a span:nth-child(3){
animation-delay: 1s; } /* ... и так для каждой буквы */
Анимация превращает размытую, нечеткую и прозрачную букву в букву с резкими краями, четким цветом и тонкими тенями:
Этот пример довольно сильно отличается от предыдущих, потому что мы будем применять немного больше JQuery. Чтобы понять, что мы делаем, я покажу вам, что наша функция JQuery делает из заголовка. Код, который создается для каждой буквы после применения lettering.js получается следующий:
Почему такая структура? Мы хотим поиграть с перспективой и 3D-трансформацией, так что нам нужно еще несколько элементов, чтобы сделать эту работу.
Мы хотим, чтобы этот заголовок выглядел как информационное табло аэропорта, и когда мы наводим курсор мыши на тег span, мы хотим чтобы верхний элемент падал вниз, но в 3D! Это будет работать только в браузер Webkit, но у нас будет хорошая альтернатива и для других.
Итак, давайте начнем со стилей для новой обертки. Это будет контейнер с перспективой:
Все элементы будут иметь абсолютное позиционирование. Элементы внутри "tup" будут иметь свойство -webkit-backface-visibility: hidden. Таким образом мы сможем повернуть "tback" в 3D пространстве, а затем "tup", при наведении:
Итак, пример 5 выглядит немного сумасшедшим: мы создадим тени текста, которые "поднимают" буквы. Мы также создадим псевдо элемент, который содержит супергероя в качестве фона:
Тег span будет иметь свойство text-shadow, которое "поднимает" буквы, а при наведении мыши мы будем сдвигать буквы вниз, добавив отступы и изменив тени: