gulp+ejs+sass …これは最早テンプレといっても過言ではない…( ˘ω˘ )
想定するディレクトリ構成
├── public
│ ├── css
│ │ └── common.css
│ ├── images
│ │ ├── global-nav
│ │ │ ├── about.png
│ │ │ ├── about_active.png
│ │ │ ├── news.png
│ │ │ ├── news_active.png
│ │ │ ├── top.png
│ │ │ └── top_active.png
│ │ └── sprite
│ │ └── global-nav-ahoahogehoge.png //生成されたスプライトシート
│ └── index.html
├── src
│ ├── component
│ │ └── _global-nav.scss
│ ├── scss
│ │ └── common.scss
│ └── index.ejs
CSS(SCSS)
@import "compass/css3"; @import "compass/utilities/sprites"; $gnav-sprite: sprite-map('global-nav/*.png'); #global-nav { @include display-flex; @include flex-direction(row); @include justify-content(space-between); @include align-items(center); & > a { position: relative; display: block; color: rgba(0,0,0,0); background-image: $gnav-sprite; @include sprite-dimensions($gnav-sprite, 'top'); margin: 0; } @each $n in about, news, top { .#{$n} { @include sprite-background-position($gnav-sprite, $n); @if $n == character { @include sprite-dimensions($gnav-sprite, $n); } &.current { @include sprite-background-position($gnav-sprite, '#{$n}_active'); } } } }
HTML(EJS)
index.ejs
<%- include('../component/_global-nav', {current: 'top'}) %>
_global-nav.ejs
<nav id="global-nav"> <% ['top', 'news', 'about'].forEach(function(nav) { %> <a href="#" class="nav--<%= nav %><% if(current == nav){ %> nav--current<% } %>"><%= nav.toUpperCase() %></a> <% }) %> </nav>
Gulp
var gulp = require('gulp'); var compass = require('gulp-compass'); var ejs = require("gulp-ejs"); gulp.task('compass', () => { gulp.src([ 'src/scss/**/*.scss' ], { base: 'src/scss'}) .pipe(compass({ environment: 'production', css: 'public/css', sass: 'src/scss', image: 'public/images', generated_images_path: 'public/images/sprite' })) .pipe(gulp.dest('public/css')); }); gulp.task("ejs", function() { return gulp.src( ["src/**/*.ejs",'!' + "src/**/_*.ejs"], {base: 'src'} ) .pipe(ejs(null, {"ext": ".html"})) .pipe(gulp.dest("public")) }); gulp.task('build', ['compass', 'ejs']);