Авторизация







Регистрация / Забыли пароль?

Регистрация нового пользователя











< Назад

Восстановление пароля





< Назад

Добро пожаловать

Выход


Ежедневное обновление статей и уроков, будь в курсе, держи руку на пульсе событий!

Главная >> CSS

Интерактивная инфографика с SVG и CSS-анимацией


Одной из нераскрытых тем, касающихся новых браузеров, является расширение их функционала поддержкой формата SVG. Если вы ещё не знакомы с SVG, то это векторная графика с возможностью масштабирования, без потери качества при этом.


    В отличие от растровых изображений, например таких форматов как PNG, JPG или GIF, с помощью векторной графики, содержащейся в SVG – файлах, изображения могут быть масштабированы до любого размера, и будут отображаться на любом разрешении экрана без потери качества. В большинстве случаев, SVG файлы, имеют значительно меньший размер, нежели растровые изображения, и легко могут быть загружены браузером.

    Одной из действительно классных вещей в данном формате, является то, что он создан по спецификации XML, с помощью привычной разметки, поэтому с лёгкостью может быть встроен в HTML. Это так же означает, что мы можем получать интересующие нас элементы и манипулировать графикой SVG-файла, используя такие знакомые технологии как CSS и JavaScript.
Используя современные методы поддерживаемые браузером, разработчики могу производить некоторые, довольно впечатляющие эффекты взаимодействуя с SVG. В сегодняшнем уроке, мы будем изучать возможности SVG, и наглядно увидим, как работает данный формат на примере векторной инфографики для HTML странички.

    Подготовка файла SVG

    Есть масса вариантов создания SVG графики, это можно сделать даже собственноручно, но для более сложных графических элементов, мы можем использовать редакторы векторной графики, способные экспортировать необходимый нам SVG файл. О некоторых из таких программ, вы уже слышали, это знакомый нам Adobe Illustrator, но есть и другие, бесплатные, например Inkscape, в большинстве случаев, именно такие программки по проще, нам подходят более всего.

    Программное обеспечение которое вы выберите, должно уметь группировать объекты вместе, и задавать им название, например, присваивать атрибут id. Это поможет нам организовать иерархию в SVG файле, и мы будем иметь доступ ко всем элементами, чтобы в последствии влиять на них с помощью CSS и/или JavaScript. Как Adobe Illustrator, так и Inkscape имеют возможность делать это, выбрав несколько графических элементов, затем в верхнем меню Объект -> Группа (или Разгруппировать) (Object > Group (or Ungroup)).

    Любому объекту или группе, затем может быть присвоено имя. Им становится атрибут id группы или объекта при экспорте. Задавая этот атрибут, воздержитесь от специальных символов или пробелов. Кроме того, избегайте дубликатов.

    В Illustrator, работа со слоями, происходит во вкладке «слои» (layers). Чтобы изменить атрибут id, а так же class, просто переместите курсор на объект, который хотите изменить, и дважды щёлкните на нём. В Inkscape, это будет так Объект > Свойства объекта (Object > Object Properties). Кроме того, вы можете напрямую редактировать файл XML, что даст вам больше контроля над процессом, для этого перейдите Редактировать > XML-Редактор (Edit > XML Editor).

    В нашем примере, когда мы сохраним наш SVG и откроем его вновь в текстовом редакторе, он будет иметь следующую структуру:

<g id="background">
    <g id="bg-lines-left"> <!-- left background lines --> </g>
    <g id="bg-lines-right"> <!-- right background lines -->  </g>
</g>
<g id="logo"> <!-- logo graphics -->  </g>
<g id="quote">
    <g id="quote-left-brace"> <!-- left quote brace -->  </g>
    <g id="quote-right-brace"> <!-- right quote brace --> </g>
    <g id="quote-text"> <!-- quote text --> </g>
