SlideShare a Scribd company logo
1 of 193
globo
 .com
        HTML/CSS Patterns
        Leonardo Quixadá
1   O Que Não Vou Apresentar
O Que Não Vou Apresentar
‣   Fundamentos de seletores
‣   Aplicação de propriedades
‣   Tableless
‣   Performance
‣   CSS3
2   HTML & CSS Hoje
Guidelines
‣   CSS
    ‣   Reset.css ou normalize.css
    ‣   Grids

‣   HTML & CSS
    ‣   Tableless
Mas e o resto? #comofaz
Problemas comuns
‣   Layout em CSS não é fácil de aplicar, nem de explicar
‣   Não existe sandbox, há muitos conflitos de
    propriedades
‣   Inconsistência cross-browser
‣   Não é automaticamente testável
TODO CUIDADO É
   POUCO!
3   O Curso
Estrutura para HTML & CSS
‣   Agilizar a criação e a manutenção de componentes.
‣   Melhorar a limpeza, a clareza e a flexibilidade tanto do
    HTML, como do CSS.
‣   Diminuir o tempo desperdiçado fazendo ajustes para
    um browser em específico.
Regras de Ouro
1. Separar container de conteúdo
2. Separar estrutura de estética


                -- Nicole Sulivan (Yahoo!), em OOCSS
Cronograma

  HTML             CSS
 Patterns        Patterns
    Grids         Seletores
                                Estratégias
Minidocumentos   Propriedades        de       Mundo
                                 Validação
Microsemântica     Layout
                                              Pós-IE6
4   Modelo Globocore
Modelo Globocore
        page

   macroarea

         área
 box (widgets
 & destaques)
5   HTML Patterns
HTML Patterns
‣   Grids
‣   Minidocumentos
‣   Microsemântica
5.1   Grids
Grids

“Todo trabalho de design envolve a solução de problemas
em níveis visuais e organizativos. Figuras, símbolos, massa de
textos, títulos e tabelas devem se reunir para transmitir
informação. O grid é uma maneira de juntar esses
elementos.”
                                                            - Luiz Agner, designer, arquiteto e professor




Fonte: http://www.slideshare.net/agner/a-construo-do-grid
Grids

“O grid introduz uma ordem sistemática num leiaute e
permite que o designer diagrame uma grande quantidade de
informação. Também permite vários colaboradores num
mesmo projeto.”
                                                            - Luiz Agner, designer, arquiteto e professor




Fonte: http://www.slideshare.net/agner/a-construo-do-grid
Grids

“Vantagens do grid:
- Clareza
- Eficiência
- Economia
- Identidade”
                                                            - Luiz Agner, designer, arquiteto e professor




Fonte: http://www.slideshare.net/agner/a-construo-do-grid
Grids
‣   Padrão de-facto para layouts em CSS.
‣   Permite o intercâmbio de componentes entre
    produtos
‣   Define o espaço horizontal que os componentes
    podem ocupar (o conteúdo dos componentes
    definem o espaço vertical)
‣   Dada uma largura fixa, pode-se compor “linhas” com
    até 12 colunas.
Grids
colunas
Grids
Grids

        linhas
Grids: Colunas
‣   1 unidade ou coluna de 1:

             <div class=”glb-grid-1”></div>


                                 width (60px)



            margin-left (10px)                  margin-right (10px)
Grids: Colunas
‣   2 unidades:

                   grid 1            grid-1

     10px          60px     20px     60px     10px




‣   coluna de 2:
     10px                   140px             10px

                            grid-2


            <div class=”glb-grid-2”></div>
Grids: Colunas
‣   3 unidades:
            grid 1          grid-1            grid-1

     10px   60px     20px   60px      20px    60px     10px


            grid 1                   grid-2

     10px   60px     20px            140px             10px

‣   coluna de 3:
     10px                   220px                      10px

                            grid-3


            <div class=”glb-grid-3”></div>
Grids: Colunas
‣   4 unidades:
            grid 1          grid-1            grid-1          grid-1

     10px   60px     20px   60px     20px     60px     20px   60px     10px


            grid 1                   grid-2                   grid-1

     10px   60px     20px            140px             20px   60px     10px

‣   coluna de 4:
     10px                            300px                             10px

                                     grid-4


                <div class=”glb-grid-4”></div>
Grids
Grids: Linhas
‣   As linhas podem ser definidas por blocos ou unidades
    do grid.

     glb-bloco

          glb-grid 2      glb-grid-8        glb-grid-2




    <div class=”glb-bloco”>
     <div class=”glb-grid-2”></div>
     <div class=”glb-grid-8”></div>
     <div class=”glb-grid-2”></div>
    </div>
Grids: Linhas
‣   As linhas podem ser definidas por blocos ou unidades
    do grid.

     glb-grid-4

          glb-grid 1      glb-grid-2         glb-grid-1




    <div class=”glb-grid-4”>
     <div class=”glb-grid-1 glb-primeiro”></div>
     <div class=”glb-grid-2”></div>
     <div class=”glb-grid-1 glb-ultimo”></div>
    </div>
Grids: Exemplo
<body>
  <div id=”glb-doc”>
   <div class=”glb-topo”>
     ...
   </div>
   <div class=”glb-conteudo”>
     ...
   </div>
   <div class=”glb-rodape”>
     ...
   </div>
  </div>
</body>
Grids: Exemplo
<body>
  <div id=”glb-doc”>
   <div class=”glb-topo”>
     ...
   </div>
   <div class=”glb-conteudo”>
     ...
   </div>
   <div class=”glb-rodape”>
     ...
   </div>
  </div>
</body>
Grids: Exemplo

<div class="glb-topo">

  <div class="glb-bloco">
    <div class="glb-grid-4"></div>
    <div class="glb-grid-4"></div>
    <div class="glb-grid-4"></div>
  </div>

</div>
Grids: Exemplo
<body>
  <div id=”glb-doc”>
   <div class=”glb-topo”>
     ...
   </div>
   <div class=”glb-conteudo”>
     ...
   </div>
   <div class=”glb-rodape”>
     ...
   </div>
  </div>
</body>
Grids: Exemplo
<div class="glb-conteudo">
  <div class="glb-bloco">
    <div class="glb-grid-8"></div>
    <div class="glb-grid-4"></div>
  </div>

  <div class="glb-bloco">
    <div class="glb-grid-4"></div>
    <div class="glb-grid-4"></div>
    <div class="glb-grid-4"></div>
  </div>
</div>
Grids: Exemplo
<body>
  <div id=”glb-doc”>
   <div class=”glb-topo”>
     ...
   </div>
   <div class=”glb-conteudo”>
     ...
   </div>
   <div class=”glb-rodape”>
     ...
   </div>
  </div>
</body>
Grids: Exemplo

<div class="glb-rodape">

  <div class="glb-bloco">
    <div class="glb-grid-12"></div>
  </div>

</div>
Hora do DEMO!!!
Exercício: Implementar
             header

    1          2
                         3
    4          5

         6               7

    8          9      10

             footer
5.2   Minidocumentos
Minidocumentos
‣   Pattern que subdivide páginas web em pequenos
    “documentos” autosuficientes.
‣   É como um pequeno grid para os componentes que
    vão preencher os compartimentos da estante.
‣   Juntando-se vários componentes formam-se
    composições sólidas.
Minidocumentos
‣   Podem ser utilizados por widgets, destaques, forms,
    menus, etc...
‣   Baseado nas novas tags do HTML 5: article, section,
    header e footer.
Página
Página
Página
Página
Menu & Widget Lateral
Menu & Widget Lateral


          Header
Menu & Widget Lateral


          Content
Menu & Widget Lateral


          Footer
Form
Form
Form
Form
Widgets Centrais
Widgets Centrais
Widgets Centrais
Widgets Centrais
Widgets Centrais
Widgets Centrais
Widgets Centrais
Pattern Visual
 Container

  Header



  Content



  Footer
Pattern Visual
 Container

  Títulos, menus, logos...



  Todo o conteúdo



  Links “veja mais”, botões, informações extras...
Pattern HTML
<div class=”container”>
 <div class=”header”>
   ...
 </div>
 <div class=”content”>
   ...
 </div>
 <div class=”footer”>
   ...
 </div>
</div>
Pattern Página
<div class=”glb-doc”>
 <div class=”glb-top”>
   ...
 </div>
 <div class=”glb-content”>
   ...
 </div>
 <div class=”glb-base”>
   ...
 </div>
</div>
Pattern Matéria
<div class=”materia”>
 <div class=”header”>
   ...
 </div>
 <div class=”content”>
   ...
 </div>
 <div class=”base”>
   ...
 </div>
</div>
Pattern Box
<div class=”box”>
 <div class=”header”>
   ...
 </div>
 <div class=”content”>
   ...
 </div>
 <div class=”footer”>
   ...
 </div>
</div>
Box Plantão
<div class=”box box-plantao”>
 <div class=”header”>
   ...
 </div>
 <div class=”content”>
   ...
 </div>
 <div class=”footer”>
   ...
 </div>
</div>
Se você usasse HTML5...
<section class=”box box-plantao”>
 <header>
   ...
 </header>
 <section>
   ...
 </section>
 <footer>
   ...
 </footer>
</section>
Box Plantão
<div class=”box box-plantao”>
 <div class=”header”>
   ...
 </div>
 <div class=”content”>
   ...
 </div>
 <div class=”footer”>
   ...
 </div>
</div>
Box Plantão
<div class=”box box-plantao”>
 <div class=”header”>
   ...
 </div>
 <div class=”content”>
   ...
 </div>
 <div class=”footer”>
   ...
 </div>
</div>
Box Plantão
<div class=”box box-plantao”>
 <div class=”header”>
   ...
 </div> <!-- .header -->
 <div class=”content”>
   ...
 </div> <!-- .content -->
 <div class=”footer”>
   ...
 </div> <!-- .footer -->
</div> <!-- .box-plantao -->
Favor, não misturar <div>s
  ou .classes de grid com
            box.
5.3   Microsemântica
Microsemântica
‣   Utilização de elementos semânticos para descrever
    dados através de tags e/ou classes.
‣   É uma variação dos Microdados e, antigamente, de
    Microformatos.
‣   Não serve paras os search engines, apenas melhora a
    clareza do código.
Microsemântica
‣   É a partir daqui que se preocupa com:
    ‣   SEO
    ‣   Semântica
    ‣   Acessibilidade
    ‣   Microdados
    ‣   ...
Microdados
“Microdados é uma especificação WHATWG HTML5
usada para aninhar semântica dentro de conteúdos
existentes em páginas web.
Isso é feito usando atributos específicos: itemscope,
itemtype, itemid, itemprop e itemref.
Search engines, web crawlers, e navegadores podem
extrair e processar microdados a partir de uma página
web e usar isso para prover uma experiência de
navegação mais rica para os usuários.”
                                          - Wikipedia
Microdados: Exemplo
<div>
  <h1>Avatar</h1>
  <span>
    Director:
    James Cameron
    (born August 16, 1954)
  </span>
  <span>Science fiction</span>
  <a href="/movies/avatar.html">Trailer</a>
</div>
Microdados: Exemplo
<div itemscope>
  <h1>Avatar</h1>
  <span>
    Director:
    James Cameron
    (born August 16, 1954)
  </span>
  <span>Science fiction</span>
  <a href="/movies/avatar.html">Trailer</a>
</div>
Microdados: Exemplo
<div itemscope itemtype="http://schema.org/Movie">
  <h1>Avatar</h1>
  <span>
    Director:
    James Cameron
    (born August 16, 1954)
  </span>
  <span>Science fiction</span>
  <a href="/movies/avatar.html">Trailer</a>
</div>
Microdados: Exemplo
<div itemscope itemtype="http://schema.org/Movie">
  <h1 itemprop="name">Avatar</h1>
  <span>
    Director:
    <span itemprop="director">James Cameron</span>
    (born August 16, 1954)
  </span>
  <span itemprop="genre">Science fiction</span>
  <a href="/movies/avatar.html" itemprop="trailer">Trailer</a>
</div>
Microdados: Exemplo
<div itemscope itemtype="http://schema.org/Movie">
  <h1 itemprop="name">Avatar</h1>
  <span itemprop="director" itemscope itemtype="http://schema.org/
Person">
    Director:
    <span itemprop="name">James Cameron</span>
    (born <span itemprop="birthDate">August 16, 1954)</span>
  </span>
  <span itemprop="genre">Science fiction</span>
  <a href="/movies/avatar.html" itemprop="trailer">Trailer</a>
</div>
Microdados
‣   Mais exemplos em: http://schema.org
Microformatos
‣   Cartões
    <div class="vcard">
           <span class="fn">Nome</span>
           <span class="org">Organização</span>
           <span class="tel">604-555-1234</span>
           <a class="url" href="http://site.com/">Website</a>
    </div>



‣   Calendário
‣   Reviews
Microsemântica
‣   Por que não fazer nossos próprios microdados?
‣   HTML com mais semântica e mais entendível.
Box Plantão
<div class=”box box-plantao”>
 <div class=”header”>
   ...
 </div>
 <div class=”content”>
   ...
 </div>
 <div class=”footer”>
   ....
 </div>
</div>
Box Plantão
<div class=”box box-plantao”>
 <div class=”header”>
   ...
 </div>
 <div class=”content”>
   ...
 </div>
 <div class=”footer”>
   ....
 </div>
</div>
Box Plantão
<div class=”box box-plantao”>
 ...
 <div class=”content”>
     <ul>
      <li> ... </li>
      <li> ... </li>
      ...
     </ul>
 </div>
 ...
</div>
Box Plantão
 <ul>
  <li>
      <a class=”noticia” href=”#”>
       <img class=”thumb”
           src=”foto.jpg” />
       <span class=”chapeu”></span>
       <span class=”titulo”></span>
      </a>
  </li>
  ...
 </ul>
Box Plantão
 <ul>
  <li>
      <a class=”noticia” href=”#”>
       <img class=”thumb”
           src=”foto.jpg” />
       <span class=”chapeu”></span>
       <span class=”titulo”></span>
      </a>
  </li>
  ...
 </ul>        não dizem nada
Box Plantão
 <ul>
  <li>
      <a class=”noticia” href=”#”>
       <img class=”thumb”
           src=”foto.jpg” />
       <span class=”chapeu”></span>
       <span class=”titulo”></span>
      </a>
  </li>
  ...
 </ul>
              semântico!!!
A partir daqui, nada de
grid, e evite ao máximo
      utilizar <div>s.
Box Plantão

div.box-plantao a { ... }
div.box-plantao a.noticia { ... }
div.box-plantao span.chapeu { ... }
div.box-plantao span.titulo { ... }
div.box-plantao ul { ... }
Vejamos rapidamente
    outro box...
Box Previsão do Tempo
Box Previsão do Tempo
Vc consegue classificar semanticamente o
           content do box?
Outro exemplo....
Outro exemplo....


div.brother-main
Outro exemplo....


                                                 cite.brother-tweet
span.brother-idade
                     span.brother-cidade-natal




span.brother-signo                                cite.brother-tweet-tempo
                  span.brother-time
Dica!


 <div> para descrever estrutura,
  <span> para descrever dados
Exercício
‣   Transforme um box em HTML:
6   CSS Patterns
Estratégias
‣   Organizando Seletores
‣   Organizando Propriedades
‣   Elaborando Layouts
6.1   Organizando Seletores
Organizando Seletores
‣   Namespaces: define a área de atuação dos seletores e
    os agrupa visualmente.
‣   tag[.class].
‣   Separação por blocos.
‣   Ordem: especificidade, alfabética.
Organizando Seletores
‣   Namespaces: define a área de atuação dos seletores e
    os agrupa visualmente.
‣   tag[.class].
‣   Separação por blocos.
‣   Ordem: especificidade, alfabética.
Namespaces

div.box-plantao { ... }
div.box-plantao a { ... }
div.box-plantao h6 { ... }
div.box-plantao li { ... }
div.box-plantao span.barra { ... }
div.box-plantao ul { ... }
Namespaces

div.box-plantao { ... }
div.box-plantao a { ... }
div.box-plantao h6 { ... }
div.box-plantao li { ... }
div.box-plantao span.barra { ... }
div.box-plantao ul { ... }

      Contexto ou Namespace
Organizando Seletores
‣   Namespaces: define a área de atuação dos seletores e
    os agrupa visualmente.
‣   tag[.class].
‣   Separação por blocos.
‣   Ordem: especificidade, alfabética.
tag[.class]

div.box-plantao              { ... }
div.box-plantao a            { ... }
div.box-plantao h6            { ... }
div.box-plantao li           { ... }
div.box-plantao span.barra    { ... }
div.box-plantao ul           { ... }
    tag[.class] 1
tag[.class]

div.box-plantao                   { ... }
div.box-plantao a                 { ... }
div.box-plantao h6                 { ... }
div.box-plantao li                { ... }
div.box-plantao span.barra         { ... }
div.box-plantao ul                { ... }
                  tag[.class] 2
tag[.class]
‣   jQuery
       $(‘div.box-plantao span.barra’)
       ou $(‘div.box-plantao’).find(‘span.barra’) (para cachear o contexto)


‣   Lxml
       html = lxml.etree.fromstring(response.content)
       html.cssselect(‘div.box-plantao span.barra’)
‣   splinter
       browser = Browser()
       browser.find_by_css(‘div.box-plantao span.barra’)
tag[.class]
‣   Problemas de se utilizar só a classe:
    ‣   Desenvolvedores são muito ruins em nomear coisas.
    ‣   O nome da tag é tão objetivo quanto uma ordem
        alfabética. Melhor utilizar os tokens já predefinidos
        do que ficar elaborando nomes malucos.
    ‣   Classes abertas indicam pra outros devs, que é
        permitido colocar a classe em qualquer tag.
tag[.class]
‣   Exemplos:
    .fieldset-metadados               fieldset.metadados
    (exemplo do widget SEO)

    .span_tag                        span.tag
    (catálogo de vídeo v1.0)

    .formulario-criacao-usuario      form.criacao-usuario

‣   Só utilizar classes abertas quando é realmente
    necessário aplicar a mais de uma tag (exemplo th, td).
tag[.class]
‣   Recomendo sempre ter 2 tag[.class]. Claro e conciso!
‣   Mínimo de 1 tag[.class]
      div.box-plantao { ... }
‣   Máximo (prometa!) de 3 tag[.class]
      div.box-plantao ul.principal li.ativo { ... }
Organizando Seletores
‣   Namespaces: define a área de atuação dos seletores e
    os agrupa visualmente.
‣   tag[.class].
‣   Separação por blocos.
‣   Ordem: especificidade, alfabética.
Separação por blocos
div.box { ... }
div.box a { ... }
div.box span.barra { ... }

div.box-plantao h6 { ... }
div.box-plantao li { ... }
div.box-plantao ul { ... }

div#box-plantao-principal h6 { ... }
div#box-plantao-principal li { ... }
Separação por blocos
        div.box { ... }
bloco
        div.box a { ... }
        div.box span.barra { ... }

        div.box-plantao h6 { ... }
bloco   div.box-plantao li { ... }
        div.box-plantao ul { ... }

        div#box-plantao-principal h6 { ... }
bloco
        div#box-plantao-principal li { ... }
Ordem
menos específico


            div.box { ... }
            div.box a { ... }
            div.box span.barra { ... }

            div.box-plantao h6 { ... }
            div.box-plantao li { ... }
            div.box-plantao ul { ... }

            div#box-plantao-principal h6 { ... }
            div#box-plantao-principal li { ... }
mais específico
Ordem
             div.box { ... }
             div.box a { ... }
             div.box span.barra { ... }
ordem alfabética

             div.box-plantao h6 { ... }
             div.box-plantao li { ... }
             div.box-plantao ul { ... }

             div#box-plantao-principal h6 { ... }
             div#box-plantao-principal li { ... }
Resumão!
Teu HTML ficaria assim...
<div class=”box box-plantao”>
  <div class=”header”>
    <h6>primeira página</h6>
  </div>
  <div class=”content”>
    <ul>
       <li></li>
       ...
    </ul>
  </div>
  <div class=”footer”>
    <a href=”#”>veja mais</a>
  </div>
</div>
E teu CSS ficaria assim...
div.box { ... }
div.box a { ... }
div.box span.barra { ... }

div.box-plantao h6 { ... }
div.box-plantao li { ... }
div.box-plantao ul { ... }

div#box-plantao-principal h6 { ... }
div#box-plantao-principal li { ... }
6.2   Organizando Propriedades
Organizando Propriedades
‣   Uma propriedade:valor por linha
‣   Separar propriedades por contexto
Organizando Propriedades
‣   Uma propriedade:valor por linha
‣   Separar propriedades por contexto
Uma propriedade por linha
‣   Facilita diffs!
Uma propriedade por linha
‣   Inserir comentários é mais tranquilo
Uma propriedade por linha
‣   CSS 3 com vendor prefix são bem longos e variados


.box_shadow {
  -webkit-box-shadow: 0px 0px 4px #ffffff;
     -moz-box-shadow: 0px 0px 4px #ffffff;
          box-shadow: 0px 0px 4px #ffffff;
}
Uma propriedade por linha
‣   CSS 3 com vendor prefix são bem longos e variados


.box_gradient {
  background-color: #444444;
  /* Saf4+, Chrome */
  background-image: -webkit-gradient(linear, left top, left bottom, from(#444444),
to(#999999));
  /* Chrome 10+, Saf5.1+, iOS 5+ */
  background-image: -webkit-linear-gradient(top, #444444, #999999);
  background-image:    -moz-linear-gradient(top, #444444, #999999); /* FF3.6 */
  background-image:     -ms-linear-gradient(top, #444444, #999999); /* IE10 */
  /* Opera 11.10+ */
  background-image:      -o-linear-gradient(top, #444444, #999999);
  background-image:          linear-gradient(top, #444444, #999999);
            filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#444444',
EndColorStr='#999999'); /* IE6-IE9 */
}
Organizando Propriedades
‣   Uma propriedade:valor por linha
‣   Separar propriedades por contexto
Organizando Propriedades
‣   1o grupo: layout
    position, display, float, top, left, bottom, right, margin, padding,
    width, height
‣   2o grupo: texto
    color, font, letter-spacing, line-height, text-align, text-decoration,
    text-transform...
‣   3o grupo: restante
    border, z-index, overflow, ...
importante!
EVITE o !important
6.3   Elaborando Layouts
Prequel
‣   1o grupo: layout
    position, display, float, top, left, bottom, right, margin, padding,
    width, height
‣   2o grupo: texto
    color, font, letter-spacing, line-height, text-align, text-decoration,
    text-transform...
‣   3o grupo: restante
    border, z-index, overflow, ...
Prequel
‣   1o grupo: layout
    position, display, float, top, left, bottom, right, margin, padding,
    width, height
‣   2o grupo: texto
    color, font, letter-spacing, line-height, text-align, text-decoration,
    text-transform...
‣   3o grupo: restante
    border, z-index, overflow, ...
Prequel
‣   1o grupo: layout
    position, display, float, top, left, bottom, right, margin, padding,
    width, height
‣   2o grupo: texto
    color, font, letter-spacing, line-height, text-align, text-decoration,
    text-transform...
‣   3o grupo: restante
    border, z-index, overflow, ...
float:left
Float:Left contra o Mundo
‣   O float serve para alinhar à esquerda, à direita ou não
    alinhar (none).
‣   A propriedade tem a ver mais com conteúdo do que
    com boxes.
‣   Suas dimensões são reduzidas para acomodar apenas
    o próprio conteúdo ao contrário de display:block.
‣   É fonte de muitas confusões no mundo CSS.
Float:Left em Quadrinhos
A

B

C
Float:Left em Quadrinhos
    A

    B

    C


‣   A
‣   B { float:left; }
‣   C
Float:Left em Quadrinhos
    A


    B    C




‣   Box B perdeu espaço no flow de boxes, mas
    ocupou espaço à esquerda do conteúdo C, ou seja,
    virou conteúdo.
Float:Left em Quadrinhos
A

B

C
Float:Left em Quadrinhos
    A

    B

    C


‣   A
‣   B { float:left; }
‣   C { float:left; }
Float:Left em Quadrinhos
A
A

    B     C




‣   B se alinhou à esquerda antes de C. Como saíram
    do flow de boxes, a altura de A diminuiu.
‣   É como se estivessem caçando conteúdo abaixo.
Float:Left contra o Mundo
‣   Float:left/right tem um funcionamento difícil de
    entender e de explicar.
‣   A maioria dos bugs nos IEs encontrados e registrados
    pelo Position Is Everything tem o float envolvido.
    http://www.positioniseverything.net/explorer.html
‣   Recomendação: evitar ao máximo.
Alternativas ao float:left


            {
                inline
 display        block
                inline-block




            {
                static
                relative
 position
                absolute
                fixed
display:inline-block
Antes de existir o CSS...
‣   No HTML, os elementos são divididos em inline-level
    (também chamado de text-level) e block-level.
    ‣   Elementos inline-level (também chamados de text-
        level) são os que convivem lado-a-lado com texto e
        outro elementos inline-level.
    ‣   Elementos block-level são containers para
        elementos inline-level, textos e outros elementos
        block-level
Antes de existir o CSS...
Elementos inline-level        Elementos block-level

       <input> <a>                   <form>
  <label> <img>                                <blockquote>
                                   <div>
                                         <li>   <td>
<button> <cite> <em>
                                <fieldset>
                                           <th>
  <strong>           <span>                       <p>
<textarea> <select>            <h1>, <h2>, <h3>, <h4>,<h5>,<h6>
Antes de existir o CSS...
Elementos inline-level        <dentro de> Elementos block-level

       <input> <a>                                <form>
                               W3C
  <label> <img>                                            <blockquote>
                                                <div>
                                                      <li>   <td>
<button> <cite> <em>
                                             <fieldset>
                                                        <th>
  <strong>           <span>                                    <p>
<textarea> <select>                         <h1>, <h2>, <h3>, <h4>,<h5>,<h6>
Antes de existir o CSS...
Elementos inline-level        <dentro de> Elementos block-level

       <input> <a>                                <form>
                               W3C
  <label> <img>                                            <blockquote>
                                                <div>
                                                      <li>   <td>
<button> <cite> <em>
                               W3C           <fieldset>
                                                        <th>
  <strong>           <span>                                    <p>
<textarea> <select>                         <h1>, <h2>, <h3>, <h4>,<h5>,<h6>
Antes de existir o CSS...
Elementos inline-level         <dentro de> Elementos block-level

       <input> <a>                                 <form>
                                W3C
  <label> <img>                                             <blockquote>
                                                 <div>
                                                       <li>   <td>
<button> <cite> <em>
                                W3C           <fieldset>
                                                         <th>
  <strong>           <span>                                     <p>
<textarea> <select>                          <h1>, <h2>, <h3>, <h4>,<h5>,<h6>

                         W3C
Antes de existir o CSS...
‣   Leitura recomendada (é curto, prometo!):
    http://www.w3.org/TR/html401/struct/global.html#h-7.5.3
‣   Regras da estrutura HTML:
    http://www.w3.org/TR/html4/strict.dtd
Nunca, nunca coloque
elementos block-level
dentro de inline-level.
Voltando ao CSS...
Displays
‣   Os dois tipos básicos de display são:
    ‣   display:block permite um elemento ser
        dimensionado com width, height, padding, margin,
        etc.
    ‣   display:inline permite ficar lado-a-lado com outros
        elementos e textos. Não pode ser dimensionado
        com width e height. Apenas com valores laterais de
        margin.
Display:Inline-block
‣   Junta características de elementos inlines e blocks.
‣   Permite ficar lado-a-lado com outros elementos e ser
    dimensionados.
‣   É mais intuitivo de aplicar e explicar.
‣   É tratado como parte do texto.
Display:Inline-block
‣   Propriedade também consistente no cross-browser.
‣   No IE7, é simulado por *display:inline e *zoom:1.




* isto não é uma nota de rodapé, é um hack pro IE.
Display:Inline-block
                                              Lorem ipsum dolor sit amet, consectetur
                                              adipiscing elit. Nunc massa sapien,
                                              rutrum ac dignissim at, iaculis sit amet
                                              libero. Aenean vehicula tortor vitae eros
                                              pulvinar quis consectetur arcu suscipit.



Lorem ipsum dolor sit amet,                                              consectetur adipiscing
elit. Nunc massa sapien.Nunc massa sapien, rutrum ac dignissim at, iaculis sit amet libero. Aenean
vehicula tortor vitae eros pulvinar quis consectetur arcu suscipit.




                                                    display:inline-block
Exemplo de Uso
Exemplo de Uso



            display:inline-block
Exemplo de Uso



            display:inline-block
position:absolute
Position:Absolute
‣   Propriedade bem consistente cross-browser. Portanto
    bem mais seguro de se usar do que o float.
‣   É sempre utilizado com uma ou mais das seguintes
    propriedades: top, bottom, left, right.
Position:Absolute




   <div> com
 position:relative
Position:Absolute




   <div> com         <div> sem
 position:relative    position
Position:Absolute




   <div> com         <div> sem      <div> com
 position:relative    position   position:absolute
Position:Absolute
                                   top:150px




          left:300px




   <div> com           <div> sem                  <div> com
 position:relative      position               position:absolute
Exemplo de Uso
Resumo!
Recomendação
‣   Tente utilizar na seguinte ordem:
    1.não usar nada (css padrão do navegador)
    2.display:inline-block
    3.position:absolute
      ...
      ...
    4.float:left
Exercício
‣   Fazer o seguinte box:




‣   Utilize o jsfiddle.net e o dummyimage.com
7   Estratégias de Validação
Estratégias	

de Validação
‣   Em vs Px
‣   Hacks
7.1   Em vs. Px
Em vs Px
‣   “em” é uma unidade de medida relativa e mais
    flexível. 1em = 100%, logo 1.02em=102%.
‣   “px” é uma unidade de medida absoluta e mais
    intuitiva. 1px é 1px e ponto final.
Funcionamento do “em”
12px


       1.2em


                        0.714em




               14,4px             10px
Em vs Px
‣   As principais vantagens do “em” são:
    ‣   O tamanho da página aumenta conforme o
        tamanho da fonte pré-definida pelo usuário em seu
        navegador.
    ‣   A funcionalidade aumentar/diminuir fonte do IE6/7
        só funciona com unidades de medidas.
    ‣   Se adapta melhor em telas pequenas como a de
        celulares.
Em vs Px
‣   As principais desvantagens do “em” são:
    ‣   Número quebrado gera inconsistência entre
        navegadores por causa do cálculo de conversão
        para px. Ex.: 1.33em pode ser 15px em um
        navegador, e 16px em outro.
    ‣   Todo valor em “em” tem que ser previamente
        calculado de acordo com o elemento pai.
Em vs Px
‣   Vantagens do “px”:
    ‣   Previsibilidade: 1px = 1px e pronto!
    ‣   É a unidade padrão dos designers
Recomendação
‣   Use apenas “px.” O desenvolvimento front-end já é
    instável o suficiente.
‣   Caso esteja interessado na flexibilidade do “em,”
    considere utilizar o “rem.”
7.2   Hacks
Hacks
‣   Evite ao máximo utilizá-los.
‣   É completamente possível fazer o mesmo CSS para
    Firefox, Chrome, Safari e Opera. (excetuando
    propriedades novas como border-radius e transition)
‣   Para IE o transtorno é tão grande que compensa
    utilizar hacks.
Hacks: Quando usar?
‣   O mais recomendado no mercado é fazer conditional
    comments.
‣   Mas a experiência mostra que da seguinte forma é
    mais manutenível (na ordem):
    ‣   IE 9-: margin: 15px9;
    ‣   IE 7-: *margin: 15px;
    ‣   IE 6-: _margin: 15px;
Validação de Browsers
Ordem de preferência (ou audiência)




                                          Ordem de recência
                                      9


                                      8


                                      7
Progressive Enhancement
Referências
‣   CSS Compatibility and Internet Explorer
    (http://msdn.microsoft.com/en-us/library/cc351024(VS.85).aspx)

‣   When Can I Use...
    (http://caniuse.com)

‣   CSS Frameworks (video com um overview)
    (http://www.youtube.com/watch?v=EuhDIRzUJgc)

‣   Explorer Exposed!
    (http://www.positioniseverything.net/explorer.html)
Ferramentas
‣   jsFiddle.net
    (http://jsfiddle.net)

‣   Dummy Images
    (http://dummyimage.com)

‣   Lorem Ipsum
    (http://lipsum.com)
Exemplos e Exercícios
‣   Exemplo de Grid
    (http://jsfiddle.net/lquixada/KVSNn/show/)

‣   Exercício do Grid
    (http://jsfiddle.net/lquixada/qxxkK/show/)

‣   Exercício do Box Nas Novelas
    (http://jsfiddle.net/lquixada/6mWM7/show/)
The End
Leonardo Quixadá

More Related Content

What's hot

Conceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDConceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDVinicius Buffolo
 
Informática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional WindowsInformática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional WindowsJoeldson Costa Damasceno
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Leinylson Fontinele
 
Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02thomasdacosta
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-phpdiogoa21
 
Tipos de Sistemas Operacionais
Tipos de Sistemas OperacionaisTipos de Sistemas Operacionais
Tipos de Sistemas OperacionaisLuciano Crecente
 
Informática Básica - Introdução ao Microsoft Word 2010
Informática Básica - Introdução ao Microsoft Word 2010Informática Básica - Introdução ao Microsoft Word 2010
Informática Básica - Introdução ao Microsoft Word 2010Joeldson Costa Damasceno
 
Aula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdfAula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdfMarcelo Silva
 
Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Gercélia Ramos
 
Arquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruçõesArquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruçõesAlex Camargo
 
noções de sgdb
noções de sgdbnoções de sgdb
noções de sgdbPaulo Reis
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoRangel Javier
 
Introdução à Arquitetura de Computadores
Introdução à Arquitetura de ComputadoresIntrodução à Arquitetura de Computadores
Introdução à Arquitetura de ComputadoresMauro Pereira
 
Redes de Computadores
Redes de ComputadoresRedes de Computadores
Redes de Computadoresdeisiweg
 

What's hot (20)

Conceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDConceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBD
 
Informática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional WindowsInformática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional Windows
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
 
Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-php
 
Tipos de Sistemas Operacionais
Tipos de Sistemas OperacionaisTipos de Sistemas Operacionais
Tipos de Sistemas Operacionais
 
Informática Básica - Introdução ao Microsoft Word 2010
Informática Básica - Introdução ao Microsoft Word 2010Informática Básica - Introdução ao Microsoft Word 2010
Informática Básica - Introdução ao Microsoft Word 2010
 
Aula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdfAula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdf
 
Criação de Sites web Tutorial
Criação de Sites web TutorialCriação de Sites web Tutorial
Criação de Sites web Tutorial
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
Aula 6 - Constantes e variáveis
Aula 6 - Constantes e variáveisAula 6 - Constantes e variáveis
Aula 6 - Constantes e variáveis
 
Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)
 
Arquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruçõesArquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruções
 
noções de sgdb
noções de sgdbnoções de sgdb
noções de sgdb
 
Algoritmos - Vetores
Algoritmos - VetoresAlgoritmos - Vetores
Algoritmos - Vetores
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Introdução à Arquitetura de Computadores
Introdução à Arquitetura de ComputadoresIntrodução à Arquitetura de Computadores
Introdução à Arquitetura de Computadores
 
Redes de Computadores
Redes de ComputadoresRedes de Computadores
Redes de Computadores
 
Visualg
VisualgVisualg
Visualg
 
Aula01 - Logica de Programação
Aula01 - Logica de ProgramaçãoAula01 - Logica de Programação
Aula01 - Logica de Programação
 

Viewers also liked

HTML, CSS & Style Guides
HTML, CSS & Style GuidesHTML, CSS & Style Guides
HTML, CSS & Style GuidesBruno Trecenti
 
Aula 1 linguagem html (1)
Aula 1   linguagem html (1)Aula 1   linguagem html (1)
Aula 1 linguagem html (1)Kaoru Hatake
 
Desenvolvimento-web-com-html-css-e-javascript
Desenvolvimento-web-com-html-css-e-javascriptDesenvolvimento-web-com-html-css-e-javascript
Desenvolvimento-web-com-html-css-e-javascriptManuel Fernando
 
HTML 5, CSS 3 e o futuro da Web
HTML 5, CSS 3 e o futuro da WebHTML 5, CSS 3 e o futuro da Web
HTML 5, CSS 3 e o futuro da WebDiego Pessoa
 
Social interface Design: projetando interações entre pessoas
Social interface Design: projetando interações entre pessoasSocial interface Design: projetando interações entre pessoas
Social interface Design: projetando interações entre pessoasEdu Agni
 
A interface nunca está pronta (1)
A interface nunca está pronta (1)A interface nunca está pronta (1)
A interface nunca está pronta (1)Jefferson de Camargo
 
Curso HTML, CSS e JavaScript
Curso HTML, CSS e JavaScriptCurso HTML, CSS e JavaScript
Curso HTML, CSS e JavaScriptPablo Sanches
 
Design Emocional e a Experiência Digital
Design Emocional e a Experiência DigitalDesign Emocional e a Experiência Digital
Design Emocional e a Experiência DigitalEdu Agni
 
Design para a web - da interface ao branding
Design para a web - da interface ao brandingDesign para a web - da interface ao branding
Design para a web - da interface ao brandingJoão Alves
 

Viewers also liked (20)

HTML, CSS & Style Guides
HTML, CSS & Style GuidesHTML, CSS & Style Guides
HTML, CSS & Style Guides
 
Html 5 e Css3
Html 5 e Css3Html 5 e Css3
Html 5 e Css3
 
Aula 1 linguagem html (1)
Aula 1   linguagem html (1)Aula 1   linguagem html (1)
Aula 1 linguagem html (1)
 
Desenvolvimento-web-com-html-css-e-javascript
Desenvolvimento-web-com-html-css-e-javascriptDesenvolvimento-web-com-html-css-e-javascript
Desenvolvimento-web-com-html-css-e-javascript
 
Introdução ao HTML e CSS
Introdução ao HTML e CSSIntrodução ao HTML e CSS
Introdução ao HTML e CSS
 
Curso de Desenvolvimento Web - Módulo 01 - HTML
Curso de Desenvolvimento Web - Módulo 01 - HTMLCurso de Desenvolvimento Web - Módulo 01 - HTML
Curso de Desenvolvimento Web - Módulo 01 - HTML
 
Introdução a HTML, CSS, JS, Ajax
Introdução a HTML, CSS, JS, AjaxIntrodução a HTML, CSS, JS, Ajax
Introdução a HTML, CSS, JS, Ajax
 
HTML 5, CSS 3 e o futuro da Web
HTML 5, CSS 3 e o futuro da WebHTML 5, CSS 3 e o futuro da Web
HTML 5, CSS 3 e o futuro da Web
 
Social interface Design: projetando interações entre pessoas
Social interface Design: projetando interações entre pessoasSocial interface Design: projetando interações entre pessoas
Social interface Design: projetando interações entre pessoas
 
WP BH
WP BHWP BH
WP BH
 
CSS NA PRÁTICA
CSS NA PRÁTICACSS NA PRÁTICA
CSS NA PRÁTICA
 
A interface nunca está pronta (1)
A interface nunca está pronta (1)A interface nunca está pronta (1)
A interface nunca está pronta (1)
 
Curso HTML, CSS e JavaScript
Curso HTML, CSS e JavaScriptCurso HTML, CSS e JavaScript
Curso HTML, CSS e JavaScript
 
Design Emocional e a Experiência Digital
Design Emocional e a Experiência DigitalDesign Emocional e a Experiência Digital
Design Emocional e a Experiência Digital
 
Upload
UploadUpload
Upload
 
curso de html
curso de htmlcurso de html
curso de html
 
Design para a web - da interface ao branding
Design para a web - da interface ao brandingDesign para a web - da interface ao branding
Design para a web - da interface ao branding
 
Apresentacao html css
Apresentacao html cssApresentacao html css
Apresentacao html css
 
Resumo html 2012 exercícios 01 21
Resumo html 2012   exercícios 01 21Resumo html 2012   exercícios 01 21
Resumo html 2012 exercícios 01 21
 
Design de navegação web
Design de navegação webDesign de navegação web
Design de navegação web
 

Similar to HTML/CSS patterns for optimized layouts and semantics

Similar to HTML/CSS patterns for optimized layouts and semantics (20)

GBD Pattern
GBD PatternGBD Pattern
GBD Pattern
 
Arquitetura CSS
Arquitetura CSSArquitetura CSS
Arquitetura CSS
 
CSS {Grid} Layout: It's evolution baby
CSS {Grid} Layout: It's evolution babyCSS {Grid} Layout: It's evolution baby
CSS {Grid} Layout: It's evolution baby
 
Modular CSS - Projetando CSS para aplicativos
Modular CSS - Projetando CSS para aplicativosModular CSS - Projetando CSS para aplicativos
Modular CSS - Projetando CSS para aplicativos
 
Um guia bem básico de Bootstrap + Less
Um guia bem básico de Bootstrap + LessUm guia bem básico de Bootstrap + Less
Um guia bem básico de Bootstrap + Less
 
Web 3.0
Web 3.0Web 3.0
Web 3.0
 
Dicas para criação rápida de projectos WEB
Dicas para criação rápida de projectos WEBDicas para criação rápida de projectos WEB
Dicas para criação rápida de projectos WEB
 
Como montar uma App em diversas resoluções de tela
Como montar uma App em diversas resoluções de telaComo montar uma App em diversas resoluções de tela
Como montar uma App em diversas resoluções de tela
 
SVG Essencial
SVG EssencialSVG Essencial
SVG Essencial
 
Web em grande estilo com CSS 3
Web em grande estilo com CSS 3Web em grande estilo com CSS 3
Web em grande estilo com CSS 3
 
Design Responsivo com Sass
Design Responsivo com SassDesign Responsivo com Sass
Design Responsivo com Sass
 
Gráficos Vetoriais na Web com SVG
Gráficos Vetoriais na Web com SVGGráficos Vetoriais na Web com SVG
Gráficos Vetoriais na Web com SVG
 
Componentes para a Web
Componentes para a WebComponentes para a Web
Componentes para a Web
 
Usando a data grid wpf
Usando a data grid wpfUsando a data grid wpf
Usando a data grid wpf
 
CSS
CSSCSS
CSS
 
Mini-curso Twitter Boostrap 3.3.5
Mini-curso Twitter Boostrap 3.3.5Mini-curso Twitter Boostrap 3.3.5
Mini-curso Twitter Boostrap 3.3.5
 
Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheiras
 
Gabarito ad1 web_2012_2
Gabarito ad1 web_2012_2Gabarito ad1 web_2012_2
Gabarito ad1 web_2012_2
 
Blueprint CSS
Blueprint CSSBlueprint CSS
Blueprint CSS
 

HTML/CSS patterns for optimized layouts and semantics

  • 1. globo .com HTML/CSS Patterns Leonardo Quixadá
  • 2. 1 O Que Não Vou Apresentar
  • 3. O Que Não Vou Apresentar ‣ Fundamentos de seletores ‣ Aplicação de propriedades ‣ Tableless ‣ Performance ‣ CSS3
  • 4. 2 HTML & CSS Hoje
  • 5. Guidelines ‣ CSS ‣ Reset.css ou normalize.css ‣ Grids ‣ HTML & CSS ‣ Tableless
  • 6. Mas e o resto? #comofaz
  • 7.
  • 8. Problemas comuns ‣ Layout em CSS não é fácil de aplicar, nem de explicar ‣ Não existe sandbox, há muitos conflitos de propriedades ‣ Inconsistência cross-browser ‣ Não é automaticamente testável
  • 10. 3 O Curso
  • 11. Estrutura para HTML & CSS ‣ Agilizar a criação e a manutenção de componentes. ‣ Melhorar a limpeza, a clareza e a flexibilidade tanto do HTML, como do CSS. ‣ Diminuir o tempo desperdiçado fazendo ajustes para um browser em específico.
  • 12. Regras de Ouro 1. Separar container de conteúdo 2. Separar estrutura de estética -- Nicole Sulivan (Yahoo!), em OOCSS
  • 13. Cronograma HTML CSS Patterns Patterns Grids Seletores Estratégias Minidocumentos Propriedades de Mundo Validação Microsemântica Layout Pós-IE6
  • 14. 4 Modelo Globocore
  • 15. Modelo Globocore page macroarea área box (widgets & destaques)
  • 16. 5 HTML Patterns
  • 17. HTML Patterns ‣ Grids ‣ Minidocumentos ‣ Microsemântica
  • 18. 5.1 Grids
  • 19. Grids “Todo trabalho de design envolve a solução de problemas em níveis visuais e organizativos. Figuras, símbolos, massa de textos, títulos e tabelas devem se reunir para transmitir informação. O grid é uma maneira de juntar esses elementos.” - Luiz Agner, designer, arquiteto e professor Fonte: http://www.slideshare.net/agner/a-construo-do-grid
  • 20. Grids “O grid introduz uma ordem sistemática num leiaute e permite que o designer diagrame uma grande quantidade de informação. Também permite vários colaboradores num mesmo projeto.” - Luiz Agner, designer, arquiteto e professor Fonte: http://www.slideshare.net/agner/a-construo-do-grid
  • 21. Grids “Vantagens do grid: - Clareza - Eficiência - Economia - Identidade” - Luiz Agner, designer, arquiteto e professor Fonte: http://www.slideshare.net/agner/a-construo-do-grid
  • 22. Grids ‣ Padrão de-facto para layouts em CSS. ‣ Permite o intercâmbio de componentes entre produtos ‣ Define o espaço horizontal que os componentes podem ocupar (o conteúdo dos componentes definem o espaço vertical) ‣ Dada uma largura fixa, pode-se compor “linhas” com até 12 colunas.
  • 23. Grids
  • 25. Grids linhas
  • 26. Grids: Colunas ‣ 1 unidade ou coluna de 1: <div class=”glb-grid-1”></div> width (60px) margin-left (10px) margin-right (10px)
  • 27. Grids: Colunas ‣ 2 unidades: grid 1 grid-1 10px 60px 20px 60px 10px ‣ coluna de 2: 10px 140px 10px grid-2 <div class=”glb-grid-2”></div>
  • 28. Grids: Colunas ‣ 3 unidades: grid 1 grid-1 grid-1 10px 60px 20px 60px 20px 60px 10px grid 1 grid-2 10px 60px 20px 140px 10px ‣ coluna de 3: 10px 220px 10px grid-3 <div class=”glb-grid-3”></div>
  • 29. Grids: Colunas ‣ 4 unidades: grid 1 grid-1 grid-1 grid-1 10px 60px 20px 60px 20px 60px 20px 60px 10px grid 1 grid-2 grid-1 10px 60px 20px 140px 20px 60px 10px ‣ coluna de 4: 10px 300px 10px grid-4 <div class=”glb-grid-4”></div>
  • 30. Grids
  • 31. Grids: Linhas ‣ As linhas podem ser definidas por blocos ou unidades do grid. glb-bloco glb-grid 2 glb-grid-8 glb-grid-2 <div class=”glb-bloco”> <div class=”glb-grid-2”></div> <div class=”glb-grid-8”></div> <div class=”glb-grid-2”></div> </div>
  • 32. Grids: Linhas ‣ As linhas podem ser definidas por blocos ou unidades do grid. glb-grid-4 glb-grid 1 glb-grid-2 glb-grid-1 <div class=”glb-grid-4”> <div class=”glb-grid-1 glb-primeiro”></div> <div class=”glb-grid-2”></div> <div class=”glb-grid-1 glb-ultimo”></div> </div>
  • 33. Grids: Exemplo <body> <div id=”glb-doc”> <div class=”glb-topo”> ... </div> <div class=”glb-conteudo”> ... </div> <div class=”glb-rodape”> ... </div> </div> </body>
  • 34. Grids: Exemplo <body> <div id=”glb-doc”> <div class=”glb-topo”> ... </div> <div class=”glb-conteudo”> ... </div> <div class=”glb-rodape”> ... </div> </div> </body>
  • 35. Grids: Exemplo <div class="glb-topo"> <div class="glb-bloco"> <div class="glb-grid-4"></div> <div class="glb-grid-4"></div> <div class="glb-grid-4"></div> </div> </div>
  • 36. Grids: Exemplo <body> <div id=”glb-doc”> <div class=”glb-topo”> ... </div> <div class=”glb-conteudo”> ... </div> <div class=”glb-rodape”> ... </div> </div> </body>
  • 37. Grids: Exemplo <div class="glb-conteudo"> <div class="glb-bloco"> <div class="glb-grid-8"></div> <div class="glb-grid-4"></div> </div> <div class="glb-bloco"> <div class="glb-grid-4"></div> <div class="glb-grid-4"></div> <div class="glb-grid-4"></div> </div> </div>
  • 38. Grids: Exemplo <body> <div id=”glb-doc”> <div class=”glb-topo”> ... </div> <div class=”glb-conteudo”> ... </div> <div class=”glb-rodape”> ... </div> </div> </body>
  • 39. Grids: Exemplo <div class="glb-rodape"> <div class="glb-bloco"> <div class="glb-grid-12"></div> </div> </div>
  • 41. Exercício: Implementar header 1 2 3 4 5 6 7 8 9 10 footer
  • 42. 5.2 Minidocumentos
  • 43. Minidocumentos ‣ Pattern que subdivide páginas web em pequenos “documentos” autosuficientes. ‣ É como um pequeno grid para os componentes que vão preencher os compartimentos da estante. ‣ Juntando-se vários componentes formam-se composições sólidas.
  • 44. Minidocumentos ‣ Podem ser utilizados por widgets, destaques, forms, menus, etc... ‣ Baseado nas novas tags do HTML 5: article, section, header e footer.
  • 49. Menu & Widget Lateral
  • 50. Menu & Widget Lateral Header
  • 51. Menu & Widget Lateral Content
  • 52. Menu & Widget Lateral Footer
  • 53. Form
  • 54. Form
  • 55. Form
  • 56. Form
  • 64. Pattern Visual Container Header Content Footer
  • 65. Pattern Visual Container Títulos, menus, logos... Todo o conteúdo Links “veja mais”, botões, informações extras...
  • 66. Pattern HTML <div class=”container”> <div class=”header”> ... </div> <div class=”content”> ... </div> <div class=”footer”> ... </div> </div>
  • 67. Pattern Página <div class=”glb-doc”> <div class=”glb-top”> ... </div> <div class=”glb-content”> ... </div> <div class=”glb-base”> ... </div> </div>
  • 68. Pattern Matéria <div class=”materia”> <div class=”header”> ... </div> <div class=”content”> ... </div> <div class=”base”> ... </div> </div>
  • 69. Pattern Box <div class=”box”> <div class=”header”> ... </div> <div class=”content”> ... </div> <div class=”footer”> ... </div> </div>
  • 70. Box Plantão <div class=”box box-plantao”> <div class=”header”> ... </div> <div class=”content”> ... </div> <div class=”footer”> ... </div> </div>
  • 71. Se você usasse HTML5... <section class=”box box-plantao”> <header> ... </header> <section> ... </section> <footer> ... </footer> </section>
  • 72. Box Plantão <div class=”box box-plantao”> <div class=”header”> ... </div> <div class=”content”> ... </div> <div class=”footer”> ... </div> </div>
  • 73. Box Plantão <div class=”box box-plantao”> <div class=”header”> ... </div> <div class=”content”> ... </div> <div class=”footer”> ... </div> </div>
  • 74. Box Plantão <div class=”box box-plantao”> <div class=”header”> ... </div> <!-- .header --> <div class=”content”> ... </div> <!-- .content --> <div class=”footer”> ... </div> <!-- .footer --> </div> <!-- .box-plantao -->
  • 75. Favor, não misturar <div>s ou .classes de grid com box.
  • 76. 5.3 Microsemântica
  • 77. Microsemântica ‣ Utilização de elementos semânticos para descrever dados através de tags e/ou classes. ‣ É uma variação dos Microdados e, antigamente, de Microformatos. ‣ Não serve paras os search engines, apenas melhora a clareza do código.
  • 78. Microsemântica ‣ É a partir daqui que se preocupa com: ‣ SEO ‣ Semântica ‣ Acessibilidade ‣ Microdados ‣ ...
  • 79. Microdados “Microdados é uma especificação WHATWG HTML5 usada para aninhar semântica dentro de conteúdos existentes em páginas web. Isso é feito usando atributos específicos: itemscope, itemtype, itemid, itemprop e itemref. Search engines, web crawlers, e navegadores podem extrair e processar microdados a partir de uma página web e usar isso para prover uma experiência de navegação mais rica para os usuários.” - Wikipedia
  • 80. Microdados: Exemplo <div> <h1>Avatar</h1> <span> Director: James Cameron (born August 16, 1954) </span> <span>Science fiction</span> <a href="/movies/avatar.html">Trailer</a> </div>
  • 81. Microdados: Exemplo <div itemscope> <h1>Avatar</h1> <span> Director: James Cameron (born August 16, 1954) </span> <span>Science fiction</span> <a href="/movies/avatar.html">Trailer</a> </div>
  • 82. Microdados: Exemplo <div itemscope itemtype="http://schema.org/Movie"> <h1>Avatar</h1> <span> Director: James Cameron (born August 16, 1954) </span> <span>Science fiction</span> <a href="/movies/avatar.html">Trailer</a> </div>
  • 83. Microdados: Exemplo <div itemscope itemtype="http://schema.org/Movie"> <h1 itemprop="name">Avatar</h1> <span> Director: <span itemprop="director">James Cameron</span> (born August 16, 1954) </span> <span itemprop="genre">Science fiction</span> <a href="/movies/avatar.html" itemprop="trailer">Trailer</a> </div>
  • 84. Microdados: Exemplo <div itemscope itemtype="http://schema.org/Movie"> <h1 itemprop="name">Avatar</h1> <span itemprop="director" itemscope itemtype="http://schema.org/ Person"> Director: <span itemprop="name">James Cameron</span> (born <span itemprop="birthDate">August 16, 1954)</span> </span> <span itemprop="genre">Science fiction</span> <a href="/movies/avatar.html" itemprop="trailer">Trailer</a> </div>
  • 85. Microdados ‣ Mais exemplos em: http://schema.org
  • 86. Microformatos ‣ Cartões <div class="vcard"> <span class="fn">Nome</span> <span class="org">Organização</span> <span class="tel">604-555-1234</span> <a class="url" href="http://site.com/">Website</a> </div> ‣ Calendário ‣ Reviews
  • 87. Microsemântica ‣ Por que não fazer nossos próprios microdados? ‣ HTML com mais semântica e mais entendível.
  • 88. Box Plantão <div class=”box box-plantao”> <div class=”header”> ... </div> <div class=”content”> ... </div> <div class=”footer”> .... </div> </div>
  • 89. Box Plantão <div class=”box box-plantao”> <div class=”header”> ... </div> <div class=”content”> ... </div> <div class=”footer”> .... </div> </div>
  • 90. Box Plantão <div class=”box box-plantao”> ... <div class=”content”> <ul> <li> ... </li> <li> ... </li> ... </ul> </div> ... </div>
  • 91. Box Plantão <ul> <li> <a class=”noticia” href=”#”> <img class=”thumb” src=”foto.jpg” /> <span class=”chapeu”></span> <span class=”titulo”></span> </a> </li> ... </ul>
  • 92. Box Plantão <ul> <li> <a class=”noticia” href=”#”> <img class=”thumb” src=”foto.jpg” /> <span class=”chapeu”></span> <span class=”titulo”></span> </a> </li> ... </ul> não dizem nada
  • 93. Box Plantão <ul> <li> <a class=”noticia” href=”#”> <img class=”thumb” src=”foto.jpg” /> <span class=”chapeu”></span> <span class=”titulo”></span> </a> </li> ... </ul> semântico!!!
  • 94. A partir daqui, nada de grid, e evite ao máximo utilizar <div>s.
  • 95. Box Plantão div.box-plantao a { ... } div.box-plantao a.noticia { ... } div.box-plantao span.chapeu { ... } div.box-plantao span.titulo { ... } div.box-plantao ul { ... }
  • 96. Vejamos rapidamente outro box...
  • 98. Box Previsão do Tempo Vc consegue classificar semanticamente o content do box?
  • 101. Outro exemplo.... cite.brother-tweet span.brother-idade span.brother-cidade-natal span.brother-signo cite.brother-tweet-tempo span.brother-time
  • 102. Dica! <div> para descrever estrutura, <span> para descrever dados
  • 103. Exercício ‣ Transforme um box em HTML:
  • 104. 6 CSS Patterns
  • 105. Estratégias ‣ Organizando Seletores ‣ Organizando Propriedades ‣ Elaborando Layouts
  • 106. 6.1 Organizando Seletores
  • 107. Organizando Seletores ‣ Namespaces: define a área de atuação dos seletores e os agrupa visualmente. ‣ tag[.class]. ‣ Separação por blocos. ‣ Ordem: especificidade, alfabética.
  • 108. Organizando Seletores ‣ Namespaces: define a área de atuação dos seletores e os agrupa visualmente. ‣ tag[.class]. ‣ Separação por blocos. ‣ Ordem: especificidade, alfabética.
  • 109. Namespaces div.box-plantao { ... } div.box-plantao a { ... } div.box-plantao h6 { ... } div.box-plantao li { ... } div.box-plantao span.barra { ... } div.box-plantao ul { ... }
  • 110. Namespaces div.box-plantao { ... } div.box-plantao a { ... } div.box-plantao h6 { ... } div.box-plantao li { ... } div.box-plantao span.barra { ... } div.box-plantao ul { ... } Contexto ou Namespace
  • 111. Organizando Seletores ‣ Namespaces: define a área de atuação dos seletores e os agrupa visualmente. ‣ tag[.class]. ‣ Separação por blocos. ‣ Ordem: especificidade, alfabética.
  • 112. tag[.class] div.box-plantao { ... } div.box-plantao a { ... } div.box-plantao h6 { ... } div.box-plantao li { ... } div.box-plantao span.barra { ... } div.box-plantao ul { ... } tag[.class] 1
  • 113. tag[.class] div.box-plantao { ... } div.box-plantao a { ... } div.box-plantao h6 { ... } div.box-plantao li { ... } div.box-plantao span.barra { ... } div.box-plantao ul { ... } tag[.class] 2
  • 114. tag[.class] ‣ jQuery $(‘div.box-plantao span.barra’) ou $(‘div.box-plantao’).find(‘span.barra’) (para cachear o contexto) ‣ Lxml html = lxml.etree.fromstring(response.content) html.cssselect(‘div.box-plantao span.barra’) ‣ splinter browser = Browser() browser.find_by_css(‘div.box-plantao span.barra’)
  • 115. tag[.class] ‣ Problemas de se utilizar só a classe: ‣ Desenvolvedores são muito ruins em nomear coisas. ‣ O nome da tag é tão objetivo quanto uma ordem alfabética. Melhor utilizar os tokens já predefinidos do que ficar elaborando nomes malucos. ‣ Classes abertas indicam pra outros devs, que é permitido colocar a classe em qualquer tag.
  • 116. tag[.class] ‣ Exemplos: .fieldset-metadados fieldset.metadados (exemplo do widget SEO) .span_tag span.tag (catálogo de vídeo v1.0) .formulario-criacao-usuario form.criacao-usuario ‣ Só utilizar classes abertas quando é realmente necessário aplicar a mais de uma tag (exemplo th, td).
  • 117. tag[.class] ‣ Recomendo sempre ter 2 tag[.class]. Claro e conciso! ‣ Mínimo de 1 tag[.class] div.box-plantao { ... } ‣ Máximo (prometa!) de 3 tag[.class] div.box-plantao ul.principal li.ativo { ... }
  • 118. Organizando Seletores ‣ Namespaces: define a área de atuação dos seletores e os agrupa visualmente. ‣ tag[.class]. ‣ Separação por blocos. ‣ Ordem: especificidade, alfabética.
  • 119. Separação por blocos div.box { ... } div.box a { ... } div.box span.barra { ... } div.box-plantao h6 { ... } div.box-plantao li { ... } div.box-plantao ul { ... } div#box-plantao-principal h6 { ... } div#box-plantao-principal li { ... }
  • 120. Separação por blocos div.box { ... } bloco div.box a { ... } div.box span.barra { ... } div.box-plantao h6 { ... } bloco div.box-plantao li { ... } div.box-plantao ul { ... } div#box-plantao-principal h6 { ... } bloco div#box-plantao-principal li { ... }
  • 121. Ordem menos específico div.box { ... } div.box a { ... } div.box span.barra { ... } div.box-plantao h6 { ... } div.box-plantao li { ... } div.box-plantao ul { ... } div#box-plantao-principal h6 { ... } div#box-plantao-principal li { ... } mais específico
  • 122. Ordem div.box { ... } div.box a { ... } div.box span.barra { ... } ordem alfabética div.box-plantao h6 { ... } div.box-plantao li { ... } div.box-plantao ul { ... } div#box-plantao-principal h6 { ... } div#box-plantao-principal li { ... }
  • 124. Teu HTML ficaria assim... <div class=”box box-plantao”> <div class=”header”> <h6>primeira página</h6> </div> <div class=”content”> <ul> <li></li> ... </ul> </div> <div class=”footer”> <a href=”#”>veja mais</a> </div> </div>
  • 125. E teu CSS ficaria assim... div.box { ... } div.box a { ... } div.box span.barra { ... } div.box-plantao h6 { ... } div.box-plantao li { ... } div.box-plantao ul { ... } div#box-plantao-principal h6 { ... } div#box-plantao-principal li { ... }
  • 126. 6.2 Organizando Propriedades
  • 127. Organizando Propriedades ‣ Uma propriedade:valor por linha ‣ Separar propriedades por contexto
  • 128. Organizando Propriedades ‣ Uma propriedade:valor por linha ‣ Separar propriedades por contexto
  • 129. Uma propriedade por linha ‣ Facilita diffs!
  • 130. Uma propriedade por linha ‣ Inserir comentários é mais tranquilo
  • 131. Uma propriedade por linha ‣ CSS 3 com vendor prefix são bem longos e variados .box_shadow { -webkit-box-shadow: 0px 0px 4px #ffffff; -moz-box-shadow: 0px 0px 4px #ffffff; box-shadow: 0px 0px 4px #ffffff; }
  • 132. Uma propriedade por linha ‣ CSS 3 com vendor prefix são bem longos e variados .box_gradient { background-color: #444444; /* Saf4+, Chrome */ background-image: -webkit-gradient(linear, left top, left bottom, from(#444444), to(#999999)); /* Chrome 10+, Saf5.1+, iOS 5+ */ background-image: -webkit-linear-gradient(top, #444444, #999999); background-image: -moz-linear-gradient(top, #444444, #999999); /* FF3.6 */ background-image: -ms-linear-gradient(top, #444444, #999999); /* IE10 */ /* Opera 11.10+ */ background-image: -o-linear-gradient(top, #444444, #999999); background-image: linear-gradient(top, #444444, #999999); filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#444444', EndColorStr='#999999'); /* IE6-IE9 */ }
  • 133. Organizando Propriedades ‣ Uma propriedade:valor por linha ‣ Separar propriedades por contexto
  • 134. Organizando Propriedades ‣ 1o grupo: layout position, display, float, top, left, bottom, right, margin, padding, width, height ‣ 2o grupo: texto color, font, letter-spacing, line-height, text-align, text-decoration, text-transform... ‣ 3o grupo: restante border, z-index, overflow, ...
  • 136. 6.3 Elaborando Layouts
  • 137. Prequel ‣ 1o grupo: layout position, display, float, top, left, bottom, right, margin, padding, width, height ‣ 2o grupo: texto color, font, letter-spacing, line-height, text-align, text-decoration, text-transform... ‣ 3o grupo: restante border, z-index, overflow, ...
  • 138. Prequel ‣ 1o grupo: layout position, display, float, top, left, bottom, right, margin, padding, width, height ‣ 2o grupo: texto color, font, letter-spacing, line-height, text-align, text-decoration, text-transform... ‣ 3o grupo: restante border, z-index, overflow, ...
  • 139. Prequel ‣ 1o grupo: layout position, display, float, top, left, bottom, right, margin, padding, width, height ‣ 2o grupo: texto color, font, letter-spacing, line-height, text-align, text-decoration, text-transform... ‣ 3o grupo: restante border, z-index, overflow, ...
  • 141. Float:Left contra o Mundo ‣ O float serve para alinhar à esquerda, à direita ou não alinhar (none). ‣ A propriedade tem a ver mais com conteúdo do que com boxes. ‣ Suas dimensões são reduzidas para acomodar apenas o próprio conteúdo ao contrário de display:block. ‣ É fonte de muitas confusões no mundo CSS.
  • 143. Float:Left em Quadrinhos A B C ‣ A ‣ B { float:left; } ‣ C
  • 144. Float:Left em Quadrinhos A B C ‣ Box B perdeu espaço no flow de boxes, mas ocupou espaço à esquerda do conteúdo C, ou seja, virou conteúdo.
  • 146. Float:Left em Quadrinhos A B C ‣ A ‣ B { float:left; } ‣ C { float:left; }
  • 147. Float:Left em Quadrinhos A A B C ‣ B se alinhou à esquerda antes de C. Como saíram do flow de boxes, a altura de A diminuiu. ‣ É como se estivessem caçando conteúdo abaixo.
  • 148. Float:Left contra o Mundo ‣ Float:left/right tem um funcionamento difícil de entender e de explicar. ‣ A maioria dos bugs nos IEs encontrados e registrados pelo Position Is Everything tem o float envolvido. http://www.positioniseverything.net/explorer.html ‣ Recomendação: evitar ao máximo.
  • 149. Alternativas ao float:left { inline display block inline-block { static relative position absolute fixed
  • 151. Antes de existir o CSS... ‣ No HTML, os elementos são divididos em inline-level (também chamado de text-level) e block-level. ‣ Elementos inline-level (também chamados de text- level) são os que convivem lado-a-lado com texto e outro elementos inline-level. ‣ Elementos block-level são containers para elementos inline-level, textos e outros elementos block-level
  • 152. Antes de existir o CSS... Elementos inline-level Elementos block-level <input> <a> <form> <label> <img> <blockquote> <div> <li> <td> <button> <cite> <em> <fieldset> <th> <strong> <span> <p> <textarea> <select> <h1>, <h2>, <h3>, <h4>,<h5>,<h6>
  • 153. Antes de existir o CSS... Elementos inline-level <dentro de> Elementos block-level <input> <a> <form> W3C <label> <img> <blockquote> <div> <li> <td> <button> <cite> <em> <fieldset> <th> <strong> <span> <p> <textarea> <select> <h1>, <h2>, <h3>, <h4>,<h5>,<h6>
  • 154. Antes de existir o CSS... Elementos inline-level <dentro de> Elementos block-level <input> <a> <form> W3C <label> <img> <blockquote> <div> <li> <td> <button> <cite> <em> W3C <fieldset> <th> <strong> <span> <p> <textarea> <select> <h1>, <h2>, <h3>, <h4>,<h5>,<h6>
  • 155. Antes de existir o CSS... Elementos inline-level <dentro de> Elementos block-level <input> <a> <form> W3C <label> <img> <blockquote> <div> <li> <td> <button> <cite> <em> W3C <fieldset> <th> <strong> <span> <p> <textarea> <select> <h1>, <h2>, <h3>, <h4>,<h5>,<h6> W3C
  • 156. Antes de existir o CSS... ‣ Leitura recomendada (é curto, prometo!): http://www.w3.org/TR/html401/struct/global.html#h-7.5.3 ‣ Regras da estrutura HTML: http://www.w3.org/TR/html4/strict.dtd
  • 157. Nunca, nunca coloque elementos block-level dentro de inline-level.
  • 159. Displays ‣ Os dois tipos básicos de display são: ‣ display:block permite um elemento ser dimensionado com width, height, padding, margin, etc. ‣ display:inline permite ficar lado-a-lado com outros elementos e textos. Não pode ser dimensionado com width e height. Apenas com valores laterais de margin.
  • 160. Display:Inline-block ‣ Junta características de elementos inlines e blocks. ‣ Permite ficar lado-a-lado com outros elementos e ser dimensionados. ‣ É mais intuitivo de aplicar e explicar. ‣ É tratado como parte do texto.
  • 161. Display:Inline-block ‣ Propriedade também consistente no cross-browser. ‣ No IE7, é simulado por *display:inline e *zoom:1. * isto não é uma nota de rodapé, é um hack pro IE.
  • 162. Display:Inline-block Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc massa sapien, rutrum ac dignissim at, iaculis sit amet libero. Aenean vehicula tortor vitae eros pulvinar quis consectetur arcu suscipit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc massa sapien.Nunc massa sapien, rutrum ac dignissim at, iaculis sit amet libero. Aenean vehicula tortor vitae eros pulvinar quis consectetur arcu suscipit. display:inline-block
  • 164. Exemplo de Uso display:inline-block
  • 165. Exemplo de Uso display:inline-block
  • 167. Position:Absolute ‣ Propriedade bem consistente cross-browser. Portanto bem mais seguro de se usar do que o float. ‣ É sempre utilizado com uma ou mais das seguintes propriedades: top, bottom, left, right.
  • 168. Position:Absolute <div> com position:relative
  • 169. Position:Absolute <div> com <div> sem position:relative position
  • 170. Position:Absolute <div> com <div> sem <div> com position:relative position position:absolute
  • 171. Position:Absolute top:150px left:300px <div> com <div> sem <div> com position:relative position position:absolute
  • 174. Recomendação ‣ Tente utilizar na seguinte ordem: 1.não usar nada (css padrão do navegador) 2.display:inline-block 3.position:absolute ... ... 4.float:left
  • 175. Exercício ‣ Fazer o seguinte box: ‣ Utilize o jsfiddle.net e o dummyimage.com
  • 176. 7 Estratégias de Validação
  • 177. Estratégias de Validação ‣ Em vs Px ‣ Hacks
  • 178. 7.1 Em vs. Px
  • 179. Em vs Px ‣ “em” é uma unidade de medida relativa e mais flexível. 1em = 100%, logo 1.02em=102%. ‣ “px” é uma unidade de medida absoluta e mais intuitiva. 1px é 1px e ponto final.
  • 180. Funcionamento do “em” 12px 1.2em 0.714em 14,4px 10px
  • 181. Em vs Px ‣ As principais vantagens do “em” são: ‣ O tamanho da página aumenta conforme o tamanho da fonte pré-definida pelo usuário em seu navegador. ‣ A funcionalidade aumentar/diminuir fonte do IE6/7 só funciona com unidades de medidas. ‣ Se adapta melhor em telas pequenas como a de celulares.
  • 182. Em vs Px ‣ As principais desvantagens do “em” são: ‣ Número quebrado gera inconsistência entre navegadores por causa do cálculo de conversão para px. Ex.: 1.33em pode ser 15px em um navegador, e 16px em outro. ‣ Todo valor em “em” tem que ser previamente calculado de acordo com o elemento pai.
  • 183. Em vs Px ‣ Vantagens do “px”: ‣ Previsibilidade: 1px = 1px e pronto! ‣ É a unidade padrão dos designers
  • 184. Recomendação ‣ Use apenas “px.” O desenvolvimento front-end já é instável o suficiente. ‣ Caso esteja interessado na flexibilidade do “em,” considere utilizar o “rem.”
  • 185. 7.2 Hacks
  • 186. Hacks ‣ Evite ao máximo utilizá-los. ‣ É completamente possível fazer o mesmo CSS para Firefox, Chrome, Safari e Opera. (excetuando propriedades novas como border-radius e transition) ‣ Para IE o transtorno é tão grande que compensa utilizar hacks.
  • 187. Hacks: Quando usar? ‣ O mais recomendado no mercado é fazer conditional comments. ‣ Mas a experiência mostra que da seguinte forma é mais manutenível (na ordem): ‣ IE 9-: margin: 15px9; ‣ IE 7-: *margin: 15px; ‣ IE 6-: _margin: 15px;
  • 188. Validação de Browsers Ordem de preferência (ou audiência) Ordem de recência 9 8 7
  • 190. Referências ‣ CSS Compatibility and Internet Explorer (http://msdn.microsoft.com/en-us/library/cc351024(VS.85).aspx) ‣ When Can I Use... (http://caniuse.com) ‣ CSS Frameworks (video com um overview) (http://www.youtube.com/watch?v=EuhDIRzUJgc) ‣ Explorer Exposed! (http://www.positioniseverything.net/explorer.html)
  • 191. Ferramentas ‣ jsFiddle.net (http://jsfiddle.net) ‣ Dummy Images (http://dummyimage.com) ‣ Lorem Ipsum (http://lipsum.com)
  • 192. Exemplos e Exercícios ‣ Exemplo de Grid (http://jsfiddle.net/lquixada/KVSNn/show/) ‣ Exercício do Grid (http://jsfiddle.net/lquixada/qxxkK/show/) ‣ Exercício do Box Nas Novelas (http://jsfiddle.net/lquixada/6mWM7/show/)

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. A cada dia nossos layouts ficam cada vez mais rebuscados, ser&amp;#xE1; que apenas essas abordagens s&amp;#xE3;o eficientes?\n
  6. \n
  7. - Voc&amp;#xEA; olha o HTML e o CSS do cara do lado ou de terceiros e fala: &amp;#x201C;meu deus!&amp;#x201D; Salada de tags\n- Cada um por si. Faltam patterns.\n- Em Rails, temos o Model-View-Controller\n- Em Django, temos o Model-View-Template\n
  8. \n
  9. \n
  10. \n
  11. - Limpeza: evitar class-itis e div-itis\n- Clareza: utilizar tags sem&amp;#xE2;nticas e classes\n- Ao inv&amp;#xE9;s de corrigir bugs, evit&amp;#xE1;-los\n\n
  12. - Slide mais importante: Resumo do curso\n- Container e conte&amp;#xFA;do est&amp;#xE3;o dentro de estrutura\n
  13. \n
  14. \n
  15. Boa parte do que fazemos no CDA s&amp;#xE3;o boxes. &amp;#xC9; o que vamos nos concentrar no curso.\n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. - Grids s&amp;#xE3;o como estantes que alocam espa&amp;#xE7;os para os componentes\n- &amp;#xC9; como se os espa&amp;#xE7;os verticais dos compartimentos pudessem variar\n
  24. \n
  25. - Existem v&amp;#xE1;rios tipos de grid na web: blueprint, 960 (mais famoso), YUI Grids, etc.\n- Em geral seguem os mesmos princ&amp;#xED;pios, s&amp;#xF3; mudando alguns detalhes de implementa&amp;#xE7;&amp;#xE3;o.\n
  26. - Vamos usar o glb-grid como exemplo.\n
  27. \n
  28. \n
  29. \n
  30. \n
  31. - um bloco n&amp;#xE3;o tem margens\n- glb-bloco &amp;#xE9; um glb-grid-12 sem margins\n
  32. - Na pr&amp;#xE1;tica, utilizamos mais grid-4, grid-8 e grid-12\n- glb-bloco &amp;#xE9; um glb-grid-12 sem margins\n\n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. - Lembrar rob&amp;#xF4;zinho do BBB\n
  64. \n
  65. \n
  66. \n
  67. se poss&amp;#xED;vel utilizar tags HTML5: &lt;section&gt;, &lt;header&gt; e &lt;footer&gt;\n
  68. Todo o css que vier dentro do &lt;div class=&amp;#x201D;box-plantao&amp;#x201D;&gt; ser&amp;#xE1; a partir dessa classe.\n
  69. \n
  70. \n
  71. \n
  72. - Coment&amp;#xE1;rios, de prefer&amp;#xEA;ncia, din&amp;#xE2;micos.\n
  73. \n
  74. \n
  75. - Nativamente inline: &lt;a&gt;, &lt;input&gt;, &lt;img&gt;, &lt;span&gt;, etc...\n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. Vamos dar um zoom!\n
  89. Perceba que s&amp;#xF3; utilizei elementos inline, nenhum block. Blocks estruturam, inlines apresentam.\nNunca, nunca colocar um block dentro de um inline.\n
  90. Sugest&amp;#xF5;es: chapeu, plantao-chapeu, box-plantao-chapeu\n
  91. \n
  92. Nada de grids aqui dentro. Deixa o componente mais independente de grids. Ou seja, &amp;#xE9; poss&amp;#xED;vel alterar o grid da p&amp;#xE1;gina sem afetar o componente.\n
  93. Spoiler!\n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. Mostrar os diferentes contextos\n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. - Fica mais f&amp;#xE1;cil fazer um git blame tamb&amp;#xE9;m.\n
  128. \n
  129. \n
  130. - Se o arquivo come&amp;#xE7;ar a ficar longo demais, melhor quebrar em arquivos menores.\n
  131. \n
  132. Problema da ordem alfab&amp;#xE9;tica: width longe do height, top longe do bottom, etc...\n
  133. Permite ser sobrescrito para ser customiz&amp;#xE1;vel em outros contextos.\n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. Utilizar jsfiddle.net\n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n
  146. Combina&amp;#xE7;&amp;#xE3;o bomb&amp;#xE1;stica: IE6 + float:left\n
  147. Utilizar jsfiddle.net\n
  148. \n
  149. \n
  150. \n
  151. \n
  152. \n
  153. \n
  154. \n
  155. Al&amp;#xE9;m de n&amp;#xE3;o fazer sentido, pode gerar efeitos colaterais.\n
  156. \n
  157. http://jsfiddle.net/lquixada/P3ED7/\n
  158. \n
  159. Mostrar diferen&amp;#xE7;a entre display:inline e display:block no jsFiddle\n
  160. \n
  161. \n
  162. essa abordagem &amp;#xE9; mais usado quando h&amp;#xE1; uma depend&amp;#xEA;ncia de boxes.\n
  163. essa abordagem &amp;#xE9; mais usado quando h&amp;#xE1; uma depend&amp;#xEA;ncia de boxes.\n
  164. essa abordagem &amp;#xE9; mais usado quando h&amp;#xE1; uma depend&amp;#xEA;ncia de boxes.\n
  165. \n
  166. \n
  167. http://jsfiddle.net/lquixada/4umjF/\n
  168. \n
  169. \n
  170. \n
  171. Mostrar a diferen&amp;#xE7;a entre as positions relative, absolute, fixed e static no jsFiddle\n
  172. Essa abordagem &amp;#xE9; mais usado quando n&amp;#xE3;o h&amp;#xE1; uma depend&amp;#xEA;ncia de boxes.\nSe a foto sumir, o quote desloca?\n
  173. \n
  174. \n
  175. imagem: 145px x 85px\nbox: 620px de largura\ndura&amp;#xE7;&amp;#xE3;o: 1h\n
  176. \n
  177. \n
  178. \n
  179. \n
  180. \n
  181. \n
  182. \n
  183. \n
  184. \n
  185. \n
  186. \n
  187. - Modulariza&amp;#xE7;&amp;#xE3;o. Ao tirar um widget, n&amp;#xE3;o &amp;#xE9; necess&amp;#xE1;rio ca&amp;#xE7;ar propriedades em arquivos separados.\n- Algu&amp;#xE9;m conhece um hack para IE8-?\n
  188. ver forma de valida&amp;#xE7;&amp;#xE3;o coletiva\n
  189. \n
  190. Utilizar jsfiddle.net para demonstra&amp;#xE7;&amp;#xF5;es\n
  191. \n
  192. Utilizar jsfiddle.net\n
  193. \n
  194. \n
  195. - Lembrar que o SD se aplica a mat&amp;#xE9;rias e p&amp;#xE1;ginas inteiras\n- Estruturar HTML e CSS abrindo caminho para CSS3 e Javascript\n- Abrimos caminho para SEO, Microdata...\n
  196. \n
  197. \n
  198. \n
  199. \n