Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

58
Advanced Front End Architecture in D8: Sass, Gulp, and living style guides in real projects. Aidan Foster - Foster Interactive - @nteractive

Transcript of Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Page 1: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Advanced Front End Architecture in D8: Sass, Gulp, and living style guides in real projects.

Aidan Foster - Foster Interactive - @finteractive

Page 2: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

AIDAN FOSTER - FRONT END ARCHITECT

Sass T.O

meetup.com/Sass-Toronto/meetup.com/drupalTO/ drupalnorth.org

FOSTERINTERACTIVE.COM

Page 3: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides
Page 4: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides
Page 5: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides
Page 6: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

MAIN-SPRING.IO

Page 7: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Main Spring - Front End Tool Kit!

"

Sass / CSS Architecture

#

Gulp / Node Tasks Automate Stuff

$

Living Style Guide

Page 8: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Main Spring - Front End Tool Kit!

Page 9: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

By Rube Goldberg [Public domain], via Wikimedia Commons

Main Spring - Front End Tool Kit!

Page 10: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Installing: Create New Theme based on Stable !

drupalconsole.com

$ drupal generate:theme --base-theme stable

Page 11: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Installing: Extract Zip to your theme!

Page 12: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Installing: Extract Zip to your theme!

$ cd /path-to/my-theme

$ npm install

$ gulp bower

Update /gulp.js/config.js

Page 13: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Task Automation: Setup#

gulp.js/config.js

Page 14: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Task Automation: Gulp / Node Modules#

gulp.js (not much here)gulp.js/config.js (settings)gulp.js/tasks/* (everything here)

Page 15: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Bower Task: Bower Install ( JS / Sass libraries)#

bower.json

%

bower install

/bower_components

% %

% %

JS copied

/js/vendor

% %

% %

minified copy

*.js.min

& &

& &

$ gulp bower

Page 16: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Images Task: Optimize Images (Lossless)#

$ gulp images

compress File Size Nag

/img-src'

( (

( (

/img'

( (

( (

Page 17: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

<SASS LINT> ME

SassLint Task: The Sass Coding Convention Enforcer#

Page 18: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

SassLint Task: The Sass Coding Convention Enforcer#

)*

All your team use the same customized “rules” for Sass Code

Page 19: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

SassLint Task: The Sass Coding Convention Enforcer#

$ gulp SassLint

Page 20: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

JsLint Task: #

/js/*.js'

' '

+ + filter

Out/js/vendor'

*.js.min

& &

JS Lint Nags

$ gulp jsLint

Page 21: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

styles.css

SASS

Coder - Friendly, Bite-sized Sass “partials”

Compiling with LibSass"

Page 22: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

CSS Task: Compile Scss into CSS#

$gulp css:dev

SCSS Lint

Compile CSS

Vendor Prefix

Source Maps

File Size Nag

/scss/*.scss'

' '

+ + %

style.css

Page 23: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

http://webdesign.tutsplus.com/articles/manipulating-svg-icons-with-simple-css--webdesign-15694

Colour Controlled by CSSSingle file for all variations

SVG Icons - Change Colour w/ CSS,

Page 24: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

<a class="btn--icon" href="#"> <svg> <use xlink:href=“/svg/sprite-social.svg#facebook"></use> </svg></a><a class="btn--icon" href="#"> <svg> <use xlink:href=“/svg/sprite-social.svg#twitter"></use> </svg></a>

https://github.com/fosterinteractive/SassTO/tree/master/SVG-icons

SVG Icons - Sprites for performance,

Page 25: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

SvgSprite Task: Optimize & Sprite Svg’s (Typically Icons)#

$ gulp svgSpritehttps://github.com/fosterinteractive/mainspring/blob/master/docs/svg.md

De-color & Minify

/svg-src/my-sprite/*.svg'

%%%%

DeleteOutput

/svg/*'

/svg/my-sprite/*.svg'

%%%%

Page 26: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

SvgSprite Task: Optimize & Sprite Svg’s (Typically Icons)#

$ gulp svgSpritehttps://github.com/fosterinteractive/mainspring/blob/master/docs/svg.md

De-color & Minify

/svg-src/my-sprite/*.svg'

/svg/my-sprite/*.svg'

%%%%

Create Sprite %

/svg/my-sprite.svg

Page 27: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

BrowserSync.io - Live Updates across devices"

Page 28: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

$ gulp watch

Watch Task#

Style Guide

SCSS Lint

Compile CSS

Refresh Browsers

%any-file.scss

on Save

Page 29: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

SMACSS Scalable and Modular Architecture for CSS (http://smacss.com/)

BEM Block - Element - Modifier (http://bem.info)

Drupal 8 CSS Coding Standards https://www.drupal.org/coding-standards/css/architecture

CSS Naming Conventions"

Page 30: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Predictable Reusable Maintainable Scalable

Page 31: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/

.block {} /* Let’s use “component” in Drupal */

.block__element {}

.block--modifier {}

.site-search {} /* Component */

.site-search__field {} /* Element */

.site-search--full {} /* Modifier */

CSS Naming Conventions: Drupal 8 CSS Architecture"

Page 32: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

CSS Naming Conventions: Drupal 8 CSS Architecture"

' /scss/globals

' /scss/components

' /scss/layouts

' /scss/utility

' /scss/vendor

http://csswizardry.com/2015/03/more-transparent-ui-code-with-namespaces/

Page 33: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

CSS Naming Conventions: Drupal 8 CSS Architecture"

' /scss/globals

' /scss/components

' /scss/layouts

' /scss/utility

' /scss/vendor

http://csswizardry.com/2015/03/more-transparent-ui-code-with-namespaces/

.g-type__h1

.g_type--small

.g_table

.g_svg

Page 34: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

CSS Naming Conventions: Drupal 8 CSS Architecture"

' /scss/globals

' /scss/components

' /scss/layouts

' /scss/utility

' /scss/vendor

http://csswizardry.com/2015/03/more-transparent-ui-code-with-namespaces/

.c-btn

.c-btn--small

.c-card

.c-accordion

.c-menu

Page 35: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

CSS Naming Conventions: Drupal 8 CSS Architecture"

' /scss/globals

' /scss/components

' /scss/layouts

' /scss/utility

' /scss/vendor

http://csswizardry.com/2015/03/more-transparent-ui-code-with-namespaces/

.l-page

.l-header

.l-2col

.l-4col

Page 36: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

CSS Naming Conventions: Drupal 8 CSS Architecture"

' /scss/globals

' /scss/components

' /scss/layouts

' /scss/utility

' /scss/vendor

http://csswizardry.com/2015/03/more-transparent-ui-code-with-namespaces/

.u-clearfix

.u-text-hide

.u-reset-list

Page 37: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

CSS Naming Conventions: Drupal 8 CSS Architecture"

' /scss/globals

' /scss/components

' /scss/layouts

' /scss/utility

' /scss/vendor

http://csswizardry.com/2015/03/more-transparent-ui-code-with-namespaces/

(random CSS 3rdparty libraries)

Page 38: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Main Menu Component

Masthead Component

Action Component

Components"

Page 39: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Components"

%

%

%

'

'

'

%

_c-nav-main.scss

_c-masthead.scss

_c-action.scss

_c-action--vertical.scss

Page 40: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Layouts: Position / Containers Components"

Page 41: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides
Page 42: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides
Page 43: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides
Page 44: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides
Page 45: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides
Page 46: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

' /scss/globals

' /scss/components

' /scss/layouts

' /scss/utility

' /scss/vendor

Page 47: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

http://csswizardry.com/2015/03/more-transparent-ui-code-with-namespaces/

Page 48: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

styles.css

SASSstyleguide

'

'

'

'

'

'

' '

'

'

' '

style guide website

Page 49: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Living Style Guide - SC5$

https://github.com/SC5/sc5-styleguide

Page 50: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Living Style Guide - SC5$

DEMO.MAIN-SPRING.IO

Page 51: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides
Page 52: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides
Page 53: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides
Page 54: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Living Style Guide - KSS Notation $

// Default Buttons//// .c-btn - Default// .c-btn:hover - Default Hover// .c-btn--blue - Blue// .c-btn--blue:hover - Blue Hover// .c-btn--thin - Thin// .c-btn--thin:hover - Thin Hover// .c-btn--thin-blue - Thin & Blue// .c-btn--thin-blue:hover - Thin & Blue Hover//// markup:// <a href="#" class="{$modifiers}">{$modifiers}</a>//// Styleguide 2.1.1

Page 55: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Living Style Guide - SC5$

// Accordion - Open State//// .c-accordion__label - Default.// :hover - Hover state.//// Markup: _c-accordion--is-open.html//// Styleguide 2.7.1

// Accordion - Multiple Accordions//// Markup:// <sg-insert>2.7.2</sg-insert>// <sg-insert>2.7.1</sg-insert>// <sg-insert>2.7.2</sg-insert>//// Styleguide 2.7.3

External HTML code Inserting Existing Components

Page 56: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

It’s not easy to setup all these tools

-Team

Velocity

.Fewer Bugs

in QA

#Optimized

Performance

/Recycleable

Page 57: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

MAIN-SPRING.IO

Page 58: Advanced Front End Architecture in D8: Sass, Gulp, & Living Style Guides

Add 1 thing into the mix because we all have to start somewhere.

Thank you!

Questions?

@finteractive