</g>
<g id="timeline">
    <g id="coffee">
        <rect id="coffee-bar" />
        <polyline id="coffee-arrow" />
        <g id="coffee-time"> <!-- time text --> </g>
        <g id="coffee-badge">
            <circle id="coffee-circle" />
            <g id="coffee-title"> <!-- title text --> </g>
            <g id="coffee-details"> <!-- icon, description --> </g>
        </g>
    </g>
    <g id="design">
        <rect id="design-bar" />
        <polyline id="design-arrow" />
        <g id="design-time"> <!-- time text --> </g>
        <g id="design-badge">
            <circle id="design-circle" />
            <g id="design-title"> <!-- title text --> </g>
            <g id="design-details"> <!-- icon, description --> </g>
        </g>
    </g>
    <g id="build">
        <rect id="build-bar" />
        <polyline id="build-arrow" />
        <g id="build-time"> <!-- time text --> </g>
        <g id="build-badge">
            <circle id="build-circle" />
            <g id="build-title"> <!-- title text --> </g>
            <g id="build-details"> <!-- icon, description --> </g>
        </g>
    </g>
    <g id="complain">
        <rect id="complain-bar" />
        <polyline id="complain-arrow" />
        <g id="complain-time"> <!-- time text --> </g>
        <g id="complain-badge">
            <circle id="complain-circle" />
            <g id="complain-title"> <!-- title text --> </g>
            <g id="complain-details"> <!-- icon, description --> </g>
        </g>
    </g>
    <g id="beer">
        <rect id="beer-bar" />
        <polyline id="beer-arrow" />
        <g id="beer-time"> <!-- time text --> </g>
        <g id="beer-badge">
            <circle id="beer-circle" />
            <g id="beer-title"> <!-- title text --> </g>
            <g id="beer-details"> <!-- icon, description --> </g>
        </g>
    </g>
</g>

    Разметка показанная выше, приводит пример только шаблона, т.е. простая структура, но это поможет вам понять саму идею. В демо, есть пример, уделите ему несколько минут, и проанализируйте реальный SVG файл в текстовом редакторе. Вы увидите много знакомых вещей из HTML, и несколько новых для нас понятий.

    Как мы можем увидеть из примера выше, в нашей SVG разметке, каждый тег <g> указывает на новую группу объектов, которые могут быть вложенными в другие группы. Конечно, при создании SVG, присваивать каждому объекту или группе id или class не обязательно, можно их присвоить только основным, это делается для удобства последующей работы с CSS и JavaScript, а так же, чтобы можно было понять о чём идёт речь глядя на разметку.

    Загрузка SVG в HTML с использованием JavaScript

    HTML

    Существует несколько способов внедрения SVG в HTML. Это можно сделать даже с помощью тега <img>, можно и с помощью <embed>, или даже атрибута и свойств CSS  background-image. Однако, для нашей цели, мы должны иметь доступ к DOM нашего SVG, поэтому мы будем использовать HTML5 inline SVG, с возможностью загрузки SVG на нашу страницу с помощью jQuery.
Давайте создадим блок div в нашем HTML-документе, в который будет встроен наш SVG.

<div id="stage"> <!-- Запасной вариант текстового содержимого может быть здесь --> </div>

    JavaScript

    Затем, используя jQuery.load, мы загрузим файл SVG в наш блок stage, и зададим ему класс svgLoaded, который в дальнейшем будет использоваться для запуска начальной анимации.

$(function(){
 
    $("#stage").load('interactive.svg',function(response){
 
        $(this).addClass("svgLoaded");
         
        if(!response){
            // Ошибка загрузки SVG!
            // Запуск возможен с помощью протокола HTTP на реальном сервере в интернете (не локальном) localhost!
        }
 
    });
});

    Примечание: мы загружаем SVG с помощью JavaScript для того, чтобы получить доступ к его DOM. Google Chrome (и, возможно и другие браузеры), вам не позволят сделать это на локальном сервере: так как они работают только при запуске из протокола HTTP, по соображениям безопасности. Поэтому, если у вас возникли проблемы с получением SVG файла при загрузке, сделайте это на реальном сервере в интернете.

    CSS

    Обратите внимание, CSS стили данного урока, не будут содержать конкретные стили используя префиксы элементов, но вы можете найти их в файле с примером, скачав демо.
Первое, что нужно сделать, это установить стиль для созданного нами блока div. По умолчанию, SVG, когда он загружается, масштабируется до размера контейнера в котором содержится, поэтому важно установить его размеры соответствующим образом, чтобы холст SVG имел такие же размеры.

#stage {
    width: 1024px;
    height: 1386px;
}

    Стиль SVG элементов:  установка преобразования transform-origin

    Ключом к нашей анимации элементов SVG, будет transform-origin. По умолчанию, все преобразования любого элемента в нашем SVG начнутся с (0px, 0px). Если мы хотим поворачивать или масштабировать какой-либо элемент, нам нужно установить соответствующее transform-origin. Преобразования происходят относительно левого верхнего угла SVG холста. Преобразования для каждого элемента, будут различными, исходя из желаемого эффекта/анимации, но в большинстве случаев, мы будем преобразовывать их из их центра фигуры, т.е. из того места, где он находится. 

    Возможно это будет утомительным занятием, но достаточно простым, ведь нам придётся копировать информацию о координатах, представленную в нашем редакторе векторной графики.

#coffee { 
    transform-origin: 517px 484px;
}
#coffee-badge { 
    transform-origin: 445px 488px;
}
#coffee-title { 
    transform-origin: 310px 396px;
}
#coffee-details { 
    transform-origin: 311px 489px;
}
 
#design { 
    transform-origin: 514px 603px;
}
#design-badge { 
    transform-origin: 580px 606px;
}
#design-title { 
    transform-origin: 712px 513px;
}
#design-details { 
    transform-origin: 710px 620px;
}
 
#build { 
    transform-origin: 511px 769px;
}
#build-badge { 
    transform-origin: 445px 775px;
}
#build-title { 
    transform-origin: 312px 680px;
}
#build-details { 
    transform-origin: 310px 790px;
}
 
#complain { 
    transform-origin: 512px 1002px;
}
#complain-badge { 
    transform-origin: 586px 1000px;
}
#complain-title { 
    transform-origin: 718px 921px;
}
#complain-details { 
    transform-origin: 717px 1021px;
}
 
#beer { 
    transform-origin: 513px 1199px;
}
#beer-badge { 
    transform-origin: 444px 1193px;
}
#beer-title { 
    transform-origin: 313px 1097px;
}
#beer-details { 
    transform-origin: 316px 1202px;
}

    Начальные преобразования

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

    Для этого, мы будем использовать некоторые дополнительные CSS-селекторы. Для выбора объекта, мы будем использовать селектор id.

[id$=badge] { /* Любой элемент с id, который заканчивается в "эмблеме" */
    transform: scale(0.5, 0.5);
}
[id$=title] { 
    transform: scale(1.8) translate(0px, 48px);
}
[id$=details] { 
    transform: scale(0, 0);
}

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

    Добавляем стили :hover и применяем переходы

    Здесь мы указываем, как должны вести себя группы, при наведении на них курсора мыши. Задаём параметры до которых возможна их деформация, и время, за которое эта деформация должна происходить,  в нашем случае 0.25 секунды.

#timeline > g:hover [id$=badge], #timeline > g:hover [id$=details] {
    transform: scale(1, 1);
}
#timeline > g:hover [id$=title] {
    transform: scale(1) translate(0px, 0px);
}
[id$=badge], [id$=title], [id$=details] {
    transition: transform 0.25s ease-in-out;
}

    Начальная анимация

    Чтобы создать последовательность анимации заставки, мы будем использовать CSS. Прежде всего, нужно создать несколько ключевых кадров, что позволит анимировать несколькими различными свойствами CSS

@keyframes left-brace-intro {
    0% { 
        transform: translateX(220px);
        opacity: 0;
    }
    50% { 
        opacity: 1;
        transform: translateX(220px);
    }
    100% { 
        transform: translateX(0px);
    }
}
@keyframes right-brace-intro {
    0% { 
        transform: translateX(-220px);
        opacity: 0;
    }
    50% { 
        opacity: 1;
        transform: translateX(-220px);
    }
    100% { 
        transform: translateX(0px);
    }
}
@keyframes fade-in {
    0% { 
        opacity: 0;
    }
    100% { 
        opacity: 1;
    }
}
@keyframes grow-y {
    0% { 
        transform: scaleY(0);
    }
    100% { 
        transform: scaleY(1);
    }
}
@keyframes grow-x {
    0% { 
        transform: scaleX(0);
    }
    100% { 
        transform: scaleX(1);
    }
}
@keyframes grow {
    0% { 
        transform: scale(0, 0);
    }
    100% { 
        transform: scale(1, 1);
    }
}

    Создание последовательности анимированной заставки

    Наши ключевые кадры готовы, и теперь, мы можем приступить к созданию красивой анимационной заставки, просто применяя анимацию для различных элементов. Поскольку мы хотим сделать именно начальную анимацию, когда SVG загружен впервые, мы будем использовать селекторы потомков, из класса svgLoaded, который мы создали ранее.

    Для того чтобы создать последовательность анимации, мы будем корректировать её свойства animation-delay, это задержка, а так же свойством  animation-fill-mode: backwards для возвращения анимации в 0% выполнения за время animation-delay.

ease-in-out 1.75s;
    animation-fill-mode: backwards; 
}
.svgLoaded #background > g:last-of-type { 
    transform-origin: 458px 877px; 
}
.svgLoaded #background > g:first-of-type { 
    transform-origin: 563px 877px; 
}
.svgLoaded #coffee, .svgLoaded #design, .svgLoaded #build, .svgLoaded #complain, .svgLoaded #beer { 
    animation: grow 0.25s ease-in-out;
    animation-fill-mode: backwards; 
}
.svgLoaded #coffee { 
    animation-delay: 2s; 
}
.svgLoaded #design { 
    animation-delay: 2.25s; 
}
.svgLoaded #build { 
    animation-delay: 2.5s; 
}
.svgLoaded #complain { 
    animation-delay: 2.75s; 
}
.svgLoaded #beer { 
    animation-delay: 3s; 
}

    WEB-шрифты

    Поскольку в нашем примере, мы используем нестандартные шрифты,  их так же нужно включить на нашу страничку, для того, чтобы они отображались. При этом важно, правильно получить имя шрифта, который был использован при экспорте SVG. Давайте откроем SVG файл в текстовом редакторе, и просто найдём текстовый узел, в котором располагается свойство font-family, нам интересно его значение:

<!-- ... -->
<text font-family="'LeagueGothic'" font-size="28">12PM</text>
<!-- ... -->

    Как мы видим, SVG файл был экспортирован со значением  font-family ‘LeagueGothic’. Так что, мы просто должны определить webfont в нашем CSS, используя то же самое имя. Это точно такой же процесс, как если бы мы подключали шрифт для обычного  HTML.

@font-face {
    font-family: 'LeagueGothic';
    url("/zhitelyam/fonts/league-gothic/league-gothic.eot.woff") format("woff");
 }

    Вот и все! Надеюсь, вам понравился этот урок и вы нашли его полезным и информативным! Я хотел бы услышать ваши комментарии об использовании SVG в интерактивном режиме, а так же, о вашем опыте в данной теме.

    Материал взят из зарубежного источника. И представлен исключительно в ознакомительных целях.


Дата публикации: 24.02.2013
Опубликовал: Сергей Кашурин
Просмотров: 870
Правила перепечатки

Правила перепечатки

Уважаемый посетитель сайта!
Ниже преведены условия использования и перепечатки материалов сайта /
Все материалы данного сайта подготовлены для Вас лично мной.

Большая часть материалов сайта - это авторские уроки, остальные, это переводы уроков с английского языка на русский.
Если Вы решили использовать материалы данного сайта где-то на своих ресурсах или в рассылке, то соблюдайте следующие требования:
1. Урок или статья должны перепечатываться «как есть» с сохранением всех ссылок на источник урока, а если это перевод, то и на сайт, авторы которого подготовили его.
2. Ссылки на сайт источника и переводчика обязательно должны быть работоспособными (при нажатии по ссылке человек должен перейти на сайт автора/переводчика). Если Вы перепечатали какой-либо документ, обязательно проверьте ссылку на работоспособность.
3. Искажение информации об авторе, источнике, переводчике при перепечатке материалов запрещено!
4. Содержание урока или статьи при перепечатке не должно подвергаться модификациям и переделке. Все уроки и статьи, размещенные на сайте, должны перепечатываться как есть. Вы не имеете права урезать, исправлять или иным образом коверкать републикуемый документ.
С уважением, Сергей Кашурин– владелец сайта /


Colorizer: пользователь сам выберет цвет продукта на вашем сайте
Когда вы выбираете машину, или футболку в интернет магазине, хотелось бы вам самим выбрать для неё цвет? Думаю да. В этой статье, я расскажу вам про плагин Colorizer, с помощью которого, для наших дорогих пользователей, мы сможем предоставить возможность выбора цвета продукта в котором он заинтересован, что оставит о нас приятное впечатление и заявку на покупку. jQuery плагин Colorizer - изменим цвет к лучшему.
BARAJA - jQuery плагин создающий великолепные информационные карточки на вашем сайте, экономя драгоценное место
Благодаря этому плагину, элементы могут располагаться как карты в виде стопки, раскладываясь перед нами оригинальным способом. Добавьте к элементам небольшой текст и уникальный рисунок, примените оригинальный эффект преобразования, и ваша страничка преобразится на глазах.
25 поразительных анимаций CSS3, которые улучшат внешний вид вашего сайта
CSS3, сокращение от английского Cascading Style Sheets 3, третье поколение таблиц стилей, которые используются для визуального представления сайта, при минимальном размере кода. Этот последний многообещающий набор стандартов, состоит из большого числа функций и инструментов, которые позволяют улучшить и контролировать дизайн и увеличивать скорость загрузки сайта.
табак nakhla
CSS3, сокращение от английского Cascading Style Sheets 3, третье поколение таблиц стилей, которые используются для визуального представления сайта, при минимальном размере кода. Этот последний многообещающий набор стандартов, состоит из большого числа функций и инструментов, которые позволяют улучшить и контролировать дизайн и увеличивать скорость загрузки сайта.
Курсы Cisco ccna www.atraining.ru
CSS3, сокращение от английского Cascading Style Sheets 3, третье поколение таблиц стилей, которые используются для визуального представления сайта, при минимальном размере кода. Этот последний многообещающий набор стандартов, состоит из большого числа функций и инструментов, которые позволяют улучшить и контролировать дизайн и увеличивать скорость загрузки сайта.
кафе старый город
CSS3, сокращение от английского Cascading Style Sheets 3, третье поколение таблиц стилей, которые используются для визуального представления сайта, при минимальном размере кода. Этот последний многообещающий набор стандартов, состоит из большого числа функций и инструментов, которые позволяют улучшить и контролировать дизайн и увеличивать скорость загрузки сайта.
Магазин заказ продуктов онлайн приезжаешь забираешь здесь
CSS3, сокращение от английского Cascading Style Sheets 3, третье поколение таблиц стилей, которые используются для визуального представления сайта, при минимальном размере кода. Этот последний многообещающий набор стандартов, состоит из большого числа функций и инструментов, которые позволяют улучшить и контролировать дизайн и увеличивать скорость загрузки сайта.

Уроки и статьи

«Найден Самый Дешевый и Эффективный Способ Рекламы в Интернете!»

Доказанo: ведение своей почтовой рассылки - это самый действенный и дешевый метод рекламы в Интернете.

Используете ли Вы его?

Если нет, то Вы давно теряете свои деньги! Если да, то пришло время вести Вашу почтовую рассылку на самом эффективном инструменте в Рунете - сервисе рассылок SmartResponder.ru

Узнать об этом подробнее >>

Быть в курсе всех событий: