Do PSD ao HTML5
Photoshop, Fireworks, HTML5, Bootstrap,
Fonticons, CSS3, SASS, Gulp e Bower
Quais os principais formatos e
quais diferenças existem entre eles
O formato BMP (ou Bitmap) é o precursor.
Ele armazena fotos e gráficos em pequenos pixels.
Quanto maior o número de pixels em uma imagem, maior a qualidade da imagem.
A grande característica do JPG é a possibilidade de compressão.
Ele armazena imagens em blocos de pixels, portanto menos informação, menor tamanho.
JPG de alta qualidade
JPG de média qualidade
JPG de baixa qualidade
O GIF é ou era muito utilizado, principalmente
para criar imagens animadas.
Seu formato é 8-bit, o que significa que imagens em GIF
possuem apenas 256 cores.
Ele traz compressão de arquivos sem perder qualidade, e como é 24-bits, um número muito maior de cores está disponível.
Assim como o GIF, suporta imagens com transparência e animações, só que com muito mais qualidade.
O SVG é um arquivo baseado em texto e descreve
as imagens com formatos vetoriais.
Por ser vetorial, é um ótimo formato para
ser uzado em sites responsivos.
Entender o que é cada parte do layout, assim podemos
cortar e montar corretamente o HTML
Boas práticas para HTML
Significado semântico de algumas tags
Análise semântica de um layout
Do PSD ao HTML5
Photoshop, Fireworks, HTML5, Bootstrap,
Fonticons, CSS3, SASS, Gulp e Bower
Como mudanças simples podem dar mais qualidade ao seu código
<a>, <p>, <span>, <em>, <strong>, <div>, <br><h1>, <h2>, <h3>, <h4>, <h5>, <h6><ul>, <ol>, <li>, <dl>, <dd>, <dt><form>, <input>, <button>, <select>, <textarea><table>, <tr>, <td>, <thead>, <tbody>, <tfoot><header>, <footer>, <nav>, <section>, <article>, <aside>
O que é semântica? Quando sei que
um HTML está semânticamente escrito?
Usado para cabeçalhos de página e de seção, pode
ser utilizado mais de 1 vez por página
Responsável pela marcação de rodapés
de páginas e seções
Responsável pela marcação de itens de navegação do site/aplicação
Responsável pela marcação de conteúdos secundários a pagáinas ou seções
Marcação do conteúdo principal daquela página ou seção
Tag para delimitar semânticamente uma seção de conteúdo
Performance DO HTML5
Do PSD ao HTML5
Photoshop, Fireworks, HTML5, Bootstrap,
Fonticons, CSS3, SASS, Gulp e Bower
O que pode comprometer a
performance de uma página HTML?
Grid do Bootstrap
Responsividade
Bootstrap Componentes
Fonticons
Mais prática de Bootstrap
CSS3
Regras básicas
Boas práticas
Cascading Style Sheets (CSS) é uma linguagem de folhas de estilo utilizada para definir a apresentação de documentos escritos em uma linguagem de marcação.
O seu principal benefício é a separação entre o formato e o conteúdo de um documento.
Usada para identificar os elementos de marcação ou ações específicas para o qual um bloco de declaração se aplica
:hover
:active
:before
:after
selector,
selector2:pseudo-class {
property: value;
property2: value2;
}
/* comment */
/* comentário em css, semelhante aos da linguagem c */
body {
font-family: Arial, Verdana, sans-serif;
background-color: #FFF;
margin: 5px 10px;
}
Do PSD ao HTML5
Photoshop, Fireworks, HTML5, Bootstrap,
Fonticons, CSS, SASS, Gulp e Bower
Fazer um bom código front-end é
mais difícil do que parece.
Além de escrever a mesma propriedade duas vezes,
você não faz uso dos padrões do navegador.
Evite isso invertendo seus seletores
e os demais herdam o valor padrão.
/* desktop */
.botao-magico { float: right; }
/* mobile */
@media (max-width: 600px) {
.botao-magico { float: none; }
}
/* mobile */
/* nada aqui! o padrão é float:none */
/* desktop */
@media (min-width: 600px) {
.botao-magico { float: right; }
}
Classes nos permitem o tipo de reaproveitamento que a herança nos traz em linguagens orientadas a objetos
Crie uma hierarquia de classes para reaproveitar
estilos comuns mesmo em elementos diferentes
Você tem dois elementos na página .menu e .noticias
que têm funções e visuais diferentes.
<div class="box menu"></div>
<div class="box noticias"></div>
.box {
background: #ccc;
border-radius: 5px;
box-shadow: 2px 2px 2px black;
}
Seletor de ID tem precedência ao de classe, que tem precedência ao de tagname.
Mantenha a especificidade dos seus seletores no mesmo nível usando classes sempre pra estilizar. São mais fáceis de compor.
E jamais use !important pra forçar um estilo.
<div id="algum-id" class="alguma-classe"></div>
<div id="algum-id"></div>
#algum-id { background-color: blue; }
#algum-id.alguma-classe { background-color: red; }
.alguma-classe { background-color: transparent; }
#algum-id .alguma-classe { background-color: yellow; }
Toda vez que você escreve um margin-top: 37px ou um width: 381px um bebê foca morre.
Quando você usa margin-top: -1px certamente vai quebrar em algum navegador ou se o ícone mudar. Isso faz seu CSS ser pouco ou quase nada reaproveitável.
Quer alinhar um ícone com texto? Aprenda a usar o vertical-align:middle (mesmo ele não funcionando do jeito que você pensa que funciona).
Números mágicos podem ser evitados em muitos casos usando unidades relativas como porcentagens.
Se você tem uma página de 940px de largura e precisa dividir em 5 colunas, não escreva width: 188px porque você nunca vai lembrar da onde saiu esse valor.
Prefira width: 20% que mostra de maneira mais óbvia que é 1/5 do página.
E, claro, se puder, faça todas as suas unidades de layout com porcentagens.
A Web é uma mídia elástica e confinar sua página a pixels estáticos é transformar a Web em uma mídia limitada como a impressa.
Para elementos tipográficos ou afetados pela tipografia, use em como medida flexível.
Escrever o nome tag no meio do CSS faz com que seu estilo fique acoplado à estrutura do HTML.
Se o HTML muda, seu estilo quebra.
Se você tem um menu como uma lista cheia de itens, não use .menu li no CSS.
Prefira criar uma classe específica .menu-item e aplicá-la no HTML.
Até quando você usa elementos mais padronizados, como <header> ou <h1>, a boa prática é usar classes pra estilizar
Tudo isso te deixa muito mais livre pra mudar o HTML por razões de semântica e conteúdo, sem afetar o estilo CSS.
E já que boa parte das práticas envolve criar novas classes, a regra óbvia, criar nomes legíveis e fáceis de entender.
Use .painel-principal ao invés de .pnlPri.
Mas não é só isso.
Elas serão escritas no meio do conteúdo HTML da página e, portanto, devem ter semântica de conteúdo e não de visual.
Evite .box-lateral ou .titulo-azul ou .painel-direita. Se o seu box não for lateral ou o título mudar de cor ou o painel mudar de lado, sua classe perde significado.
Prefira usar .painel ou .chamada-principal. E, claro, se, eventualmente, você tiver um .titulo-azul no seu código, não deixe a classe com esse nome o dia que a cor mudar pra vermelho; renomeie a classe!
Toda regra tem exceções. Às vezes, você vai colocar um ID ou tagname no seu CSS. Ou vai precisar de um !important num raro lugar. Ou aquele número mágico que você não vai lembrar depois como calcula.
Isso deve ser exceção, não abuse. E, sempre que fizer isso, documente direito no CSS o porquê daquela escolha.
/* estrutura esperada para o menu:
<ul class="menu">
<li><a href=""></a>
<li><a href=""></a>
</ul>
*/
.menu { ... }
.menu li { ... }
.menu a { ... }
/* usando ID porque o widget do facebook obriga */
#facebook-like iframe {
width: 100% !important; /* important pra sobrescrever css inline do widget */
}
Código bem indentado facilita o entendimento e legibilidade, ajudando assim o desenvolvimento, mais principalmente a manutenção
Se tiver mais de uma pessoa mechendo no mesmo arquivo, padronize a identação dos editores, caso sejam diferentes
Não é obrigatório, mas se puder fazer é bom. Declarações relacionadas devem ser agrupadas segundo a seguinte ordem
Posicionamento vem primeiro por que isto pode remover um elemento do fluxo normal do documento e substituir estilos relacionados. O box model vem depois pois ele dita as dimensões e lugar do componente.
Tudo o mais que toma lugar dentro do componente ou não impacta as duas seções anteriores, vem por último.
Do PSD ao HTML5
Photoshop, Fireworks, HTML5, Bootstrap,
Fonticons, CSS, SASS, Gulp e
Bower
Pré-processador de CSS.
Sass permite usar recursos que não existem em CSS, como variáveis, aninhamento, mixins(funções), herança e outras guloseimas.
Depende de um compilador para entregar um CSS.
Uma maneira de armazenar informações que você deseja reutilizar.
Cores, Fonte, Dimensões, sombras ou qualquer valor CSS você acha que vai querer reutilizar.
$font-stack: Helvetica, sans-serif;
$primary-color: #333;
body {
font: 100% $font-stack;
color: $primary-color;
}
body {
font: 100% Helvetica, sans-serif;
color: #333;
}
O CSS não permite aninhar regras.
No SASS podemos aninhar as regras criando assim uma melhor organização.
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li {
display: inline-block;
}
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
nav ul {
margin: 0;
padding: 0;
list-style: none;
}
nav li {
display: inline-block;
}
nav a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
No SASS também podemos fragmentar nossos arquivos, separando por funcionalidade e/ou páginas.
// _reset.scss
html,
body,
ul,
ol {
margin: 0;
padding: 0;
}
// base.scss
@import 'reset';
body {
font: 100% Helvetica, sans-serif;
background-color: #efefef;
}
html, body, ul, ol {
margin: 0;
padding: 0;
}
body {
font: 100% Helvetica, sans-serif;
background-color: #efefef;
}
Você pode aplicar uma regra diversas vezes em vários lugares diferentes.
.message {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
.success {
@extend .message;
border-color: green;
}
.error {
@extend .message;
border-color: red;
}
.warning {
@extend .message;
border-color: yellow;
}
.message, .success, .error, .warning {
border: 1px solid #cccccc;
padding: 10px;
color: #333;
}
.success {
border-color: green;
}
.error {
border-color: red;
}
.warning {
border-color: yellow;
}
Semelhante ao Extend, você pode incorporar um código dentro de outro, só que passando valores variáveis.
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
-ms-border-radius: $radius;
border-radius: $radius;
}
.box {
@include border-radius(10px);
}
.box {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
-ms-border-radius: 10px;
border-radius: 10px;
}
Você também pode trabalhar com operações matemáticas, no SASS.
.container { width: 100%; }
article[role="main"] {
float: left;
width: 600px / 960px * 100%;
}
aside[role="complementary"] {
float: right;
width: 300px / 960px * 100%;
}
.container {
width: 100%;
}
article[role="main"] {
float: left;
width: 62.5%;
}
aside[role="complementary"] {
float: right;
width: 31.25%;
}
Do PSD ao HTML5
Photoshop, Fireworks, HTML5, Bootstrap,
Fonticons, CSS, SASS, Gulp e
Bower
Task Runner
Gulp é uma ferramenta de streaming de construção rápida construído em Node.js.
Para toda essa mágica acontecer dependemos do NodeJS e do NPM.
Para quem não sabe NodeJS, ajudou a difundir ainda mais o Javascript, permitindo transforma-lo em Server-Side.
É um sistema de gerenciamento de pacotes, para o NodeJS, ele é um completo repositório online de ferramentas que acrescentam poder ao NodeJS.
Para começarmos a usar precisamos, óbviamente, instalar o NodeJS.
$ npm init
package.json
Depois... criamos o arquivo do gulp que define as tasks a serem executadas.
gulpfile.js
Sistema de gerenciamento de dependências
Como o NPM, o Bower possui um repositório de dependencias para aplicações Front.
Para usarmos, óbviamente, ter o NodeJS instalado.
$ bower init
bower.json
Depois... basta adicionarmos nossas dependências no arquivo e elas serão gerenciadas automaticamente