architektura html, css i javascript - jan kraus

64
HTML, CSS & Javascript Architecture In a little bit bigger projects…

Upload: women-in-technology

Post on 12-Feb-2017

470 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Architektura html, css i javascript - Jan Kraus

HTML, CSS & JavascriptArchitectureIn a little bit bigger projects…

Page 2: Architektura html, css i javascript - Jan Kraus

Jan Kraussenior frontend dev / creativestyle

Page 3: Architektura html, css i javascript - Jan Kraus

Part 1:

● Introduction● Coding guidelines● Servers● Tools & automatization● Starter templates● Responsive web design

Schedule

Part 2:

● Git & team work● Frameworks & libraries● Modular CSS: SMACSS, BEM● Javascript patterns● Coding challenge, Q&A

Page 4: Architektura html, css i javascript - Jan Kraus

A bigger project

● More than one frontend developer○ sometimes more than 1 team

● Multiple & different page types● Long term development goal● Responsive● Pure frontend or framework based solution

Page 5: Architektura html, css i javascript - Jan Kraus

Architecture

● Technology stack (frameworks)● Code organization● Coding guidelines● RWD

○ fluid vs. adaptive○ Mobile first vs. desktop first

● Icons system / images● Performance● Workflow

Page 6: Architektura html, css i javascript - Jan Kraus

Technology stack

● Backend frameworks○ Rails

■ assets pipeline○ Symfony

■ assetic○ Node.js,

■ Express, Meteor, Sails

● Frontend frameworks○ jQuery, Bootstrap,○ Backbone○ Angular, Ember, React

Page 7: Architektura html, css i javascript - Jan Kraus

● Maintain simple & clean structure for your code○ keep your code separated in assets folders

■ javascripts■ css / sass■ images■ fonts■ other stuff

● look for best practices for your framework● organize in modules instead by type

Code organization

Page 8: Architektura html, css i javascript - Jan Kraus

● don’t mix spaces & tabs○ I suggest to configure your editor to indent everything with 2 spaces○ but this is never ending war ;-)○ use good code editor

■ webstorm / phpstorm is quite powerful

● maintain clean & usable code○ comment well○ keep good variable names○ use consistent naming convention

● UTF-8 everywhere○ <div class="♫">

Coding guidelines

Page 9: Architektura html, css i javascript - Jan Kraus

HTML guidelines

● keep the code well formatted● use html5 doctype

○ occasionally check it with W3C validator

● keep all tags lowercase● wrap all attributes in double quotes● try to write semantic html

○ but don’t overdo with html5 semantic tags○ good reference at http://html5doctor.com/

● keep in mind accessibility○ learn about aria tags

Page 10: Architektura html, css i javascript - Jan Kraus

● Keep the code well formatted● Don’t rely on using ID-selectors for styling● Use lowercase-class-names

○ Write semantic class names○ Separate with hyphens○ unless you consider using BEM / SMACSS

● Avoid long selectors○ especially watch out for nesting in sass○ learn & understand how CSS cascade works○ Avoid using !important

CSS guidelines - selectors

Page 11: Architektura html, css i javascript - Jan Kraus

● Use shorthand properties○ padding: 10px 20px;

● don’t overuse -vendor-prefixes too much○ use autoprefixer○ they need to come before standard property

● try to avoid using pixel units everywhere○ learn about rems

● use #hex colors & rgba when wants opacity

CSS guidelines

Page 12: Architektura html, css i javascript - Jan Kraus

CSS guidelines

● keep media-queries close to relevant sections● separate bigger sections with block comments

Page 13: Architektura html, css i javascript - Jan Kraus

SASS guidelines

● avoid nesting selectors○ or try to keep it up to 2-3 levels

■ or really, avoid!

● use sass @imports to organize your css code○ start name of imported partial with underscore

■ _grid.scss, _config.scss○ organize into components, modules, shared etc..

● use variables!○ at least for colors & media-query breakpoints

Page 14: Architektura html, css i javascript - Jan Kraus

Javascript guidelines

● Keep the code well formatted● Make sure you understand basics concepts of Javascript● Use single quotes for strings● Always use expanded blocks syntax

○ if (condition) { }

● Use semicolons;● var camelCase your variable & function names● ModuleNames should start from capital letter

Page 15: Architektura html, css i javascript - Jan Kraus

Javascript guidelines

● Use JSHint or ESLint to catch your errors● Learn couple useful module patterns

○ jQuery plugin○ Revealing module pattern

● Consider using ES6 for new project ;-)

Page 16: Architektura html, css i javascript - Jan Kraus

jQuery guidelines

● Don’t abuse $(selector)○ remember to cache references to object○ keep prefix of your variable with $ to indicate its a jquery object

■ eg. $container = $('.container');

● Consider using custom class as hooks for your events○ $('.js-button-submit')

● When binding events, preffer using .on()○ Avoid anonymous functions for debugging○ Use custom namespace for events○ Use delegation

Page 17: Architektura html, css i javascript - Jan Kraus

jQuery guidelines

● don’t put everything in $.ready function● use $.ajax instead of $.get, $.post methods● use Promise syntax for handling responses

○ $.ajax({ … })■ .done(successHandler)■ .fail(errorHandler)

● don’t use jQuery animations● avoid CSS changes via jQuery

○ prefer class toggling

Page 18: Architektura html, css i javascript - Jan Kraus

jQuery guidelines

● use jquery 2.x○ unless IE8

● load it from external CDN for caching benefits● don’t use too many jQuery plugins

○ check size○ check github page for issues

● think twice before using jQuery UI● bootstrap JS relies on jquery

Page 19: Architektura html, css i javascript - Jan Kraus

jQuery example

// IIFE - Immediately Invoked Function Expression(function($, window, document) { // The $ is now locally scoped

// Listen for the jQuery ready event on the document $(function() { // The DOM is ready! });

// The rest of the code goes here!

}(window.jQuery, window, document));// The global jQuery object is passed as a parameter

Page 20: Architektura html, css i javascript - Jan Kraus

● Working with file:// protocol is unreliable. ● Use web server

○ Apache2○ PHP○ Node.js○ Ruby/Python

● Vagrant● MAMP / WAMP

○ I don’t recommend

Serving files locally

Page 21: Architektura html, css i javascript - Jan Kraus

Apache2

● Most popular server● Already available in Mac OS X & Ubuntu

○ Need little bit of tweaking, config breaks after update

● I guess also possible on Windows…● Need to setup virtual hosts if you have multiple sites

○ I prefer to do this anyway

Page 22: Architektura html, css i javascript - Jan Kraus

● Easy to use● Available from PHP 5.4

○ Available in OS X (5.6), Easy to install on Ubuntu (5.5)■ apt-get install php5

○ I guess also possible on windows…

● php -S localhost:8080

PHP built-in server

Page 23: Architektura html, css i javascript - Jan Kraus

● Useful when you’re building Webapp / SPA● Just one gulp plugin

○ npm install --save-dev gulp-connect

● Not so easy for dynamic templates

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

connect.server();

});

Node.js / gulp-connect

Page 24: Architektura html, css i javascript - Jan Kraus

● Full OS using virtualization● Every developer have the same environment● Powerful configuration

○ You can keep that in git○ Requires some knowledge

● Useful for framework setup with lots of dependencies● Slow and problematic on windows

Vagrant

Page 25: Architektura html, css i javascript - Jan Kraus

Automatization

● Compile & minify SASS● Concatenate / minify javascript files● Optimize images● Generate sprites● Code linting● Autoreload● Deployments

Page 26: Architektura html, css i javascript - Jan Kraus

Task runners

There are many ways to do it

● Grunt● Gulp● node.js● Shell

Page 27: Architektura html, css i javascript - Jan Kraus

Grunt

The JavaScript Task Runner

● Configuration…● Lots of plugins ● Operates on files● But…

○ Seems like not updated lately○ Community shifted to gulp

Page 28: Architektura html, css i javascript - Jan Kraus

● Install grunt CLI○ npm install -g grunt-cli

● Install local plugins○ npm install grunt-contrib-uglify --save-dev

● Configure○ Gruntfile.js

● Run: ○ grunt

