Lessons learnt from the FontShop site relaunch

Post on 19-Aug-2014

586 views 8 download

Tags:

description

A presentation I gave at up.front.ug, on July 8th, about our Front End process and learnings while developing the next.fontshop.com.

Transcript of Lessons learnt from the FontShop site relaunch

berlin amsterdam san francisco stuttgart

edenspiekermann_

Lessons from the FontShop site relaunch

UpFront talk

8th July 2014

edenspiekermann_

CSS ARCHITECTURE

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

body {! font-size: 100%;! font-family: Georgia, serif;!}!!.o-chosen-select-box.chosen-container,.m-font-autocomplete{display:inline-block;position:relative;vertical-align:middle}.o-chosen-select-box .chosen-single,.m-font-autocomplete__input{background-color:#f9f8f3;color:#262626;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:4px solid #fff;display:block;cursor:pointer;height:2.5em;line-height:1.25em;padding:0 2.125em;-webkit-transition:background-color 150ms,border-color 150ms;-moz-transition:background-color 150ms,border-color 150ms;!.l-modal__tooltip__pane{z-index:30}.o-error{z-index:10}.o-pulldown-panel__list{z-index:10}.l-tryout-page__canvas{z-index:1}.l-tryout-page__header{z-index:30}.m-tryout-textblock__action{z-index:20}.m-tryout-textblock__editable{z-index:20}.m-tryout-textblock__placeholder{z-index:10}.m-font-autocomplete__dropdown,.o-chosen-select-box{z-index:40}.l-tryout-page__template-links,.l-tryout-page__bgimage-info{z-index:50}.l-tryout-page__meta-links{z-index:10000}.m-tryout-template-links—centered{z-index:10}!!#footer .left-column .article ul.links > li a img {! border-color: #0A0;!}!

CSS Architecture

Scientifically proven fact: a developer’s attention span gets diluted after 34.23 continuous lines of CSS code.*

3

* = Bullshit Researching Institute GmbH, 1999

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture4

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture5

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

_config/!! extends/!! mixins/!! ! _colors.sass!! ! …!! var/!! ! _animations.sass!! ! …!! _z-index.sass!!globals/!! _typography.sass!! …!!objects/!! _o-button.sass!! …!!modules/!! _m-waterfalls.sass!! …!!layouts/!! _l-homepage.sass!! …!!vendor/!! _noone.reads.me.lol.sass!! …!!application.sass

CSS Architecture

Structure. – Vars, mixins under _config ensure consistency. – Globals folder contains non-modular global styles. – Objects folder has the smallest modular units. – Modules are combined Objects. Sometimes not exactly

modular but mapped to content entities. – Layouts contain only layout (duh) information such as

width, height, margin, padding.

6

edenspiekermann_

Douchebag scoreReferencing yourself in your presentation.

+1

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture8

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture9

.m-styles__families__slider__family__rail__node

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture

Good things: – Self explanatory in both HTML & CSS. – Shields object’s scope. !

Bad things: – Can easily get carried away with underlines. – Verbal classes (but you get used to it). !

Things to remember: – Never nest selectors (to ensure specificity == 1). – Always & only, use classes.

10

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture11

117CSS Objects in the project

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture12

edenspiekermann_

The form - functionality paradox

https://www.flickr.com/photos/astrid/2583356797

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture14

1

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture15

2

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture16

3

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture17

Same Functionality ≠ Modularity –Elements that serve the same functionality don’t have

to be the same CSS objects. –Otherwise it’s a game of show, hide, absolute position

elements. –More info: http://www.edenspiekermann.com/blog/

oocss-and-the-pagification-of-modules

1 2

3

Douchebag scoreSorry, did it again!+1

edenspiekermann_

Living Styleguides

Hardboiled Front End Development 10.06.2014edenspiekermann_

CSS Architecture

Requirements-Challenges: –Auto-maintained. No duplicate views in production &

styleguide. –CSS Refactoring at the same time, to normalise objects. !

Advantages: –Nice overview of all your objects. –Enforces good practices. –Enhances developer — designer collaboration. –Helps you scale your project. !

Tool: –https://github.com/kneath/kss

19

Hardboiled Front End Development 10.06.2014edenspiekermann_

gem install kss

CSS Architecture

Setting up KSS. – Install gem.

20

Hardboiled Front End Development 10.06.2014edenspiekermann_

@styleguides = Kss::Parser.new(“/public/css“)!

CSS Architecture

Setting up KSS. – Install gem. – Parse CSS folder into an object.

21

Hardboiled Front End Development 10.06.2014edenspiekermann_

CSS Architecture

Setting up KSS. – Install gem. – Parse CSS folder into an object. – Iterate object in view.

22

- @styleguides.each do |styleguide|! - [...]!

Hardboiled Front End Development 10.06.2014edenspiekermann_

/*!The global button object.!!.button - Primary button.!.button--green - Green variation.!!Styleguide 1.0 Button!*/!!.button {! height: 20px;! text-align: center;! width: 100px;!}!!.button--green {! background-color: green;!}!

CSS Architecture

Setting up KSS. – Install gem. – Parse CSS folder into an object. – Iterate object in view. – Use the magic KSS syntax.

23

edenspiekermann_

http://next.fontshop.com/styleguide/objects

edenspiekermann_

Sass

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture26

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_ 27

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_ 28

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

.o-logo__block--left! +fs-color(secondary, background-color)!

CSS Architecture

Using Sass to create themes: – Too much labor to create theme variations for each

selector. – Created Sass function to do that automatically. !

Problems: – Specificity issues in overriding styles (trying to

convince myself that using “!important” is ok). – Slow compilation times.

29

body.theme--white .o-logo__block--left {! background-color: yellow;!}!body.theme--yellow .o-logo__block--left {! background-color: white;!}!body.theme--black .o-logo__block--left{! background-color: yellow;!}!

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture30

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture31

~12secCSS loading time during development

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture32

~12secCSS loading time during development

On a frickin’ 2.8Ghz, 16GB Ram, SSD Machine.

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

CSS Architecture

Tips: – Helpful to prefix classes (“o-“, “l-“, “m-“), that way you recognize their

type in markup. – Prefix JS hooks with “js-“. That way HTML/CSS restructuring doesn’t

affect javascript functionality. – Put all rushed code in shame.css. Always write reason of inclusion in

comments. – Keep all z-index values in z-index.css and always use increments of 10 or

more.

33

edenspiekermann_

JAVASCRIPT

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript Modules35

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript Modules36

AMD FTW!

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript Modules37

AMD FTW!Module Structure

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript Modules38

AMD FTW!Module Structure r.js wrapper -> .min.js

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript Modules39

AMD FTW!Module Structure r.js wrapper -> .min.js

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript Modules40

AMD FTW!Module Structure r.js wrapper -> .min.js

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript Modules41

AMD FTW!Module Structure r.js wrapper -> .min.js?

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript Modules42

AMD FTW!Module Structure r.js wrapper -> .min.js?

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript Modules43

AMD FTW!Module Structure r.js wrapper -> .min.js?

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript Modules44

AMD FTW!Module Structure r.js wrapper -> .min.jsHAHAHAHA!

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript Modules45

AMD FTW!Module Structure r.js wrapper -> .min.js

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript Modules46

Module Structure r.js wrapper -> .min.js

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript Modules47

Module Structure

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript Modules48

//= require xxx.js //= require_tree /js/JS Modules

Tryout

Site

Buy

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

//= require jquery!!(function (win) {!! var GlobalLikes = {};!! GlobalLikes = Backbone.View.extend({!! initialize: function () {! this.options = _.extend({}, ! this.defaults, this.$el.data());! this.getLikes();! },!! ! ! …! …! …!!! ! ! });!! win.fs.Modules.GlobalLikes = GlobalLikes;!!})(window);!!

Javascript

Working well with Sprockets. Eventually. – Declare dependencies with “//=require xxx”. – Scope everything to window.fs (and pray we don’t ever

need Node’s FS module). – Expose modules to global window.fs.Modules object. – Using bower-rails gem for dependencies.

49

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_

Javascript50

JS Mike = Finally Happy

Lessons from the FontShop site relaunch 08.07.2014edenspiekermann_ 51

FontShop is always looking for new dev talent!

Contact Ivo Gabrowitsch: ivo@fontshop.com. Mention this awesome presentation.

berlin amsterdam san francisco stuttgart

edenspiekermann_

Thank you.

Spiros Martzoukos, Web Developer

tw @martzoukos

T +49 157 84340808

!

s.martzoukos@de.edenspiekermann.com

www.edenspiekermann.com