Slide 1

Slide 1 text

Desvendando os limites do universo front-end: um panorama de ferramentas e técnicas

Slide 2

Slide 2 text

Buenas?!

Slide 3

Slide 3 text

Jean Carlo Emer artesão da internet github.com/jcemer twitter.com/jcemer speakerdeck.com/jcemer

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Atenção! O importante é que seu produto funcione e seja fácil de manter

Slide 7

Slide 7 text

Mas... Se você acha que pode ir além no seu fluxo de desenvolvimento, esta palestra é para você!

Slide 8

Slide 8 text

Conte-me mais! Quero saber como começo meu projeto!

Slide 9

Slide 9 text

Boilerplates

Slide 10

Slide 10 text

Base sólida e reusável para seu projeto entalhada com boas práticas

Slide 11

Slide 11 text

Boa organização de arquivos Estrutura inicial de HTML, CSS e JS Robots.txt e humans.txt Favicon e apple icons HTML5 Boilerplate http:/ /html5boilerplate.com

Slide 12

Slide 12 text

HTML Define viewport para projetos responsivos

Slide 13

Slide 13 text

Viewport para site não responsivo HTML

Slide 14

Slide 14 text

Inclui Modernizr com todas as detecções apenas html5shiv (IE8,7) ou o Modernizr customizado incluíndo html5shiv HTML

Slide 15

Slide 15 text

Página de erro 404 UTF-8 para CSS e JS Entrega de arquivos compactados http://gzipwtf.com Define expiração dos arquivos Apache

Slide 16

Slide 16 text

Na versão 2.0.0 mudou de Reset.css para Normalize.css CSS

Slide 17

Slide 17 text

/*! normalize.css v2.1.2 | MIT License | git.io /** * Correct `block` display not defined in IE 8/ */ article, aside, details, figcaption, figure, fo header, hgroup, main, nav, section, summary { display: block; } /** * Correct `inline-block` display not defined i */ audio, canvas, video { display: inline-block; } /** * Prevent modern browsers from displaying `aud * Remove excess height in iOS 5 devices. */ audio:not([controls]) { display: none; height: 0; } /** * Address styling not present in IE 8/9. */ Normalize Institui uma aparência padrão para cada elemento Corrige alguns bugs comuns normalize.css http:/ /necolas.github.io/normalize.css

Slide 18

Slide 18 text

/** * Eric Meyer's Reset CSS v2.0 */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; Reset Remove toda a aparência Elementos de título, parágrafo e lista com mesma aparência CSS Tools: Reset CSS http:/ /meyerweb.com/eric/tools/ css/reset

Slide 19

Slide 19 text

X reset normalize

Slide 20

Slide 20 text

Sophisto Boilerplate Browsers modernos (IE9+) Stylus: pré processador de CSS Rye.js: biblioteca JS leve substituta da jQuery Build tool e script de deploy Sophisto Boilerplate https:/ /github.com/grifo/sophisto-boilerplate

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

Aparência inicial Diversas APIs Suporte offline Firefox OS Boilerplate App Firefox OS Boilerplate App http:/ /github.com/robnyman/Firefox-OS-Boilerplate-App

Slide 23

Slide 23 text

Hmmm... Mas ainda não abordamos aparência e como construir componentes!

Slide 24

Slide 24 text

Frameworks de CSS

Slide 25

Slide 25 text

Guia de estilo com componentes reusáveis e configuráveis para seu projeto

Slide 26

Slide 26 text

Cuidado! Não existe uma maneira de testar folhas de estilo

Slide 27

Slide 27 text

body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; font-size: 14px; direction: ltr; } Foundation 3.0 Divs ou tds não herdam o tamanho da fonte de seus elementos pais

Slide 28

Slide 28 text

Pure CSS Seu formulário deve sempre terminar com um radio

Slide 29

Slide 29 text

Cuidado! Usar frameworks engessa a marcação a sua maneira

Slide 30

Slide 30 text

Este é um exemplo bem interessante daquilo que não devemos fazer.

Isto é consenso?

Slide 31

