23

Пример верстки на флексах с использованием gulp и less.

Разработку любого сайта следует начинать с настройки инструментов.

Рассмотрим инструменты и подготовим их к работе.


Все материалы я буду добавлять сюда: https://github.com/pikaweb


Для работы с репозиториями нам пригодится GitBash. Скачать его можно отсюда:


https://git-for-windows.github.io/


В качестве локального сервера я использую OpenServer:


http://open-server.ru/


Кроме того понадобится установить node.js


https://nodejs.org/en/


Перейдем к подготовке. Создаем каталог в \Ваш путь\OpenServer\domains\


Запускаем OpenServer. Входим в его настройки, вкладка «Домены» и добавляем домен для созданной ранее папке. Запускаем сервер.


Теперь сайт будет доступен при вводе в браузере http://domain-name/


Настраиваем git (если еще не настроен). Я предпочитаю bitbucket т.к. он предоставляет бесплатные приватные репозитории. Ниже ссылки на github и bitbucked и на материал по настройке подключения сразу к обоим:


github.com


bitbucket.org


https://gist.github.com/rosswd/e1afd2b0b0d515517eac


Переходим к созданию git репозитория.


https://help.github.com/articles/creating-a-new-repository/


Добавление проекта в репозиторий:


https://help.github.com/articles/adding-an-existing-project-...


Подробный tutorial по bitbucket:


https://www.atlassian.com/git/tutorials/learn-git-with-bitbu...


Настроив репозитории, перейдем к настройке gulp для проекта. Для начала его нужно установить (необходим установленный node.js). Перейдя в терминале (можно и gibush, можно любой удобный для вас) в каталог с сайтом, выполняем следующую команду:


npm init


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


npm install gulp --save-dev


--save-dev обозначает, что мы сохраним информацию об установке пакета в package.json. Это нужно, чтобы не хранить в репозитории подгружаемые npm файлы для установленных модулей. Все они содержатся в node_modules. Чтобы node_modules не отправлялись на git, создадим файл .gitignore со следующим содержимым:


.gitignore


node_modules


А теперь продолжим устанавливать модули для gulp:


Модуль gulp-concat для конкатенации файлов:


npm install gulp-concat --save-dev


Модуль gulp-less для построения css файлов на основе less. Про это чуть подробней при верстке проекта.


npm install gulp-less --save-dev


Для less еще пригодятся less-plugin-clean-css (пост обработка и сжатие less файла) и less-plugin-autoprefix (автоматическое добавление вендорных префиксов, согласно базе данных caniuse.com)


npm install less-plugin-clean-css --save-dev


npm install less-plugin-autoprefix --save-dev


Для сжатия css файлов добавим gulp-minify-css


npm install gulp-minify-css --save-dev


Часть css я встраиваю в html, поэтому добавим gulp-inline-source


npm install gulp-inline-source --save-dev


Для удаления комментариев из html файла понадобится.


npm install --save-dev gulp-remove-html-comments


Для очистки файла от лишних пробелов и удаления комментариев из html файла понадобится:


npm install gulp-htmlclean --save-dev


Для слайдера я воспользуюсь http://kenwheeler.github.io/slick/


Для него требуется jquery


npm install slick-carousel –save-dev


npm install jquery --save-dev


Для верстки еще полезно подключить normalize.css или reset.css. Я обычно использую normalize.


npm install normalize.css --save-dev


Почитать про него можно тут:


https://htmlacademy.ru/blog/64-about-normalize-css


Продумаем общую структуру проекта


index.html


assets/


--less/


--fonts/


--img/


--js/


public/


--index.html


--css/


----build.css


--fonts/


--js/


----build.js


--img/


Где в public будет собираться проект.


Для настройки gulp следует создать файл gulpfile.js и подключить в нем все установленные плагины:


var gulp = require('gulp')


//load plugins


var less = require('gulp-less');


var minifyCSS = require('gulp-minify-css');


var inlinesource = require('gulp-inline-source');


var LessPluginCleanCSS = require('less-plugin-clean-css'),


LessPluginAutoPrefix = require('less-plugin-autoprefix'),


cleancss = new LessPluginCleanCSS({ advanced: true }),


autoprefix= new LessPluginAutoPrefix({ browsers: ["last 2 versions"] });


var htmlclean = require('gulp-htmlclean');


var concat = require('gulp-concat');


var uglify = require('gulp-uglify');


//generate css from less ( + slick less files + slick files).


gulp.task('less-to-css', function() {


gulp.src(['node_modules/slick-carousel/slick/ajax-loader.gif'])


.pipe(gulp.dest('./public/css/'));


gulp.src(['node_modules/slick-carousel/slick/fonts/*'])


.pipe(gulp.dest('./public/css/fonts/'));


return gulp.src(['./assets/less/*.less', 'node_modules/slick-carousel/slick/slick.less', 'node_modules/slick-carousel/slick/slick-theme.less'])


.pipe(less({


plugins: [autoprefix, cleancss]


}))


.pipe(concat('build.css'))


.pipe(minifyCSS())


.pipe(gulp.dest('./public/css'));


});


//minify fonts


gulp.src('./assets/fonts/*.css')


.pipe(minifyCSS())


.pipe(gulp.dest('./public/fonts/'));


//move images to public


gulp.src(['./assets/img/*']).pipe(gulp.dest('./public/img/'));


gulp.src(['./assets/img/**/*']).pipe(gulp.dest('./public/img/'));


//inline link, script and img in index.html . Clean html.


gulp.task('index', function () {


var options = {


compress: true


};


return gulp.src('./index.html')


.pipe(htmlclean())


.pipe(inlinesource(options))


.pipe(gulp.dest('./public/'));


});


/* making build.js */


gulp.task('slickJs', function(){


return gulp.src(['node_modules/jquery/dist/jquery.min.js','node_modules/slick-carousel/slick/slick.min.js', 'assets/js/*.js'])


.pipe(concat('build.js'))


.pipe(uglify())


.pipe(gulp.dest('./public/js/'));


});


gulp.watch('./assets/less/*.less', ['less-to-css']);


gulp.watch('./index.html', ['index']);


gulp.task('default', ['less-to-css','index', 'slickJs']);


Запуск gulp осуществляется из консоли. Открыв консоль в каталоге с проектом и введя gulp, мы запустим выполнения задачи default, которая в свою очередь выполнит задачи 'less-to-css','index', 'slickJs'. За счет gulp.watch, после любого изменения less файлов или index.html файла будет выполняться соответствующая задача.


Верстка


Для примера верстки макета я выбрал .psd макет, распространяемый свободно как для некоммерческого, так и для коммерческого использования.


Ссылка на макет:


http://www.bestpsdfreebies.com/freebie/fudi-landing-page-psd...


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


Обычно первым делом я формирую общую схему разметки. Получается нечто подобное:



<title>Fudi</title>



В дальнейшем в разметке я буду придерживаться BEM методологии. Почитать про неё можно здесь:


https://ru.bem.info/methodology/key-concepts/


Далее согласно этой методологии размечаю всю страницу.


Оптимизация загрузки шрифтов.


К данному макету шрифты шли в каталоге /fonts.


Для оптимизации работы со шрифтами воспользуемся fontsquirrel и возможностью хранить до 5мб места в localstorage. Подробней можно прочитать в переводах статей Adam Beres-Deak:


http://css-live.ru/articles-css/bystraya-zagruzka-veb-shrift...


https://htmlacademy.ru/blog/61-better-webfont-loading-with-l...


Верстал преимущественно флексами, про них можно почитать по ссылкам:


http://css-live.ru/articles/vizualnoe-rukovodstvo-po-svojstv...


https://css-tricks.com/snippets/css/a-guide-to-flexbox/


https://www.w3.org/TR/css-flexbox-1/


Ссылка на кросс-браузерный вариант реализации filter.


http://codepen.io/AmeliaBR/pen/xGuBr


Полностью выкладывать в пост файлы проекта я не буду. Они выложены в гит аккаунте сообщества:


https://github.com/pikaweb/pikaweb-first-demo


Посмотреть на результат в git pages:


https://pikaweb.github.io/pikaweb-first-demo/


Чтобы отправить каталог public В новую ветвь для git pages следует выполнить следующую команду:


git subtree push --prefix public origin gh-pages


Если у кого-нибудь будут проекты, которые вы хотите выложить в репозиторий сообщества – пишите. Создам репозиторий и поделюсь доступом.

Web-технологии

548 постов5.8K подписчиков

Правила сообщества

1. Не оскорблять других пользователей

2. Не пытаться продвигать свои услуги под видом тематических постов

3. Не заниматься рекламой

4. Никакой табличной верстки

5. Тег сообщества(не обязателен) pikaweb

0
Автор поста оценил этот комментарий

Почему less, а не sass?

Зачем OpenServer? Где livereload? Почему не используешь плагин для оптимизации изображений?

Чем less-plugin-autoprefix отличается от gulp-autoprefixier?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

1. less и scss сопостовимы по возможностям. Точнее scss несколько мощнее, но для данной задачи принципиальной разницы не будет. Мне так привычней, поэтому использовал его.


2. Openserver я использую как локальный сервер. Давно им пользуюсь, удобно стрктурированны прошлые проекты. Для данной задачи он действительно не обязателен. Можно конечно обойтись сервером из npm.


3. На gulp перешел недавно, livereload еще не использовал. Судя по тому, что о нем читал - удобно.


4. Изображения пожал на этапе нарезки макета при помощи FileOptimizer. Какой из плагинов под gulp рекомендуете?


5. less-plugin-autoprefixer - это плагин для gulp-less. Выбрал его т.к. ориентировался на список плагинов с сайта less http://lesscss.org/usage/#plugins


Если есть рекомендации, как улучшить верстку или настройки - с удовольствием почитаю. Особенно если с пояснениями о преимуществах другого подхода.

показать ответы
0
Автор поста оценил этот комментарий
Gulp-min-css не рекомендую использовать.
У него есть один баг - если в имени шрифта есть пробел, то это имя должно быть в скобках, а плагин удаляет эти скобки и шрифт становится недоступен.
Рекомендую использовать gulp-csso
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Не знал о баге, спасибо.

показать ответы
0
DELETED
Автор поста оценил этот комментарий

Не знаю, вы еще на пикабу или нет, но подскажите, вашему посту уже 3 года, вы изменили подход к верстке?
и реально ли облегчает все вышеописанное в верстке в сравнении с обычными методами (brackets html+css3) без всяких там гитхабов и т.д.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ответ конечно не актуален, но я только увидел вопрос.)

0
DELETED
Автор поста оценил этот комментарий

Не знаю, вы еще на пикабу или нет, но подскажите, вашему посту уже 3 года, вы изменили подход к верстке?
и реально ли облегчает все вышеописанное в верстке в сравнении с обычными методами (brackets html+css3) без всяких там гитхабов и т.д.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Gulp давно не использовал, все вебпаком пакую.

0
DELETED
Автор поста оценил этот комментарий

Не знаю, вы еще на пикабу или нет, но подскажите, вашему посту уже 3 года, вы изменили подход к верстке?
и реально ли облегчает все вышеописанное в верстке в сравнении с обычными методами (brackets html+css3) без всяких там гитхабов и т.д.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

У меня за годы многое поменялось в подходах. Сейчас в основном с React работаю и там свои варианты подходов. Если приходится верстать что-то вроде лендинга, то использую нечто БЭМ-подобное с отступлениями от него там где удобно.

0
Автор поста оценил этот комментарий

а вы можете рассмотреть вариант побыть тьютором?
на один макет средней сложности, помочь с флексами и js.
если да, то как можно связаться, уточнить условия и прочие подробности?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Я не против побыть тьютором, у меня уже есть опыт в этом. Оставьте свой e-mail/skype/vk или любой другой контакт и я вам напишу.

показать ответы
0
Автор поста оценил этот комментарий

Большое спасибо за пример.
А есть ли что-то еще на флексах с БЭМ, less, gulp и psd макетом? Аналогичное, но более сложное. Возможно с использованием flex-grow/flex-shrink.
Если да, выложите на гитхаб пожалуйста, буду очень благодарен.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

На днях думал перевести и выложить перевод этой статьи:

http://joren.co/flex-grow-9999-hack/


Хороший хак по flex.


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

показать ответы
0
Автор поста оценил этот комментарий
Было это примерно месяца три назад и возможно уже исправили. Но в любом случае мне кажется csso понадежней будет, так как там хотябы яндекс его пилит.
PS. Если надумаешь добавить к своей сборке минификацию html (примерно на 20 процентов уменьшает размер файла), то могу подсказать плагин и настройки (один адекватный минификатор только нашел, и то с багами, но их можно обойти если некоторые настройки поменять)
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ну вот и тема для следующего поста. Как будет время, проверю исправили ли они косяк со шрифтами и сравню сжатие разными минификаторами.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества