В этой статье будем знакомиться с новым менеджером задач (task manager) под названием Gulp. Постепенно вместе с вами я пройду весь процесс - от установки Gulp до установки плагинов, создания задач, отслеживания ошибок и еще многое другое.
Но для начала узнаем, что такое Gulp. Это точно такой менеджер задач, как и Grunt. Оба они являются модулями под Node.js и устанавливаются с помощью пакетного менеждера
1
npm
.
Отличие от Grunt в том, что Gulp является переработкой Grunt. Как говорят его разработчики, цель создания была в том, чтобы выбросить из Grunt все лишнее. Кроме того, настройка Gulp значительно упростилась:
На сегодня однозначным преимуществом Gulp перед Grunt является скорость обработки файлов - она в разы выше, чем у старенького Grunt.
Установка Gulp
Установка будет производиться под операционной системой Linux Mint 17 Cinnamon. Поэтому, пользователи Mac OS найдут все нижеприведенные команды абсолютно идентичными для себя. Подразумевается, что в системе уже установлен Node.js и менеджер пакетов npm.
Процесс инсталляции выполняется в два этапа. Первоначально Gulp устанавливается глобально, с помощью ключа
1
-g
. Давайте так и поступим - произведем установку в системе:
Затем создадим тестовую директорию с именем
1
gulp_test
, в которой будет производить наше знакомство:
В этой директории создадим файл
1
package.json
и пропишем в нем имя проекта и его версию:
Этого будет достаточно. Теперь установим Gulp внутри директории
1
gulp_test
. При этом воспользуемся ключом
1
--save-dev
, который будет “говорить” менеджеру пакетов npm вносить в файл
1
package.json
все устанавливаемые им пакеты в качестве зависимостей проекта:
Теперь снова посмотрим на содержимое файла
1
package.json
и увидим, что npm добавил Gulp в качестве зависмости:
Установка завершена и можно переходить к использованию этого менеждера задач.
Первый запуск Gulp
Менеджер задач - само слово говорит за себя, это программа для управления задачами. В Gulp все задачи прописываются в одном единственном файле
1
gulpfile.js
. Первоначально этого файла не существует и его нужно создать самостоятельно, вручную:
Затем в нем пропишем первую задачу. Все задачи деляться на два неравнозначных типа: задача по умолчанию (default task) и именованные задачи (named tasks). Разница между ними в том, что задача по умолчанию имеет имя
1
default
, которое можно и не указывать. Кроме того, задача по умолчанию запускается в консоли всего одной командой:
В то время как именованная задача (named task) может иметь произвольное имя. Запуск такой задачи в консоли выполняется с указанием имени конкретной задачи:
Еще один важный момент заключается в том, что этот менеджер задач является потоковым. Что это значит? Не знаю, получиться ли у меня достаточно точно объяснить данный вопрос, но вот линуксоиды, хорошо знакомые с командной строкой, меня должны понять. В консоли Linux (Unix) есть такое понятие, как pipe.
Например, простая команда:
… выполняет следующее: результат команды
1
ls -l
перенаправляется для обработки в программу
1
less
. Редактор
1
less
автоматически открывается в консоли с уже готовым для чтения текстом внутри себя.
Чисто схематично такой пример можно усложнить и представить в таком виде:
Каждая из программ в этом списке будет производить обработку данных и передавать результат этой обработки другой программе, по цепочке.
Принцип работы Gulp точно такой же. Только вместо программ в нем используются плагины (я не забыл сказать, что он имеет модульную структуру?):
Отлично! С теорией закончили и можно снова возвращаться к практике, к нашему файлу настроек
1
gulpfile.js
. Откроем его и пропишем в нем такие строки:
Первая строка
1
var gulp = require('gulp');
создает переменную
1
gulp
, в которую помещается сам Gulp. Это необходимо для Node.js, который будет читать файл
1
gulpfile.js
и работать с Gulp в виде переменной
1
gulp
.
Вторая строка, начинающаяся с
1
gulp.task
- это не что иное, как задача. Именно так создаются задачи в этом менеджере. Здесь
1
'default'
- это имя задачи (в данном случае это задача по умолчанию, как вы помните). Функция
1
function()
имеет в своем теле неограниченное количество инструкций. Так как мы еще не умеем работать с плагинами под Gulp, то в качестве инструкции пропишем вывод в консоль обычной текстовой строки -
1
console.log('Hello from Gulp!')
.
Давайте попробуем запустить наш менеджер задач, чтобы посмотреть, а работает ли он вообще? И как он работает? Для этого переходим в консоль и вводим в ней одну единственную команду
1
gulp
:
Вот это да! А что означают все эти строки в консоли? Означают они только хорошее! Строка
1
Using gulpfile ~/Projects/gulp_test/gulpfile.js
говорит о том, что Gulp для своей работы воспользовался файлом настроек
1
gulpfile
по указанному пути. Затем было запущено выполнение задачи с именем
1
default
-
1
Starting 'default'...
. Результатом выполнения этой задачи был вывод в консоль строки -
1
Hello from Gulp!
. И задача с именем
1
default
благополучно завершилась -
1
Finished 'default' after 169 μs
, причем на ее выполнение ушло 169 миллисекунд.
Можно поздравить самих себя - мы только что создали и запустили на выполнение свою первую задачу под Gulp!
Встретил на Google+ упоминание о плагине под jQuery для создания карусели - OWL Carousel.
Попробовал с ним разобраться и посмотреть примеры создания слайдеров на официальной странице. Могу сказать, что я впечатлен данным скриптом и его возможностями. Слайдер адаптивный, имеет множество настроек, обладает хорошими эффектами “из коробки”. Мое личное мнение - отличный выбор для применения на практике!
Официальная страница проекта располагается здесь - OWL Carousel. Стабильная версия скрипта на данный момент -
1
v1.3.2
, но на странице упоминается о версии
1
2.0.0-beta
. Для своей работы плагин требует библиотеки jQuery версии не ниже
1
1.7
.
Ниже я попробую создать простой вариант карусели с помощью плагина OWL Carousel. Более интересные и продвинутые варианты, я думаю, показывать не имеет смысла. По той простой причине, что разобравшись с базовым вариантом, всегда можно его улучшить. И для этой цели как ничто лучше подойдут примеры на официальной странице - Demo и More Demo. Стоит сказать, что для себя я увидел там готовые решения практически на все случаи жизни.
Подключение OWL Carousel
Для подключения плагина OWL Carousel к готовому проекту необходимо получить архив плагина с официальной страницы - OWL Carousel или с GitHub - OwlCarousel. В архиве имеется все, что необходимо - библиотека jQuery, плагин
1
owl.carousel.min.js
, готовые CSS-стили для карусели. Ничего сложного или необычного в подключении плагина OWL Carousel нет - все стандартно.
HTML-разметка и подключение скрипта будут выглядеть следующим образом:
В
1
head
подключаются две готовых CSS-таблицы из архива -
1
owl.carousel.css
и
1
owl.theme.css
. Таблица
1
style.css
- опциональная, для настройки плагина под конкретные условия.
Тип HTML-элементов для создания разметки слайдера, по большому счету, не имеет особого значения, так как скрипт OWL Carousel умеет работать со всеми типами. Главное, чтобы у блока-обертки имелся обязательный класс
1
owl-carousel
, к которому будет производиться привязка стилей из файла
1
owl.carousel.css
.
В конце тела
1
body
документа подключаются библиотека jQuery, скрипт плагина OWL Carousel и файл настроек данного скрипта.
Базовая конфигурация js-файла
1
settings.js
выглядит следующим образом:
Все, можно смотреть на готовый (слегка подредактированный) результат:
Настройка плагина OWL Carousel
Скрипт OWL Carousel имеет большое количество настроек, которые добавляются или убираются в файле настроек. Ссылка на страницу с полным списком настроек располагается здесь - Customizing OWL Carousel.
К примеру, переменная
1
items
задает количество одновременно показываемых в слайдере изображений:
Переменные
1
itemsDesktopSmall
,
1
itemsTablet
,
1
itemsTabletSmall
,
1
itemsMobile
устанавливают количество одновременно отображаемых изображений в зависимости от размера окна браузера. Например, запись вида
1
itemsDesktop: [1199,4]
“говорит” браузеру, что при размере окна меньше или равному 1199px следует отображать одновременно только четыре изображения:
Переменная
1
singleItem
устанавливает, отображать ли только одно изображение в слайдере или несколько:
Переменные
1
navigation
и
1
pagination
управляют возможностью включения или выключения навигации\пагинации у слайдера:
Автоматическая прокрутка изображений в слайдере включается с помощью переменной
1
autoPlay
:
Имеются множество других настроек плагина OWL Carousel, с которыми можно легко разобраться на официальной странице. Все перечислять здесь я не буду.
Варианты слайдера OWL Carousel
Стоит “побродить” по странице с демонстрационными примерами работы плагина OWL Carousel. Там есть на что посмотреть и что подобрать для себя.
Наиболее интересные (для меня) примеры расположены в списке со ссылками.
К примеру, по ссылке CSS3 Transitions располагается образец слайдера с эффектом перехода, основанном на CSS3-свойстве transition. Более того, из выпадающего списка можно прямо на странице подобрать себе подходящий эффект - своеобразный конструктор получается:
Или пример создания слайдера с расположенной вверху полосой progress bar - Progress Bar.
Заключение
Плагин OWL Carousel мне понравился и я буду стараться применять его на практике, при верстке страниц.
В этой статье будет детально рассмотрен вопрос создания фигуры шестиугольника (hexagon) на CSS.
Материал целиком основан на замечательной статье CSS Hexagon Tutorial. В Сети имеется хорошая статья по примерам создания различных видов фигур на CSS, и располагается эта статья на блоге известного CSS-гуру Chris Coyier Shapes of CSS. Среди прочих фигур там есть и желанный шестиугольник
1
hexagon
с готовым CSS-кодом что называется, “бери и пользуйся”.
Но ведь такой подход для нас не интересен, правда? Это потом, когда мы изучим вопрос создания шестиугольника, мы будем делать так - нашел готовый код, скопировал к себе, подредактировал и готово! А сейчас мы пошагово пройдем весь путь, от начала и до конца - это даст нам понимание процесса.
Как будем строить hexagon
Фигура hexagon изначально кажется неприступной - не понятно, с какого боку к ней подойди, чтобы начать постороение шестиугольника на CSS. Однако, если внимательно присмотреться, то hexagon можно разделить на три простые фигуры:
Видно, что фигура состоит из двух одинаковых треугольников и одного прямоугольника. Построение треугольников на CSS выполняется очень просто - “CSS – почему треугольник это треугольник”, прямоугольника - вообще в два движения.
Поэтому, построение шестиугольника hexagon на CSS сводится к двух задачам:
создать два треугольника
создать один прямоугольник
Построение треугольников на CSS
Задачу создания треугольников на CSS начнем с построения обычного квадрата со стороной в
1
100px
и широкой границей
1
30px
определенного цвета
1
#789
:
“Раскрасим” границы квадрата для того, чтобы можно было визуально отличать их друг от друга:
Затем обнулим высоту
1
height
и ширину
1
width
нашего квадрата. Он “схлопнется”, оставив для нас видимой только его широкую границу со всех четырех сторон:
Теперь превратим полученную фигуру в настоящий треугольник. Для этого обнулим (уберем) у нее верхнюю границу
1
border-top
, а обе боковые границы
1
border-left
,
1
border-right
сделаем прозрачного
1
transparent
цвета:
У получившегося треугольника все стороны равны - высота и ширина по 30px каждая. Нам же необходимо “растянуть” треугольник в ширину, чтобы он у него появился тупой угол. Для этого нужно увеличить ширину боковых границ
1
border-left
,
1
border-right
треугольника, а ширину нижней границы
1
border-bottom
оставить прежней:
Задача создания треугольника нами выполнена. Теперь необходимо получить точно такой треугольник, только “направленный” вниз. Это просто - достаточно поменять нулевое значение между верхней и нижней границей фигуры. Все остальные значения останутся неизменными. Чуть не забыл сказать, что для “повернутого” треугольника придется создать в HTML-коде новый блок:
Первый шаг по созданию шестиугольника hexagon на CSS выполнен - у нас есть два одинаковых разнонаправленных треугольника. Теперь нужно создать “тело” для шестиугольника - прямоугольник.
Построение прямоугольника на CSS
Для создания прямоугольника на CSS достаточно прописать для нового блока три величины - высоту, ширину и фоновый цвет. Новый блок я размещу между двумя блоками-треугольниками.
А вот с размерами для прямоугольника нужно разобраться немного подробнее. У него ширина должна быть равна удвоенной ширине боковой границы треугольника:
А высота должна быть равна удвоенной высоте треугольника (или ширине верхней\нижней границы - кому как нравиться):
В результате код будет следующим:
Все - задача построения шестиугольника hexagon на CSS выполнена - все оказалось достаточно просто!
Создание сетки из hexagon
Теперь можно усложнить задачу и создать из фигур hexagon своеобразную сетку, а-ля пчелиные соты. Задача тривиальная и весь вопрос сводиться к нескольким CSS-свойствам:
1
float
,
1
overflow
,
1
margin
,
1
padding
.
Создаю первый ряд сетки:
Второй ряд сетки строиться аналогично, за тем лишь исключением, что его необходимо сдвинуть влево и вверх:
Дальше продолжать не имеет смысла - все остальные ряды строятся аналогично. Нужно только управлять ими с помощью соотвествующих классов, смещая влево или вверх:
Лучше перейдем к другому интересному вопросу - созданию такого же шестиугольника hexagon, но несколько иной формы, “повернутого”. У которого углы развернуты по-горизонтали, а не по-вертикали.
Построение повернутого hexagon на CSS
Задача создания развернутого hexagon почти ничем не отличается от задачи построения обычного шестиугольника. Только потребуется несколько дополнительных строчек кода.
Дело в том, что в этом случае нужны углы, которые будут располагаться горизонтально и “смотреть” влево или вправо. Помимо этого, понадобиться “плавание” влево
1
float: left;
.
Для блока - “тела” hexagon нужно будет изменить значения высоты или ширины на прямопротивоположные.
Но не буду голословным, а лучше создам один такой
1
hexagon
:
Добавлю несколько таких шестиугольников, чтобы получился полный ряд:
Отлично! Теперь нужно добавить еще один ряд - нижний. При этом опять придется немного модифицировать код, чтобы произвести смещение фигур влево и вверх:
Можно продолжать постороние рядов до бесконечности, получая сетку из hexagons все большего размера:
3D-проекция hexagons
Можно видоизменить внешний вид сетки из hexagons, воспользовавшись CSS3-свойством
1
transform
. Создаю отдельный класс, в котором прописываю такие свойстсва:
… и проверяю в окне браузера:
Hexagons с помощью псевдо-классов
Рассмотренный выше способ создания hexagons хорош, но имеет один недостаток - слишком много дополнительных блоков, одними из которых являются блоки для создания треугольников.
Можно (и нужно) значительно сократить код, воспользовавшись для этой цели псевдо-классами
1
:before
и
1
:after
. Давайте я так и поступлю, при этом возьму код из примера, не буду ничего выдумывать:
CSS Hexagon
Рассмотренный выше способ неплох, причем оба его варианта. Но для практического применения оба они достаточно трудоемкие. В Сети, помимо многих других подобного рода, имеется online CSS-генератор для создания hexagon в считанные минуты.
Адрес сервиса располагается здесь - CSS Hexagon. Помимо создания самого hexagon, там можно “прикрутить” к фигуре тень и границу, что просто великолепно!
С чего вдруг мне приспичило воспользоваться циклом в препроцессоре? Все, как всегда, просто - в предыдущей статье, посвященной плагину Smooth Scroll (Плагин Smooth Scroll), мне потребовался создать пример разметки HTML-документа с заголовками всех уровней, с первого (h1) до шестого (h6). Все бы ничего, но вручную создавать стили для заголовков всех уровней как-то утомительно.
HTML-разметка для цикла for
Вот я и озаботился задачей автоматизировать этот процесс, через цикл. Для этой цели я использовал цикл
1
for
. Упростил пример, выкинув параграфы и оставив только заголовки всех уровней:
Базовые CSS-стили
Затем пропишу основные стили для этой разметки:
Использую цикл for в Sass
Теперь у меня стоит задача “покрасить” все заголовки в оттенки цвета, указанного в переменной
1
$color: #778899;
. Для создания оттенков воспользуюсь функцией
1
lighten()
из препроцессора Sass.
Цвет будет меняться с шагом в 5% (
1
$percentStep: 5;
):
Также будет изменяться размер шрифта (кегль) в заголовках уровней с первого (
1
h1
) до шестого (
1
h6
), с шагом 10px (
1
$fontSizeStep: 10
):
Как видим, задача и вправду не для ленивых - это же надо тупо вбивать столько значений! Но мне поможет Sass и его циклы, а точнее - цикл
1
for
.
Для этого создаю такую конструкцию цикла
1
for
:
Небольшая расшифровка приведенного выше цикла. В данном случае используется цикл
1
for
, в котором счетчик
1
$i
изменяет свое значение в диапазоне от 1 до 6 включительно. Конструкция
1
#{$i}
называется экранированием в Sass и служит для того, чтобы значение счетчика
1
$i
подставилось в коде “как есть”, в виде текста.
В результате получается такой вывод:
h1
h2
h3
h4
h5
h6
Далее идут CSS-правила с использованием функции
1
lighten()
препроцессора Sass и переменных
1
$color
,
1
$percent
,
1
$fontSize
. Последние две строки производят увеличение значения переменных на указанный шаг:
Приведенный выше SCSS-код скомпилируется в готовый CSS-код подобного вида:
Смотрим результат в браузере и радуемся успеху:
Полный код примера цикла for в Sass
Полный код рассмотренного примера создания цикла
1
for
в Sass приведен ниже:
Скомпилированный в CSS-код результат нашего кодинга:
Обзор краткий такого же небольшого плагина Smooth Scroll, написанного под библиотеку jQuery.
Этот скрипт предназначен только для одной цели - плавного скроллинга (прокрутки) страницы. Благодаря этому улучшается юзабилити страницы и сайта в целом, так как нет резких скачков при переходе по ссылкам.
Подключение плагина Smooth Scroll
Подключение Smooth Scroll к HTML-странице производится как обычно:
… где первая строка - это библиотека jQuery, вторая строка - плагин Smooth Scroll, третья строка - файл инициализации плагина Smooth Scroll.
Инициализация Smooth Scroll
Для того, чтобы заработал плагин Smooth Scroll и на странице появилась плавная прокрутка, нужно в js-файле скрипта прописать строки:
… то есть - всем ссылкам страницы присвоить метод
1
smoothScroll()
, что дает плавный скроллинг. В принципе, этого достаточно - больше ничего и не надо.
Варианты выборки в Smooth Scroll
Помимо показанной выше строчки, скрипт Smooth Scroll имеет несколько других вариантов режима работы. Другими словами, эти режимы работы - все навсего усложненный первый вариант, вариации на тему выборки HTML-элемента в библиотеке jQuery.
Примеры выборок взяты мною из файла
1
readme.md
, переводить их мне совсем не хочется; да и нет в этом необходимости - все понятно даже по коду:
Allows for easy implementation of smooth scrolling for same-page links.
Works like this:
1
$('a').smoothScroll();
Specify a containing element if you want:
1
$('#container a').smoothScroll();
Exclude links if they are within a containing element: