Сайт студии интерьерного дизайна

Сайт студии интерьерного дизайна

http://bogdanovadesign.ru

19.10.2018

верстка Bootstrap SCSS JS Gulp SVG GIMP

Задача

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

Макет сайта в Photoshop

Были подготовлены прототипы, которые также показывались заказчику. Например, для галереи.

Прототип галереи

Разработка

Для сетки был выбран уже привычный Bootstrap 4. Однако, в начале работы столкнулся с известной особенностью, когда 12-ти колоночный макет в photoshop, подготовленный дизайнером, не совпадает с колонками в бутстрапе. Дело в том, что в Bootstrap по умолчанию расстояние между колонками слева и справа по 15px, а в макетах 12px. Об этом можно подробнее прочитать в статье. Так как дизайнером было сделано достаточно работы и все макеты были уже почти утверждены, я поправил стилями сетку, задав нужные отступы и ширину контейнера с информацией.

Изначально все стили описывались языком SCSS, который легко транслируется в CSS ruby-программой.

scss --no-cache --update scss/style.scss:css/style.min.css --style compressed

Для сжатия js скриптов использовался uglifyjs.

npm install uglify-js -g
uglifyjs --compress --mangle -o "js/scripts.min.js" -- js/scripts.js 

В начале работа велась над главной страницей (index.html). При верстке остальных страниц стало ясно, что повторяющиеся куски кода (шапка, подвал, меню, блок с заявкой и т.п.) должны быть в отдельных файлах, и для упрощения разработки решил попробовать использовать в этот раз Gulp. Gulp — это таск-менеджер для автоматического выполнения часто используемых задач, написанный на языке JavaScript.

npm install --save-dev gulp

Для добавления на страницу часто используемого блока теперь просто используем директиву include:

  </div>
</div>

@@include('../includes/_contacts.html')			
		
        </main>           
            
@@include('../includes/_footer.html')
                        
        </div>

Все таски описываются в файле gulpfile.js. Задача сборки (build) заполняет страницы необходимыми блоками и перекладывает их в нужные директории. Задача запуска (connect) просто стартует локальный сервер.

В итоге gulpfile.js с двумя тасками стал выглядеть следующим образом:

var gulp = require("gulp");
var fileinclude = require('gulp-file-include');
var connect = require('gulp-connect');

gulp.task('build', function() {
  gulp.src(['_pages/gallery.html', 
            '_pages/about.html', 
            '_pages/redevelopment.html',
            '_pages/supervision.html',
            '_pages/furnishing.html',
            '_pages/design.html',
            '_pages/planning_solution.html'])
    .pipe(fileinclude({
      prefix: '@@',
      basepath: '@file'
    }))
    .pipe(gulp.dest('./pages/'));   

    gulp.src(['_pages/index.html'])
    .pipe(fileinclude({
      prefix: '@@',
      basepath: '@file'
    }))
    .pipe(gulp.dest('./'));
});

gulp.task('connect', function() {
  connect.server({
    root: '.',
    livereload: true
  })
});

Конечно, все это делалось в ограниченные сроки, поэтому в дальнейшем для разработки статических сайтов я буду писать более универсальные таски под gulp, которые будут сразу транслировать и минимизировать стили / скрипты, а может быть, попробую статические генераторы, например, jekyll.