Slide 31 text

Ótimo, muito bom!
E o quanto isto é diferente
daquilo?
Twitter Bootstrap 2.3 Marcação usando classes nomeadas pelo framework

Slide 32

Slide 32 text

CSS to the heaven Tags e classes devem se referir ao seu conteúdo e não a sua aparência Seletores devem ser o mais globais possíveis ou função, caso esteja projetando componentes

Slide 33

Slide 33 text

Legal E agora como eu reuso e organizo meu código CSS?

Slide 34

Slide 34 text

CSS on Steroids

Slide 35

Slide 35 text

Pré-processadores // Variables $site-width: 960px; $color-primary: red; $color-secondary: #EEE; // Code .container { background: lighten($color-secondary, 10); max-width: $site-width; margin: 0 auto; @include border-radius(5px); } // Mixins @mixin border-radius($radius) { -webkit-border-radius: $radius; -moz-border-radius: $radius; border-radius: $radius; } .box { p { margin-bottom: 1em; } a { font-weight: bold; &:hover { background: $color-secondary; } } }

Slide 36

Slide 36 text

Pré-processadores // CSS Code .container { background: white; max-width: 960px; margin: 0 auto; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .box p { margin-bottom: 1em; } .box a { font-weight: bold; } .box a:hover { background: #eeeeee; } // Code .container { background: lighten($color-secondary, 10); max-width: $site-width; margin: 0 auto; @include border-radius(5px); } .box { p { margin-bottom: 1em; } a { font-weight: bold; &:hover { background: $color-secondary; } } }

Slide 37

Slide 37 text

Pré-processadores Linguagem para adicionar açucar sintático não nativos ao CSS Resultam em CSS nos padrões das especificações Nova camada que precisa ser trans- compilada

Slide 38

Slide 38 text

@base: #f938ab; .box-shadow(@style, @c) when (iscolor(@c)) { box-shadow: @style @c; -webkit-box-shadow: @style @c; -moz-box-shadow: @style @c; } .box-shadow(@style, @alpha: 50%) when (isnumbe .box-shadow(@style, rgba(0, 0, 0, @alpha)); } .box { color: saturate(@base, 5%); border-color: lighten(@base, 30%); div { .box-shadow(0 0 5px, 30%) } } @the-border: 1px; @base-color: #111; @red: #842210; #header { color: (@base-color * 3); border-left: @the-border; border-right: (@the-border * 2); } #footer { color: (@base-color + #003300); border-color: desaturate(@red, 10%); } Padrão do Twitter Bootstrap Repetições bastante estranhas e engessadas Mantido por desenvolvedores desconhecidos

Slide 39

Slide 39 text

border-radius() -webkit-border-radius: arguments -moz-border-radius: arguments border-radius: arguments body font: 12px Helvetica, Arial, sans-serif background: linear-gradient(top, white, blac a.button border-radius: 5px @keyframes foo { from { color: black } to { color: white } } button { color: rgba(red, .5) border-radius: bottom 10px; } .nav { fixed: bottom 10px right 5px; } Mixins transparentes Mixins e componentes com Nib Sintaxe bastante livre Muita liberdade causa confusão

Slide 40

Slide 40 text

$blue: #3bbfce $margin: 16px .content-navigation border-color: $blue color: darken($blue, 9%) .border padding: $margin / 2 margin: $margin / 2 border-color: $blue @mixin table-base th text-align: center font-weight: bold td, th padding: 2px @mixin left($dist) float: left margin-left: $dist #data @include left(10px) @include table-base Projeto maduro Bibliotecas poderosas como Compass e Bourbon Duas sintaxes que não podem se misturar Sintaxe SASS

Slide 41

Slide 41 text

$blue: #3bbfce; $margin: 16px; .content-navigation { border-color: $blue; color: darken($blue, 9%); } .border { padding: $margin / 2; margin: $margin / 2; border-color: $blue; } @mixin table-base() { th { text-align: center; font-weight: bold; } td, th { padding: 2px; } } @mixin left($dist) { float: left; margin-left: $dist; } #data { @include left(10px); @include table-base; } Projeto maduro Bibliotecas poderosas como Compass e Bourbon Duas sintaxes que não podem se misturar Sintaxe SCSS

Slide 42

Slide 42 text

<3 <3 <3

Slide 43

Slide 43 text

Atenção! Não reescreva a árvore de elementos do HTML no CSS

Slide 44

Slide 44 text

CSS Explain http:/ /josh.github.io/css-explain html { body { background: black; section { padding: 20px; p { margin-bottom: 10px; a { color: blue; &:hover { text-decoration: none; } } } } } } html body section p a:hover

Slide 45

Slide 45 text

Organizando o CSS // Libraries @import "nib" @import "settings" @import "helper" // Core @import "core/normalize" @import "core/structure" // Shared @import "shared/header" @import "shared/footer" // Modules @import "modules/grade" @import "modules/map" // Pages @import "pages/home" @import "pages/about"

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

Mixins e helpers são muito úteis para definir grids Grid semântico

Slide 48

Slide 48 text

Grid semântico

Bourbon Neat

Neat é um framework de grid semântico.

Sass e Bourbon são seus requisitos.

.tool { @include outer-container; } http:/ /neat.bourbon.io .tool-title { @include span-columns(3); } .tool-content { @include span-columns(9); }

Slide 49

Slide 49 text

.header { @include outer-container; } .brand { @include span-columns(3); } .menu { @include span-columns(9); } Grid semântico .tool { @include outer-container; } .tool-title { @include span-columns(3); } .tool-content { @include span-columns(9); }

Slide 50

Slide 50 text

.tool { @include outer-container; } .tool-title { @include span-columns(3); } .tool-content { @include span-columns(9); } .header { @include outer-container; } .brand { @include span-columns(3); } .menu { @include span-columns(9); } Grid semântico .brand { display: block; float: left; margin-right: 2.35765%; width: 23.23176%; } .brand:last-child { margin-right: 0; } .tool-title { display: block; float: left; margin-right: 2.35765%; width: 23.23176%; } .tool-title:last-child { margin-right: 0; } .tool-title { @include span-columns(3); } .brand { @include span-columns(3); }

Slide 51

Slide 51 text

Ops?! Agora temos muitas regras de CSS repetidas

Slide 52

Slide 52 text

CSSO body { padding: 0; color: red; } .element { color: blue; color: red; } .element { padding: 0; } input { border: none; } button { border: none; } .container, .container { color: red; } body,.element{padding:0;color:red} input,button{border:none}.container{ color:red} CSSO http:/ /bem.info/tools/csso

Slide 53

Slide 53 text

CSSO body { padding: 0; color: red; } .element { color: blue; color: red; } .element { padding: 0; } input { border: none; } button { border: none; } .container, .container { color: red; } body, .element { padding:0; color:red } input, button { border:none } .container { color:red } CSSO http:/ /bem.info/tools/csso

Slide 54

Slide 54 text

Frameworks de CSS conclusão Use apenas os mixins e funções para pré-processadores de CSS Aproveite a vontade código JavaScript não atrelado a classes HTML

[...]

[...]
// Mixins em LESS do Twitter Bootstrap .tool { .makeRow(); } .tool-title { .makeColumn(3); } .tool-content { .makeColumn(9); }

Slide 55

Slide 55 text

CSS on steroids conclusão Deixe de bobagem e turbine seu workflow Prefira o pré-processador que sua equipe se sente mais a vontade Não custa muito ativar o CSSO, mas teste bem antes de levar para produção

Slide 56

Slide 56 text

Entendi... E o que faço com a disposição dos elementos do meu layout?

Slide 57

Slide 57 text

CSS Layout

Slide 58

Slide 58 text

Box model Define tamanhos, margens, paddings... Posiciona elementos em relação a outros ou fixa eles na viewport

Slide 59

Slide 59 text

Box model Ordena os elementos em direção vertical (block) ou horizontal (inline)

Slide 60

Slide 60 text

Box model Ordena os elementos em direção vertical (block) ou horizontal (inline)

Slide 61

Slide 61 text

Box model Ordena os elementos em direção vertical (block) ou horizontal (inline)

Slide 62

Slide 62 text

Flexbox model Não usa floats Agnóstico de direção Meios de alinhar facilmente elementos

Slide 63

Slide 63 text

Flexbox: flex grown e shrink grown 0 0 1

Slide 64

Slide 64 text

Flexbox: flex grown e shrink grown 0 0 1

Slide 65

Slide 65 text

Flexbox: flex grown e shrink grown shrink 1 1 0 grown 0 0 1

Slide 66

Slide 66 text

Flexbox: flex grown e shrink shrink 1 1 0 0 0 1 grown

Slide 67

Slide 67 text

Flexbox: align itens flex-start flex-end center stretch

Slide 68

Slide 68 text

Flexbox: justify content flex-start flex-end center space-between

Slide 69

Slide 69 text

Flexbox: flow e order Holy Grail Layout example https:/ /developer.mozilla.org/en-US/docs/Web/Guide/CSS/ Flexible_boxes

Slide 70

Slide 70 text

Flexbox: flow e order Holy Grail Layout example https:/ /developer.mozilla.org/en-US/docs/Web/Guide/CSS/ Flexible_boxes

Slide 71

Slide 71 text

Flexbox Flexbox é ideal para componentes W3C Candidate Recommendation Compatível com Chrome 29+ e IE 11 @mixin flexbox() { display: -webkit-box; display: -moz-box; display: -ms-flexbox; display: -webkit-flex; display: flex; } @mixin flex($values) { -webkit-box-flex: $values; -moz-box-flex: $values; -webkit-flex: $values; -ms-flex: $values; flex: $values; } @mixin order($val) { -webkit-box-ordinal-group: $val; -moz-box-ordinal-group: $val; -ms-flex-order: $val; -webkit-order: $val; order: $val; } .wrapper { @include flexbox(); } .item { @include flex(1 200px); @include order(2); } A Complete Guide to Flexbox http:/ /css-tricks.com/snippets/ css/a-guide-to-flexbox/

Slide 72

Slide 72 text

Grid Ideal para layouts completos Promissor para definir disposição dos componentes Especificação da Microsoft compatível apenas com IE 10+

Slide 73

Slide 73 text

CSS Layout conclusão Box model ainda é o caminho, aprenda ao máximo! Use flexbox e grid em ambientes controlados, ainda tem baixa compatibidade e especificação não estável Learn CSS Layout http:/ /learnlayout.com

Slide 74

Slide 74 text

Legal! E as media queries, podemos falar um pouco disto?

Slide 75

Slide 75 text

Media Queries

Slide 76

Slide 76 text

História Primeira especificação é de 2002 iPhone foi lançado em 2007 W3C recommended standard em 2012

Slide 77

Slide 77 text

Layout responsivos Termo usado por Ethan Marcotte em artigo Responsive Web Design em A List Apart

Slide 78

Slide 78 text

Acessibilidade Media queries também ajudam na acessibilidade http:/ /sergiolopes.org/media-queries-zoom

Slide 79

Slide 79 text

Modularização A buzzword da vez no universo front-end é modularização Media queries são globais, com base na viewport

Slide 80

Slide 80 text

Cuidado! Vamos falar do universo dos sonhos desde aqui para frente

Slide 81

Slide 81 text

http://ianstormtaylor.com/media-queries-are-a-hack

Slide 82

Slide 82 text

No content

Slide 83

Slide 83 text

Meu produto Módulos

Slide 84

Slide 84 text

Meu produto Layout responsivo

Slide 85

Slide 85 text

Meu produto Layout responsivo

Slide 86

Slide 86 text

Meu produto Layout responsivo

Slide 87

Slide 87 text

No content

Slide 88

Slide 88 text

Make it so, internetz Element level media queries Acelerar a implementação de flexbox e grid Imagens responsivas pra ontem! Pensar em soluções, testar e prototipar

Slide 89

Slide 89 text

Obrigado! @jcemer