Grunt

Page 29: Architektura html, css i javascript - Jan Kraus

Grunt - package.json

{

"name": "my-project-name",

"version": "0.1.0",

"devDependencies": {

"grunt": "~0.4.5",

"grunt-contrib-uglify": "~0.5.0"

}

}

Page 30: Architektura html, css i javascript - Jan Kraus

module.exports = function(grunt) {

grunt.initConfig({

uglify: {

build: {

files: [{

cwd: 'src/js',

src: '**/*.js',

dest: 'build/bundle.min.js'

}]

}

}

});

grunt.loadNpmTasks('grunt-contrib-uglify');

grunt.registerTask('default', ['uglify']);

};

Grunt - Gruntfile.js

Page 31: Architektura html, css i javascript - Jan Kraus

Automate and enhance your workflow

● Gulp is the new grunt● Active community● Simple configuration● Organized around streams● Faster & less config

gulp.js

Page 32: Architektura html, css i javascript - Jan Kraus

gulp.js

● Install gulp○ npm install --global gulp○ npm install --save-dev gulp

● Install plugins○ npm install --save-dev gulp-uglify

● Configure○ gulpfile.js

● Run:○ gulp

Page 33: Architektura html, css i javascript - Jan Kraus

gulp - gulpfile.js

var gulp = require('gulp');

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

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

return gulp.src(src/**/*.js')

.pipe(uglify())

.pipe(gulp.dest('dist'));

});

gulp.task('default', ['uglify']);

Page 34: Architektura html, css i javascript - Jan Kraus

npm & node.js packages

npm is the package manager for node.js

● pure node.js packages● simple setup, without much of configuration● easy to maintain

Page 35: Architektura html, css i javascript - Jan Kraus

npm

● Install package○ npm install jshint --save-dev

● Configure○ package.json

● Run○ npm run script name

Page 36: Architektura html, css i javascript - Jan Kraus

npm - package.json

"devDependencies": {

"jshint": "latest",

},

"scripts": {

"lint": "jshint **.js"

}

Page 37: Architektura html, css i javascript - Jan Kraus

A package manager for the web

● manage & download external dependencies● fetch and update frontend libraries

Bower

Page 38: Architektura html, css i javascript - Jan Kraus

● Install bower○ npm install -g bower

● Configure○ .bowerrc

■ {"directory": "assets/vendors/"}

● Install○ bower install jquery --save-dev

Bower

Page 39: Architektura html, css i javascript - Jan Kraus

{

"name": "Sample Project",

"devDependencies": {

"jquery": "~2.1.4"

}

}

Bower - bower.json

Page 40: Architektura html, css i javascript - Jan Kraus

Semantic versioning

Semantic versioning: MAJOR.MINOR.PATCH

● Patch releases: 1.0 or 1.0.x or ~1.0.4● Minor releases: 1 or 1.x or ^1.0.4● Major releases: * or x

Page 41: Architektura html, css i javascript - Jan Kraus

Getting started

Take something as your starting point:

● Web Starter Kit from Google● HTML5 Boilerplate● Bootstrap● yeoman generator

Page 42: Architektura html, css i javascript - Jan Kraus

Web Starter Kit is an easy way to start a new project.

● build process, ● boilerplate HTML ● styles (material design)

Web Starter Kit from Google

Page 43: Architektura html, css i javascript - Jan Kraus

HTML5 Boilerplate

The web’s most popular front-end template

● HTML Page Structure● Normalize.css● Modernizr.js● jQuery from CDN with local fallback

Page 44: Architektura html, css i javascript - Jan Kraus

Bootstrap from Twitter

Bootstrap is the most popular HTML, CSS, and JS framework for developing responsive, mobile first projects on the web.

● Not really a boilerplate● But you can use basic template● http://getbootstrap.com/getting-started/#template

Page 45: Architektura html, css i javascript - Jan Kraus

● Start using git if you haven’t already started○ Github - free for open source projects○ Bitbucket - unlimited private repositories, limited users○ Gitlab - self hosted github UI clone

Git

Page 46: Architektura html, css i javascript - Jan Kraus

Git - commits convention

[FEATURE] Implements lazy loading for products carousel (max 70 chars)

Adds JS module to loads products for carousel using AJAX triggered after document

ready. Implementation is using sttic JSON as example.

- JS module to load products

- CSS for loading animation

- Example of JSON for products

Ref: JIRA-1392

Page 47: Architektura html, css i javascript - Jan Kraus

● Basic○ only dev / master

● Feature branches○ use pull / merge requests for code review

● Gitflow○ when working on multiple releases & feature branches

Git - Branching model

Page 48: Architektura html, css i javascript - Jan Kraus

● git status○ read what’s there ;-)

● git reset○ git reset○ git reset head --hard○ git reset origin/master --force

● git revert○ git revert commit-sha○ creates new commit

Git - Command line

Page 49: Architektura html, css i javascript - Jan Kraus

● git cherry-pick○ git cherry-pick commit-sha○ creates new commit

● git rebase○ git rebase -i head~2○ is rewriting history

● git merge○ git merge your-branch-name○ resolve conflicts correctly

Git - Command line

Page 50: Architektura html, css i javascript - Jan Kraus

● git pull○ git fetch origin + git merge○ git pull --rebase

■ create cleaner history

● git stash○ git stash○ git stash pop

● git log○ git lg ○ git lg | grep JIRA-1234

Git - Command line

Page 51: Architektura html, css i javascript - Jan Kraus

● Libs○ jQuery○ Bootstrap○ Modernizr

● Frameworks○ Backbone○ Angular, Angular2○ Ember○ React

Framework & tools

Page 52: Architektura html, css i javascript - Jan Kraus

jQuery

● Site enhancements○ sliders○ galleries○ AJAX○ not much business logic

● DOM manipulation● Simple custom event system● Form validation

○ parsley.js

Page 53: Architektura html, css i javascript - Jan Kraus

Bootstrap

● UI library for the web● SCSS / Less components

○ Include only what you need with sass imports○ You can use SASS @extend

● Same for JS○ you can include only what you need

● Useful○ grid○ forms○ modal

Page 54: Architektura html, css i javascript - Jan Kraus

Modernizr

● Feature detection for browsers○ append CSS classes to html○ Modernizr JS object for testing properties

● Generate custom build● Does not have to be included in the head

Page 55: Architektura html, css i javascript - Jan Kraus

Backbone.js

● Simple structure for web application○ Models, Collections, Views, Routers○ Less abstraction○ Simple, still popula

● http://addyosmani.github.io/backbone-fundamentals/

Page 56: Architektura html, css i javascript - Jan Kraus

Angular

● The “enterprise” frameworks● Most popular kinda MVC framework● Easy 2 way binding● Performance issues● Angular 2 on the way

Page 57: Architektura html, css i javascript - Jan Kraus

React

● Library from Facebook● High performance

○ Virtual DOM

● Organized around components & state

Page 58: Architektura html, css i javascript - Jan Kraus

Useful libraries

● Moment.js● History.js● Respond.js

○ not really usefull

● Typeahead● Parsley.js

Page 59: Architektura html, css i javascript - Jan Kraus

RWD - Responsive web design

● Mobile first approach● Stop thinking in pixels

○ Multiple devices, screens, widths...

● Progressive enhancement / graceful degradation● SVG & retina images● Build your site with performance in mind● Read often:

○ http://www.smashingmagazine.com/○ https://css-tricks.com/

Page 60: Architektura html, css i javascript - Jan Kraus

Modular CSS

● Reusable components● Naming convention for CSS classes

○ SMACSS○ BEM○ OOCSS

Page 61: Architektura html, css i javascript - Jan Kraus

Scalable & Modular Architecture for CSS

● Simple naming conventions● Architecture & patterns for organizing rules● Free book:

○ https://smacss.com/book/

SMACSS

Page 62: Architektura html, css i javascript - Jan Kraus

BEM

BEM – Block Element Modifier is a methodology, that helps you to achieve reusable components and code sharing in the front-end

● Naming conventions● Independent modular blocks● Flexible and allows for customization●

Page 64: Architektura html, css i javascript - Jan Kraus

Thank you!