Baixe o app para aproveitar ainda mais
Prévia do material em texto
Design para Front End Bootcamp Desenvolvedor(a) Front End Rafaela Santos de Paula Marcolino 2021 Design para Front End – Página 2 de 112 Design para Front End Bootcamp Desenvolvedor(a) Front End Rafaela Santos de Paula Marcolino © Copyright do Instituto de Gestão e Tecnologia da Informação. Todos os direitos reservados. Design para Front End – Página 3 de 112 Sumário Capítulo 1. HTML Semântico ................................................................................. 7 Elementos de Seção ............................................................................................... 7 Elementos de Agrupamento (ou de Nível de Parágrafo) ........................................ 9 Elementos de Nível de Texto ................................................................................ 11 Capítulo 2. Abordagem (ou mindset) de desenvolvimento .................................. 14 Graceful Degradation ............................................................................................ 14 Progressive Enhancement .................................................................................... 14 Progressive Enhancement VS Graceful Degradation ........................................... 15 Capítulo 3. Acessibilidade (WCAG) ..................................................................... 17 Aural StyleSheets ................................................................................................. 19 Por que se preocupar com acessibilidade? .......................................................... 21 Capítulo 4. Metodologias CSS ............................................................................. 22 OOCSS ................................................................................................................. 22 SMACSS ............................................................................................................... 24 BEM ...................................................................................................................... 26 Outras metodologias ............................................................................................. 27 Capítulo 5. Boas Práticas em Desenvolvimento .................................................. 28 Boas Práticas: HTML ............................................................................................ 28 Boas Práticas: CSS .............................................................................................. 29 Boas Práticas: JavaScript ..................................................................................... 31 Boas Práticas: Acessibilidade ............................................................................... 32 Design para Front End – Página 4 de 112 Boas Práticas: Performance ................................................................................. 33 Capítulo 6. CSS Estilos ....................................................................................... 35 Propriedades CSS ................................................................................................ 35 Modelo de Caixa CSS ........................................................................................... 36 Seletores ............................................................................................................... 37 Funções ................................................................................................................ 39 Capítulo 7. CSS Pseudo atributos ....................................................................... 40 Pseudo-classes ..................................................................................................... 40 Pseudo-seletores .................................................................................................. 41 Pseudo-elementos ................................................................................................ 42 Capítulo 8. CSS Animações ................................................................................ 43 CSS Transform ..................................................................................................... 43 CSS Animation ...................................................................................................... 44 Exemplos de animação ......................................................................................... 46 Capítulo 9. Noções de UI e UX ............................................................................ 49 Design Systems .................................................................................................... 53 Atomic Design ....................................................................................................... 57 Vantagens em usar o Atomic Design ................................................................ 60 Capítulo 10. CSS Layout ....................................................................................... 62 Fluxo normal do CSS ............................................................................................ 62 Os primórdios do layout web................................................................................. 63 CSS Flexbox ......................................................................................................... 64 Design para Front End – Página 5 de 112 CSS Grid ............................................................................................................... 67 Capítulo 11. Técnicas de Design Responsivo ....................................................... 71 Responsive Design ............................................................................................... 71 Adaptive Design .................................................................................................... 72 Responsive vs Adaptive Design ............................................................................ 73 Capítulo 12. CSS User agent Styles ...................................................................... 75 CSS Normalize ..................................................................................................... 75 CSS Reset ............................................................................................................ 76 Normalize CSS & Reset CSS ............................................................................... 77 Capítulo 13. Framework CSS ................................................................................ 79 Bootstrap............................................................................................................... 79 Foundation ............................................................................................................ 80 Materialize............................................................................................................. 81 Bulma .................................................................................................................... 82 Tailwind ................................................................................................................. 82 Capítulo 14. Pré-processadores CSS .................................................................... 84 SASS .................................................................................................................... 84 Outros pré-processadores .................................................................................... 88 Capítulo 15. CSS-in-JS ......................................................................................... 89 Styled Components ............................................................................................... 90 Capítulo 16. Técnicas de Debugging .....................................................................93 Conhecendo o Chrome DevTools ......................................................................... 93 Design para Front End – Página 6 de 112 Elements ............................................................................................................... 93 Console ................................................................................................................. 95 Sources ................................................................................................................. 97 Network ................................................................................................................. 98 Capítulo 17. 7 passos para debugging ................................................................ 100 Etapa 1: Reproduzir o Código ............................................................................. 100 Etapa 2: Acessar o Chrome DevTools ................................................................ 101 Etapa 3: Pausar o código com Breakpoints ........................................................ 101 Etapa 4: Percorrer o código ................................................................................ 104 Etapa 5: Definir um ponto de interrupção da linha de código.............................. 104 Etapa 6: Conferir valores das Variáveis .............................................................. 105 Etapa 7: Aplicar uma correção ............................................................................ 108 Referências.............. .............................................................................................. 110 Design para Front End – Página 7 de 112 HTML Semântico A maioria dos sites segue convenções estruturais razoavelmente padronizadas; áreas típicas incluem um cabeçalho, um rodapé, uma barra lateral, uma barra de navegação e assim por diante. Como autores da web, vamos muitas vezes nomear os elementos div que usamos para designar mais claramente essas áreas (por exemplo, <div class="header">). No entanto, no que diz respeito ao próprio código, qualquer agente de usuário – e isso inclui um navegador da web, leitor de tela ou rastreador de mecanismo de pesquisa – que analisar esse conteúdo, não poderia dizer com certeza qual o propósito de cada um desses elementos div. HTML5 resolve esse problema com novos elementos semânticos. Em termos de especificação HTML, seus elementos se enquadram em um dos três grupos: ▪ Elementos de seção, para os traços mais amplos em uma página HTML. Estes são os tipos de elementos a serem usados nas áreas de cabeçalho, rodapé e barra lateral. ▪ Elementos de agrupamento (ou de nível de parágrafo), que são usados para agrupar elementos associados, como parágrafos, blockquotes e outros conteúdos dessa natureza. ▪ Elementos em nível de texto, que são os elementos que usamos para designar áreas especiais (ênfase), como uma seção de texto ou código em negrito ou itálico. É de suma importância utilizar corretamente cada elemento para deixar claro o objetivo do conteúdo em si. Elementos de Seção ▪ <main>: Design para Front End – Página 8 de 112 ‒ A tag <main> define o conteúdo principal da página; ‒ A área de conteúdo principal de um documento inclui conteúdo exclusivo para aquele documento e exclui o conteúdo que se repete em um conjunto de documentos, como links de navegação, informações de direitos autorais, logotipos e banners do site; ‒ Só pode haver um elemento <main> em um documento HTML e ele não deve ser usado como um elemento filho descendente de alguns dos outros elementos semânticos do HTML5. ▪ <header>: ‒ A tag <header> pode ser usada para a área principal do cabeçalho de um site, mas também como uma introdução a outro conteúdo, como uma seção de introdução em um elemento <article>, por exemplo; ‒ É possível usá-lo quantas vezes forem necessárias na mesma página: poderia ter um <header> dentro de cada <seção> em sua página, por exemplo. ▪ <footer>: ‒ A tag <footer> pode ser usada para a área principal do rodapé de um site, mas também como um conteúdo complementar ao final de outro conteúdo principal, como uma seção de links ou de copyright em um elemento <article>, por exemplo; ‒ É possível usá-lo quantas vezes forem necessárias na mesma página: poderia ter um <footer> dentro de cada <seção> em sua página, por exemplo. ▪ <aside>: ‒ A tag <aside> é usada para conteúdo que está tangencialmente relacionado ao conteúdo ao seu redor; Design para Front End – Página 9 de 112 ‒ Em termos práticos, é comumente usada para barras laterais ou conteúdo como uma “dica” sobre um assunto relacionado em uma postagem de blog. ▪ <section>: ‒ A tag <section> é usada para definir uma seção genérica de um documento ou aplicação; ‒ É usado como o elemento que agrega um determinado componente visual, por exemplo: seção de contato, seção de feed etc. ▪ <article>: ‒ A tag <article> é usada para envolver uma parte independente do conteúdo, ou seja, o conteúdo que você pretende usar em uma tag <article> pode ser copiado e colado em um site diferente e ainda assim fazer todo o sentido. ▪ <nav>: ‒ A tag <nav> é usada para envolver os principais links de navegação para outras páginas ou partes da mesma página. Elementos de Agrupamento (ou de Nível de Parágrafo) ▪ <p>: ‒ A tag <p> representa um parágrafo. ▪ <blockquote>: ‒ A tag <blockquote> representa uma seção que é citada de outra fonte. ▪ <hr>: Design para Front End – Página 10 de 112 ‒ A tag <hr> representa uma quebra temática de nível de parágrafo, por exemplo, uma mudança de cena em uma história ou uma transição para outro tópico dentro de uma seção de um livro de referência; ‒ Ela não deve ser usada apenas como uma linha decorativa. ▪ <ol>: ‒ A tag <ol> representa uma lista ordenada; ‒ Os itens da lista <li> são elementos filhos do elemento <ol> e possuem três atributos: reversed (lista descendente), start (inicia a contagem a partir de um determinado número) e type (especifica o tipo de marcador a ser usado na lista). ▪ <ul>: ‒ A tag <ul> representa uma lista não ordenada; ‒ Os itens da lista <li> são elementos filhos do elemento <ul>. ▪ <dl>: ‒ A tag <dl> representa uma lista de descrição consistindo em zero ou mais grupos nome-valor; ‒ Um grupo nome-valor consiste em um ou mais nomes (<dt>) seguidos por um ou mais valores (<dd>); ‒ Em um único <dl>, não deve haver mais de um <dt> para cada nome. ▪ <figure>: ‒ A tag <figure> representa algum conteúdo de fluxo (opcionalmente com uma legenda) que pode ser usada para fazer anotações em ilustrações, diagramas, fotos, listagens de código etc. ▪ <figcaption>: Design para Front End – Página 11 de 112 ‒ A tag <figcaption> representa uma legenda ou legenda para o resto do conteúdo do elemento pai <figure> do elemento <figcaption>. ▪ <div>: ‒ A tag <div> não tem um significado em especial, ele é usado para agrupar algo sem um significado especial. Elementos de Nível de Texto ▪ <a>: ‒ A tag <a> é usada para vincular o documento em que o usuário está para outro documento na internet, ou para vincular um ponto no mesmo documento. ▪ <em>: ‒ A tag <em> é usada para definir um texto enfatizado. O conteúdo interno é normalmente exibido em itálico. ▪ <strong>: ‒ A tag <strong> é usada para definir texto com grande importância. O conteúdo interno é normalmente exibido em negrito. ▪ <small>: ‒ A tag <small> define texto menor (como direitos autorais e outros comentários). ▪ <cite>: ‒ A tag <cite> define o título de um trabalho criativo (por exemplo, um livro, um poema, uma música, um filme, uma pintura, uma escultura etc.); Design para Front End – Página 12 de 112 ‒ O texto geralmente é renderizado em itálico. ▪ <time>: ‒ A tag <time> define uma hora específica(ou data e hora); ‒ O atributo datetime desse elemento é usado para traduzir a hora em um formato legível por máquina para que os navegadores possam se oferecer para adicionar lembretes de datas por meio do calendário do usuário e os mecanismos de pesquisa possam produzir resultados de pesquisa mais inteligentes. ▪ <sub>: ‒ A tag <sub> define o texto subscrito. O texto subscrito aparece meio caractere abaixo da linha normal e, às vezes, é renderizado em uma fonte menor; ‒ O texto subscrito pode ser usado para fórmulas químicas. ▪ <sup>: ‒ A tag <sup> define o texto sobrescrito. O texto sobrescrito aparece com meio caractere acima da linha normal e, às vezes, é renderizado em uma fonte menor; ‒ Texto sobrescrito pode ser usado para notas de rodapé. ▪ <i>: ‒ A tag <i> define uma parte do texto em uma voz ou humor alternativo. O conteúdo interno é normalmente exibido em itálico; ‒ É frequentemente usado para indicar um termo técnico, uma frase de outro idioma, um pensamento, um nome de navio etc. ▪ <b>: Design para Front End – Página 13 de 112 ‒ A tag <b> especifica o texto em negrito sem qualquer importância extra. De acordo com a especificação HTML5, ela deve ser usada como o ÚLTIMO recurso quando nenhuma outra tag é mais apropriada. ▪ <span>: ‒ A tag <span> é um contêiner embutido usado para marcar uma parte de um texto ou uma parte de um documento; ‒ É facilmente estilizado por CSS ou manipulado com JavaScript usando o atributo class ou id; ‒ É muito parecido com o elemento <div>, mas <div> é um elemento de nível de bloco e <span> é um elemento embutido. ▪ <br>: ‒ A tag <br> insere uma única quebra de linha, é útil para escrever endereços ou poemas; ‒ Não deve ser usada como linha para decoração da página. Design para Front End – Página 14 de 112 Abordagem (ou mindset) de desenvolvimento Para qualquer tipo de desenvolvimento em programação, é necessário escolher uma abordagem que regerá as decisões de quais tecnologias serão usadas. Existem duas abordagens (ou mindset) de desenvolvimento: o Graceful Degradation e o Progressive Enhancement. Graceful Degradation Graceful Degradation foca nas tecnologias mais avançadas aceitas nos navegadores mais modernos. Isso não quer dizer que as aplicações não funcionarão em navegadores mais antigos, mas que a experiência nestes será mais simples, não comprometendo a usabilidade. Esta é uma abordagem descendente (top-bottom) em que você constrói o melhor site possível usando todos os recursos que deseja e, em seguida, ajusta-o para que funcione em navegadores mais antigos. Isso pode ser mais difícil de fazer e menos eficaz do que o aprimoramento progressivo, mas pode ser útil em alguns casos. Na prática, o desenvolvimento usando essa abordagem utiliza qualquer recurso disponível que melhor cumpra o objetivo do projeto. Para que ele se adapte a todos os navegadores, é possível usar media queries específicas para determinar o conteúdo em diferentes navegadores, assim como é possível detectar usando bibliotecas JavaScript ou usar feature detection (detecção de recurso). Progressive Enhancement Progressive Enhancement foca no desenvolvimento de funcionalidades e recursos que possam ser executadas em todos os tipos de navegadores, mesmo aqueles mais antigos, sem restrição. Novas tecnologias serão usadas gradualmente quando os navegadores começarem a suportar as novas tecnologias. Design para Front End – Página 15 de 112 Esse mindset envolve o desenvolvimento de seu site em 'camadas', usando uma abordagem ascendente (bottom-top), começando com uma camada mais simples e melhorando os recursos do site em camadas sucessivas, cada uma usando mais recursos. Na prática, o desenvolvimento usando essa abordagem é regido da seguinte forma: começamos com as camadas mais simples usando recursos que todos os navegadores aceitam, depois construímos camadas com tecnologias mais novas usando polyfills e feature detection. Progressive Enhancement VS Graceful Degradation Graceful Degradation Progressive Enhancement É uma abordagem topdown que pode favorecer a criatividade nos projetos, uma vez que já começa do melhor dispositivo possível. É uma abordagem bottom-up que favorece mais o funcionamento da sua aplicação em diversos dispositivos. Surgiu antes, quando não havia suporte padronizado aos recursos mais básicos dentro do browser. Surgiu depois, quando sugiram também os polyfills e shims e quando a marcação semântica ganhava força. Enfrentou muitos bugs de CSS nos navegadores dominantes do mercado e falta de suporte a APIs do HTML5 e do JavaScript em geral. Conseguiu lidar melhor no nivelamento de recursos com polyfills e se favoreceu com os ciclos de atualização mais rápidos dos navegadores. Ênfase na degradação dos recursos. Entrega o conteúdo “feio”, se não houver outro jeito melhor. Ênfase no aprimoramento do conteúdo entregue, isso é, entrega o conteúdo “pelado” e acrescenta-se camadas para quem puder aproveitá-las. Trocou o browser sniffing (ou browser detection) pelo feature detection. Surgiu quando já existia o conceito de feature detection e continuou usando, somando-se a um cuidado especial com uma marcação com mais significado. Mais difícil de ser testado em diferentes ambientes, já que o desenvolvimento começa com a tecnologia mais avançada. Mais fácil de ser testada em diferentes ambientes, já que podemos testar cada camada de desenvolvimento e verificar se algo se quebra ao implementar algo mais novo. Design para Front End – Página 16 de 112 O Progressive Enhancement é geralmente considerado uma boa prática, pois começa com o básico e vai aprimorando aos poucos. Como incia a partir do HTML, não só garante que o aplicativo funcionará em qualquer navegador, mas também que os mecanismos de pesquisa e leitores de tela o compreenderão. Ao projetar algo do zero, você deve pensar em termos de aprimoramento progressivo. Se você está tentando tornar um site existente mais acessível e cumprir os novos padrões, a situação é diferente. A menos que queira começar tudo de novo, a Graceful Degradation é o caminho a seguir neste caso. Em relação aos testes, é muito mais fácil testar o Progressive Enhancement do que a Graceful Degradation. Se trabalharmos do ponto de vista do Progressive Enhancement, podemos simplesmente começar desenvolvendo a versão básica e verificar se ela funciona corretamente. Em seguida, adicionamos mais uma camada e verificamos se tudo ainda funciona da maneira certa e assim por diante. Então, simplesmente, cada vez que adicionamos uma camada adicional, precisamos verificar se ela não quebra a versão básica. Por outro lado, precisamos de uma abordagem diferente ao usar a Graceful Degradation. Os recursos avançados já estão lá e podem ser testados. Para verificar se eles degradam normalmente, devemos desativar o suporte a esses recursos. Em alguns casos, você precisará testar em um navegador diferente, mas na maioria dos casos, você pode usar os recursos de acessibilidade do Opera, Web Developer Toolbar no Firefox ou Developer Tools do Chrome. É possível usar as duas abordagens em diferentes momentos do projeto ou em partes específicas. O importante é você ter em mente se está construindo aquela peça de código como algo básico que será progressivamente aprimorado ou como algo avançado que será degradado de forma suave. Design para Front End – Página 17 de 112 Acessibilidade (WCAG) Acessibilidade na web é a prática de tornar conteúdos e funcionalidades acessíveis a todos os usuários, sejam eles: ▪ Deficientes (visual, auditivo, físicas, de fala, cognitivas e neurológicas etc.); ▪ Usuários com restrições temporárias (operações, acidentes etc.); ▪ Usuários idosos ou com pouco contato com tecnologia. As Diretrizes de Acessibilidadepara Conteúdo Web (WCAG) 2.0 definem como fazer o conteúdo da Web mais acessível para todos os usuários. Para atender às necessidades de todos, existem diversas camadas de orientação, incluindo princípios globais, diretrizes gerais, entre outros recursos. Neste capítulo, vamos focar nos princípios e as diretrizes. Princípio 1: Perceptível – “As informações e os componentes da interface do usuário devem ser apresentados em formas que possam ser percebidas pelo usuário” (WCAG, 2020). ▪ Diretriz 1.1 Alternativas em Texto: É preciso ter alternativas de texto para qualquer conteúdo não-textual (imagens, gráficos, vídeos etc.) para que possa ser transformado em outros formatos de acordo com as necessidades do público. ▪ Diretriz 1.2 Mídias com base em tempo: Dar alternativas para mídias baseadas em tempo, por exemplo: vídeos, áudios, entrevistas ao vivo etc. Alternativas como legendas, transcrição em texto etc. ▪ Diretriz 1.3 Adaptável: Fazer conteúdo que pode ser adaptado de diferentes formas sem perder seu significado. ▪ Diretriz 1.4 Discernível: Separar o primeiro plano e o plano de fundo de forma a facilitar a audição e a visualização de conteúdo ao público. Design para Front End – Página 18 de 112 Princípio 2: Operável – “Os componentes de interface de usuário e a navegação devem ser operáveis” (WCAG, 2020). ▪ Diretriz 2.1 Acessível por Teclado: Tornar toda funcionalidade disponível a partir de um teclado. ▪ Diretriz 2.2 Tempo Suficiente: Dar ao público tempo o bastante para ler e usar o conteúdo. ▪ Diretriz 2.3 Convulsões: Não criar materiais de uma forma conhecida por provocar convulsões. ▪ Diretriz 2.4 Navegável: Dar maneiras de ajudar o público a navegar, encontrar conteúdos e escolher onde se encontram. Princípio 3: Compreensível – “A informação e a operação da interface de usuário devem ser compreensíveis” (WCAG, 2020). ▪ Diretriz 3.1 Legível: Fazer com que o conteúdo seja fácil de entender e legível. ▪ Diretriz 3.2 Previsível: Fazer com que o funcionamento das páginas web funcionem de modo previsível. ▪ Diretriz 3.3 Assistência de Entrada: Auxiliar o público para encontrar e corrigir erros. Princípio 4: Robusto – “O conteúdo deve ser robusto o suficiente para poder ser interpretado de forma confiável por uma ampla variedade de agentes de usuário, incluindo tecnologias assistivas” (WCAG, 2020). ▪ Diretriz 4.1 Compatível: Fazer com que o conteúdo seja compatível aos atuais e futuros agentes de usuário, principalmente tecnologias assistivas. Design para Front End – Página 19 de 112 Aural StyleSheets Aural StyleShets (ou folhas de estilo auditivo) usam uma combinação de síntese de fala e efeitos sonoros para fazer o usuário ouvir as informações, em vez de ler as informações. A apresentação auditiva pode ser usada: ▪ Por cegos; ▪ Para ajudar os usuários a aprender a ler; ▪ Para ajudar os usuários com problemas de leitura; ▪ Para entretenimento doméstico; ▪ No carro; ▪ Por comunidades com problemas de entendimento de entonação. A apresentação auditiva converte o documento em texto simples e o alimenta em um leitor de tela (um programa que lê todos os caracteres na tela). Fonte: W3School. Propriedade Descrição azimuth / elevation Define de onde o som deve vir. cue Define as propriedades da sugestão em uma declaração. cue-after Especifica um som a ser reproduzido depois de falar o conteúdo de um elemento. Design para Front End – Página 20 de 112 cue-before Especifica um som a ser reproduzido antes de falar o conteúdo de um elemento. pause Define as propriedades de pausa em uma declaração. pause-after Especifica uma pausa após falar o conteúdo de um elemento. pause-before Especifica uma pausa antes de falar o conteúdo de um elemento. pitch Especifica a voz falada. pitch-range Especifica a variação na voz falada. (Voz monótona ou voz animada?) play-during Especifica um som a ser reproduzido ao falar o conteúdo de um elemento. richness Especifica a riqueza da voz falada. (Voz grossa ou voz fina?) speak Especifica se o conteúdo será renderizado auditivamente. speak-header Especifica como lidar com os cabeçalhos da tabela. Os cabeçalhos devem ser falados antes de cada célula ou apenas antes de uma célula com um cabeçalho diferente da célula anterior. speak-numeral Especifica como falar os números. speak-punctuation Especifica como falar os caracteres de pontuação. speech-rate Especifica a velocidade da fala. stress Especifica a "intensidade" na voz falada. voice-family Especifica a família de voz do falante. volume Especifica o volume da fala. Design para Front End – Página 21 de 112 Por que se preocupar com acessibilidade? Existem muitas vantagens em ter sites acessíveis, abaixo estão algumas delas: ▪ Dar aos usuários a capacidade de acessar informações, serviços e entretenimento de forma independente; ▪ Fator de ranqueamento que pode fortalecer ou comprometer o SEO; ▪ Sites acessíveis, sendo mais fáceis de usar, geralmente requerem menos suporte para os usuários. Design para Front End – Página 22 de 112 Metodologias CSS Metodologias CSS (ou arquitetura CSS) são padrões de nomenclatura para organizar códigos de CSS, ou seja, uma forma de escrever os nomes de ids e classes de forma lógica e de fácil entendimento no geral. Existem muitas metodologias CSS e neste capítulo aprenderemos sobre algumas delas. OOCSS Esta metodologia utiliza conceitos de design orientado a objetos a fim de fornecer estrutura para CSS, baseado na aparência do objeto em vez do conteúdo ou funcionalidade. ▪ Separa estrutura da skin: ‒ Propriedade de estrutura: refere-se ao tamanho e posição dos elementos (height, width, margin, padding, overflow etc.); ‒ Propriedade de skin: refere-se ao aspecto visual dos elementos (color, border, box-shadow, font, opacity etc.). ▪ Separa contêiner do conteúdo: estilos com base em atributos em vez de localização. Exemplo: todos os elementos com a classe de call-to-action terão a mesma aparência, independentemente da marca ou localização. Exemplo de HTML usando OOCSS: Design para Front End – Página 23 de 112 Exemplo de CSS usando OOCSS: Vantagem: ▪ Melhor consistência; ▪ Facilidade de manutenção. Desvantagem: ▪ Documentação vaga; Design para Front End – Página 24 de 112 ▪ Não há padrão de nomenclatura que diferencie classes de estruturação e de skins. SMACSS Esta metodologia se resume em um sistema de categorização para conjuntos de regras. Categorias: ▪ Base: estabelecer os padrões para cada elemento (não utilizam seletores com classes ou IDs); ▪ Layout: elementos agregadores, como header, footer e sidebar. Por padrão, usa-se l- como prefixo nos IDs e classes; ▪ Módulo: demais componentes da página, usando classes com nomes significativos à sua funcionalidade; ▪ Estado: estado visualmente dentro dos componentes do design (visible/hidden, active/inactive etc.). Por padrão, usa-se is- como prefixo nos IDs e classes; ▪ Tema: declarações que impactam na aparência de forma genérica (cores padrões, por exemplo). Exemplo de HTML usando SMACSS: Design para Front End – Página 25 de 112 Exemplo de CSS usando SMACSS: Vantagem: ▪ Semântica clara para melhor entendimento; Design para Front End – Página 26 de 112 ▪ Mais fácil de reestruturar, caso seja necessária uma mudança no HTML. Desvantagem: ▪ Não nomeia elementos descendentes, sendo difícil empregar em grandes aplicações. BEM BEM (Block, Element, Modifier) é uma abordagem baseada em componentes para desenvolvimento web. A ideia por trás disso é dividir a interface do usuário em blocos independentes. Isso torna o desenvolvimento fácil e rápido, mesmo com uma interface de usuário complexa, e permite a reutilização do códigoexistente sem copiar e colar. ▪ Block: componente de página logicamente e funcionalmente independente, podendo ser o mais alto nível de abstração (header, footer) ou em nível de componente (graph, tabs); ▪ Element: parte constituinte de um bloco que não pode ser usada fora dele; ▪ Modifier: define a aparência e o comportamento de um bloco ou elemento. Design para Front End – Página 27 de 112 Outras metodologias Mais algumas metodologias: ▪ SuitCSS: usa características comuns do OOCSS, SMACSS e BEM. Convenciona 3 categorias de classes: utilitárias (estruturas de baixo nível), componentes e estado (usando prefixo is- para IDs e classes). ▪ Atomic CSS: abordagem à arquitetura CSS que favorece pequenas classes de propósito único com nomes baseados em função visual. ▪ Inverted Triangle CSS (ITCSS): tenta abordar a especificidade do seletor usando a prioridade natural do CSS. As folhas de estilo são transferidas para camadas 10 com base em sua finalidade. Existem muitas outras metodologias (Semantic CSS, Point North, TitleCSS, IdiomaticCSS, KickoffCSS, DRY CSS, entre outras), você pode pesquisar para ver qual se enquadra melhor no seu estilo de programação e no seu projeto. Design para Front End – Página 28 de 112 Boas Práticas em Desenvolvimento Boas práticas são padrões de código e melhores práticas para um desenvolvimento mais limpo, consistência, fácil de entender e reutilizável. Não existe uma regra absoluta para boas práticas, por isso, aqui será mostrado regras gerais de vários artigos e depoimento de programadores. No Lighthouse da Google, é possível ver uma pontuação se o seu site está de acordo com boas práticas no geral, em acessibilidade e de performance: Boas Práticas: HTML ▪ Sempre use o HTML com doctype (<!DOCTYPE html>); ▪ Use <blockquote> e <dl> (lista de definição) quando apropriado; ▪ Listas devem ser criadas por uma tag <ul>, <ol>, ou <dl>, nunca por um conjunto de <div> ou <p>; Design para Front End – Página 29 de 112 ▪ Use a tag <label> para rotular cada campo de um formulário. O atributo “for” deve conectar o rótulo ao campo, para que os usuários possam clicar no rótulo e assim ser direcionado ao campo associado; ▪ Não use o atributo “size” diretamente nos campos, em vez disso, use a propriedade width do CSS; ▪ Comente o fechamento de <div> mostrando que o elemento está sendo fechado (id ou class do elemento). Isso ajuda quando tem muita indentação e muitos elementos aninhados; ▪ Tabelas não devem ser utilizadas para layouts de página; ▪ Em tabelas, use os elementos <thead>, <tbody> e <th> apropriadamente; ▪ Use iniciais em caixa alta para títulos e cabeçalhos; ▪ Na marcação de títulos, nunca use apenas caixa alta ou baixa. O correto é usar a propriedade CSS text-transform: uppercase/lowercase para isso. Boas Práticas: CSS ▪ Carregue seu CSS através de arquivos externos, condensando-os para ter o menor número possível. Coloque a importação dentro do elemento <head> da página; ▪ Nunca use @import para o importar, use sempre o elemento <link>; ▪ Não faça estilos elementos <style> ou em linha (inline) no documento. É difícil para manutenção e para rastrear os estilos; ▪ Para equalizar as diferenças entre browsers, use CSS reset ou similares; ▪ Use classes e ID da forma correta: ID para elementos que ocorrem uma única vez dentro de um documento e classes para elementos que se repetem; Design para Front End – Página 30 de 112 ▪ Nunca use !important. Entenda os princípios de estilo em cascata e especificidade de seletores para colocar os estilos da maneira certa; ▪ Evite seletores “caros” (como o seletor curinga - *), pois eles não são otimizados para performance; ▪ Evite qualificar seletores de ID como “div#myid”, ou seletores de classe como “table.results”. Isso prejudica na performance das páginas web porque pode haver milhares de elementos DOM carregados com isso; ▪ Aprenda sobre o modelo de caixa do navegador, é essencial para entender o layouts CSS; ▪ Seletores CSS devem estar em uma linha e cada propriedade em sua própria linha abaixo dele. As declarações devem ser indentadas com 2 a 4 espaços; ▪ Use aninhamento (nesting) para melhor compreensão do código. Insira um reforço com 2 ou 4 espaços para estilos filhos; ▪ Deve ser evitado CSS em uma única linha por causar problemas com o controle de versão do arquivo e compreensão do mesmo; ▪ Use metodologias CSS para organizar a nomenclatura de ids, classes e seletores em geral; ▪ Use abreviação do CSS em casos como margin e padding; ▪ Você nunca deve usar imagens para criar espaços em branco; ▪ Defina um estilo padrão para títulos (h1-h6), incluindo cabeçalhos com links. Para esses elementos de base, é importante declará-los no topo do seu documento CSS e manter a consistência do estilo do site; ▪ Use h1-h6 de forma coerente, considerando a hierarquia dos elementos; ▪ Estilos para links devem ser declarados diferentes estilos para o estado hover, active, link e visited. Eles devem ser diferentes do texto padrão. Design para Front End – Página 31 de 112 Boas Práticas: JavaScript ▪ A maior parte do código deve estar em arquivos externos. Para melhor performance, eles devem ser incluídos no fim da tag body; ▪ Faça a detecção usando recursos adequados, não confie apenas na string user-agent; ▪ Não utilize document.write(); ▪ Todas as variáveis booleanas devem começar com "is"; ▪ Nomeie variáveis e funções de forma lógica. Por exemplo: popUpAdIGTI, em vez de myPopup; ▪ Variáveis devem ter nomes com significado de sua utilização, por isso, não faça reduções exageradas ao nomear variáveis; ▪ Variáveis de configuração e constantes devem ficam no começo do arquivo; ▪ Faça com que seu código seja facilmente reutilizável, esforce-se para criar funções que possam ser generalizadas, ter parâmetros e valores de retorno; ▪ Comente o código de forma que ele seja facilmente entendido por qualquer programador; ▪ Use comentários de linha inteira. Usar <!-- --> prejudica a leitura do código; ▪ Quanto menos variáveis globais, melhor; ▪ O uso de espaços deve seguir convenções de leitura inglesa (por exemplo: colocar espaço depois de :); ▪ As variáveis JavaScript têm que ser escritas em letras minúsculas ou camelCase; ▪ Todo ID e declarações de classes em CSS devem ser escritas usando apenas letras minúsculas. Não use traços, nem sublinhados; Design para Front End – Página 32 de 112 ▪ Converta número com parseInt(). Boas Práticas: Acessibilidade ▪ Marcação e semântica coerente; ▪ Correto uso semântico das tags, atributos e descrições; ▪ Conteúdo textual para todo conteúdo não-textual (atributo “alt” em imagens, gráficos e outros conteúdos não-textuais); ▪ Escreva um resumo do conteúdo para serem usados por leitores de tela (screen-readers); ▪ Use um fundo claro com um texto escuro ou vice-versa para dar leitura com alto contraste. Opção: colocar opções de cores light/dark no site; ▪ Todas as imagens devem ter descrição (alt); ▪ Não usar captcha (letras distorcidas); ▪ Não usar teclado virtual; ▪ Não ter conteúdo sobreposto (popups); ▪ Ter atalhos no teclado (principalmente tab); ▪ Botões com frase em imagem (texto alternativo); ▪ Não use vermelho e verde juntos para fazer distinções entre funcionalidades chaves - uma porcentagem de pessoas não serão capazes de distingui-los. Design para Front End – Página 33 de 112 Boas Práticas: Performance ▪ Veja a performance do site pelo Lighthouse do Google ou GTMetrix, eles dão boas sugestões de como melhorar o site; Design para Front End – Página 34 de 112 ▪ Configure apropriadamente o cache dos cabeçalhos; ▪ Reduza o tamanho das imagens com otimizadores (smush it, por exemplo); ▪ CSS e JavaScript devem ser minificados (minified) no ladodo servidor; ▪ Servir CSS e JavaScript usando gzip; ▪ CSS devem ser concatenados juntos para reduzir o número de conexões HTTP com dependências ao longo do carregamento da página; ▪ JavaScript deve ser concatenado; ▪ Não use blocos <script> em linha no HTML, pois eles bloqueiam a renderização e oneram o tempo de carregamento de página. Design para Front End – Página 35 de 112 CSS Estilos Aqui estudaremos resumidamente o CSS - Cascating Style Sheet (ou Folha de Estilo em Cascata). A sintaxe do CSS é composta por um seletor e um bloco de declaração: Fonte: W3School. Propriedades CSS Existem muitas propriedades CSS para modificar os elementos HTML de várias formas. Podemos resumi-las em 6 categorias: ▪ Tamanho: font-size, width, height, margin, padding etc. ▪ Cor: color, background-color etc. ▪ Variações: font-weight, text-decoration, shadow, border, cursor etc. ▪ Posicionamento: position, align, flex, grid, float etc. ▪ Conteúdo: background-image, content, @import, @media etc. ▪ Animação: animation, transform, transition etc. Design para Front End – Página 36 de 112 Modelo de Caixa CSS Todos os elementos HTML podem ser considerados caixas. Em CSS, o termo "modelo de caixa" é usado quando se fala em design e layout. Ele é essencialmente uma caixa que envolve todos os elementos HTML. Consiste em: margens, bordas, preenchimento e o conteúdo real. A imagem abaixo ilustra o modelo da caixa: Fonte: https://www.w3schools.com/css/css_boxmodel.asp. Explicação das diferentes partes: ▪ Content (Conteúdo) - o conteúdo da caixa, onde o texto e as imagens aparecem; ▪ Padding (Margem interna) - limpa uma área ao redor do conteúdo. O preenchimento é transparente; ▪ Border (Borda) - uma borda que circunda o preenchimento e o conteúdo; ▪ Margin (Margem externa) - limpa uma área fora da borda. A margem é transparente. https://www.w3schools.com/css/css_boxmodel.asp Design para Front End – Página 37 de 112 O modelo de caixa nos permite adicionar uma borda ao redor dos elementos e definir o espaço entre eles. Para definir a largura (width) e a altura (height) de um elemento corretamente em todos os navegadores, você precisa saber como funciona o modelo de caixa. Importante ressaltar que, ao definir as propriedades de largura e altura de um elemento com CSS, você apenas define a largura e a altura da área de conteúdo. Para calcular o tamanho total de um elemento, você também deve adicionar preenchimento, bordas e margens. Seletores Os seletores CSS são usados para "encontrar" (ou selecionar) os elementos HTML que você deseja estilizar. Podemos dividir os seletores CSS em cinco categorias: ▪ Seletores simples (selecione os elementos com base no nome, id, classe). Seletor Descrição * Seletor universal. E Elemento do tipo E (obs.: um elemento herda a formatação dos ancestrais). E,F,G Elementos dos tipos E, F e G. .c Elementos da classe c. E.c Elementos do tipo E da classe C. #i Elementos com atributo id igual a i. ▪ Seletores combinadores (selecione os elementos com base em uma relação específica entre eles). Design para Front End – Página 38 de 112 Seletor Descrição E F Elemento F, descendente de E. E > F Elemento F, filho de E. E + F Elemento F, imediatamente precedido de E. E ~ F Elemento F, precedido de E (isto é, irmão). E:not(S) Elemento E que não seja S. ▪ Seletores de pseudo-classe (selecione os elementos com base em um determinado estado). ▪ Seletores de pseudo-elementos (selecione e estilize uma parte de um elemento). ▪ Seletores de atributos (selecione os elementos com base em um atributo ou valor de atributo). Seletor Descrição E[foo] Elemento que contenha o atributo “foo”. E[foo=”bar”] Elemento com o atributo “foo” que tenha exatamente o valor “bar”. E[foo~=”bar”] Elemento com o atributo “foo” que tenha o valor “bar” em uma lista separada por espaços. E[foo^=”bar”] Elemento com o atributo “foo” que comece com o valor “bar”. E[foo$=”bar”] Elemento com o atributo “foo” que termina com o valor “bar”. E[foo*=”bar”] Elemento com o atributo “foo” com valor que contenha a substring “bar”. E[foo|=”pt”] Elemento com o atributo “foo” contendo uma lista de valores separadas por hífen que comece com “pt”. Design para Front End – Página 39 de 112 Funções As funções CSS são usadas como um valor para várias propriedades CSS. Função Descrição attr() Retorna o valor de um atributo do elemento selecionado. calc() Permite que você execute cálculos para determinar os valores das propriedades CSS. cubic-bezier() Define uma curva de Bézier cúbica. hsl() Define as cores usando o modelo Hue- Saturation-Lightness (HSL). hsla() Define cores usando o modelo Hue- Saturation-Lightness-Alpha (HSLA). linear-gradient() Define um gradiente linear como imagem de fundo. Defina pelo menos duas cores (de cima para baixo). radial-gradient() Define um gradiente radial como imagem de fundo. Defina pelo menos duas cores (centro para as bordas). repeating-linear-gradient() Repete um gradiente linear. repeating-radial-gradient() Repete um gradiente radial. rgb() Define cores usando o modelo Red- Green-Blue (RGB). rgba() Define cores usando o modelo Red- Green-Blue-Alpha (RGBA). var() Insere o valor de uma propriedade personalizada. Design para Front End – Página 40 de 112 CSS Pseudo atributos Pseudo atributos são atributos especiais adicionados aos elementos dependendo de uma ação ou de uma condição específica. Existem 3 tipos de “pseudo” em CSS: ▪ Pseudo-classe é usada para definir um estado especial de certo elemento; ▪ Pseudo-seletor (que faz parte das pseudo-classes) é usado para modificar um elemento especificado que está em determinada posição (filho) de outro elemento; ▪ Pseudo-elemento CSS é usado para estilizar partes específicas de um elemento. Pseudo-classes ▪ :active - Elemento ativo (link); ▪ :visited - Elemento (link) que já foi clicado (visitado); ▪ :hover - Elemento em que o mouse está sobre; ▪ :link - Todos os links não visitados; ▪ :checked - Elemento marcado (<input>); ▪ :disabled - Elemento desativado (<input>); ▪ :empty - Elemento que não tem filhos; ▪ :enabled - Elemento ativado (<input>); ▪ :focus - Elemento que está em foco; ▪ :in-range - Elementos com um valor dentro de um intervalo especificado (<input>); Design para Front End – Página 41 de 112 ▪ :invalid - Elemento inválido (<input>); ▪ :not(selector) - Elemento que não é o seletor; ▪ :optional - Elementos sem atributo "required" (<input>); ▪ :out-of-range - Elementos com um valor fora de um intervalo especificado (<input>); ▪ :read-only - Elementos com um atributo "read-only" especificado (<input>); ▪ :read-write - Elementos sem um atributo "read-only" especificado (<input>); ▪ :required - Elementos com atributo "required" (<input>); ▪ :root - Elemento raiz do documento; ▪ :target - O elemento #news ativo atual (clicado em um URL contendo o elemento âncora); ▪ :valid - Elementos com um valor válido (<input>). Pseudo-seletores ▪ :first-child - Seleciona cada elemento que é o primeiro filho de seu pai; ▪ :first-of-type - Seleciona o primeiro elemento de seu pai que satisfaz a condição de tipo; ▪ :last-child - Seleciona todos os elementos que são os últimos filhos de seu pai; ▪ :last-of-type - Seleciona último elemento de seu pai que satisfaz a condição; ▪ :nth-child(n) - Seleciona o elemento de seu pai na posição n que satisfaz a condição; Design para Front End – Página 42 de 112 ▪ :nth-last-child(n) - Seleciona último elemento de seu pai que satisfaz a condição; ▪ :nth-last-of-type(n) - Seleciona cada elemento que satisfaz a condição de posição como filho de seu pai, contando a partir do último filho; ▪ :nth-of-type(n) - Seleciona cada elementoque satisfaz a condição de tipo e de posição como filho de seu pai; ▪ :only-of-type - Seleciona cada elemento que é o único elemento de seu pai; ▪ :only-child - Seleciona cada elemento que é o único filho de seu pai. Pseudo-elementos ▪ ::after - Pode ser usado para inserir algum conteúdo depois do conteúdo de um elemento; ▪ ::before - Pode ser usado para inserir algum conteúdo antes do conteúdo de um elemento; ▪ ::first-letter - Usado para adicionar um estilo especial à primeira letra de um texto; ▪ ::first-line - Usado para adicionar um estilo especial à primeira linha de um texto; ▪ ::selection - Corresponde à parte de um elemento que é selecionado por um usuário. Design para Front End – Página 43 de 112 CSS Animações Uma animação permite que um elemento mude gradualmente de um estilo para outro. Você pode alterar quantas propriedades CSS quiser, quantas vezes quiser. As animações são muito usadas com o CSS transform. CSS Transform É possível animar os elementos de diversas formas e um atributo muito usado é o CSS transform, que permite mover, girar, redimensionar e inclinar elementos. Resumo das propriedades: Propriedade Descrição translate(x,y) Define uma translação 2D, movendo o elemento ao longo dos eixos X e Y. translateX(x) Define uma tradução 2D, movendo o elemento ao longo do eixo X. translateY(y) Define uma tradução 2D, movendo o elemento ao longo do eixo Y. rotate(angle) Define uma rotação 2D, o ângulo é especificado no parâmetro. scale(x,y) Define uma transformação de escala 2D, alterando a largura e altura dos elementos. scaleX(x) Define uma transformação de escala 2D, alterando a largura do elemento. scaleY(x) Define uma transformação de escala 2D, alterando a altura do elemento. skew(x,y) Define uma transformação de inclinação 2D ao longo dos eixos X e Y. skewX() Define uma transformação de inclinação 2D ao longo do eixo X. skewY() Define uma transformação de inclinação 2D ao longo do eixo Y. Design para Front End – Página 44 de 112 matrix(n,n,n,n,n,n) Define uma transformação 2D, usando uma matriz de seis valores. CSS Animation Para usar o CSS animation, você deve primeiro especificar alguns quadros- chave (@keyframes) para a animação. Os keyframes contêm os estilos que o elemento terá em determinados momentos. Para fazer uma animação funcionar, você deve vincular a animação a um elemento adicionando as seguintes propriedades: ▪ animation-name: nome da animação. Deve ser adicionado ao elemento que fará a animação; ▪ animation-duration: duração da animação. Se ela não for especificada, a animação não funciona. A duração pode ser em segundos, milisegundos, porcentagem; ▪ animation-timing-function (opcional): estabelece curvas de aceleração predefinidas, como ease ou linear. A propriedade animation-timing-function pode ter os seguintes valores: ‒ ease - especifica uma animação com um início lento, depois rápido e, a seguir, termina lentamente (este é o padrão); ‒ linear - especifica uma animação com a mesma velocidade do início ao fim; ‒ easy-in - especifica uma animação com um início lento; ‒ ease-out - especifica uma animação com um final lento; ‒ easy-in-out - especifica uma animação com início e fim lentos; ‒ cubic-bezier (n, n, n, n) - permite definir seus próprios valores em uma função cubic-bezier. Design para Front End – Página 45 de 112 ▪ animation-delay (opcional): o tempo entre o elemento sendo carregado e o início da sequência de animação. Valores negativos também são permitidos, e se usar valores negativos, a animação começará como se já tivesse sido reproduzida por X segundos; ▪ animation-direction (opcional): define se uma animação deve ser reproduzida para frente, para trás ou em ciclos alternados. A propriedade animation- direction pode ter os seguintes valores: ‒ normal - a animação é reproduzida normalmente (para frente). Este é o padrão; ‒ reverse - a animação é reproduzida na direção reversa (para trás); ‒ alternate - a animação é reproduzida primeiro para a frente e depois para trás; ‒ alternate-reverse - a animação é reproduzida primeiro para trás e depois para a frente. ▪ animation-iteration-count (opcional): o número de vezes que a animação deve ser executada. É possível usar o valor infinite para fazer a animação continuar para sempre. ▪ animation-fill-mode (opcional): essa propriedade especifica um estilo para o elemento de destino quando a animação não está sendo reproduzida (antes de começar, depois de terminar ou ambos). A propriedade animation-fill-mode pode ter os seguintes valores: ‒ none - valor padrão. A animação não aplicará nenhum estilo ao elemento antes ou depois de sua execução; ‒ forwards - o elemento manterá os valores de estilo definidos pelo último quadro-chave (depende da direção e da contagem da iteração da animação); Design para Front End – Página 46 de 112 ‒ backwards - o elemento obterá os valores de estilo definidos pelo primeiro quadro-chave (depende da direção da animação) e os manterá durante o período de atraso da animação; ‒ both - a animação seguirá as regras para frente e para trás, estendendo suas propriedades em ambas as direções. ▪ animation-play-state (opcional): pausa/reproduz a animação. As animações também podem ser escritas de forma abreviada com as seguintes propriedades: animation-name, animation-duration, animation-timing- function, animation-delay, animation-iteration-count e animation-direction. Resumo das propriedades de animação: Propriedade Valores da propriedade animation-name nome animation-duration Xs, Xms, % animation-timing-function ease, ease-out, ease-in, ease-in-out, linear, cubic- bezier(x1, y1, x2, y2) animation-delay Xs, Xms animation-direction normal, reverse, alternate, alternate-reverse animation-iteration-count X, infinite animation-fill-mode forwards, backwards, both, none animation-play-state paused, running Exemplos de animação 1. Animação com delay de 2 segundos e duração de 5 segundos, onde a div se move para diferentes posições e muda a cor de fundo. Ela acontece infinitamente e anima para frente e para trás de forma alternada: Design para Front End – Página 47 de 112 div { width: 100px; height: 100px; background-color: red; position: relative; animation-name: example; animation-duration: 5s; animation-timing-function: linear; animation-delay: 2s; animation-iteration-count: infinite; animation-direction: alternate; } @keyframes example { 0% {background-color:red; left:0px; top:0px;} 25% {background-color:yellow; left:200px; top:0px;} 50% {background-color:blue; left:200px; top:200px;} 75% {background-color:green; left:0px; top:200px;} 100% {background-color:red; left:0px; top:0px;} } 2. Animação que roda automaticamente, onde a div começa com a cor vermelha, com 0.3 do seu tamanho e em formato circular (border-radius: 100%), e termina com a cor amarela, com 1.5 do seu tamanho e em formato quadrado. Ela acontece infinitamente e anima para frente e para trás de forma alternada: #animation-2 { height: 100px; width: 100px; margin: 0 auto; background-color: red; animation-name: animation2; animation-duration: 1.5s; animation-timing-function: ease-out; animation-delay: 0; animation-direction: alternate; animation-iteration-count: infinite; animation-fill-mode: none; animation-play-state: running; } @keyframes animation2 { 0% { transform: scale(.3); background-color: red; border-radius: 100%; } 50% { background-color: orange; } 100% { transform: scale(1.5); background-color: yellow; Design para Front End – Página48 de 112 } } 3. Animação dupla: a. Pulse: mudança de cor contínua (vermelho para laranja); b. Segunda: mudança de posição em dois estágios: em 50%, depois 80% e finaliza na posição inicial. #animation-3 { height: 100px; width: 100px; margin: 0 auto; background-color: red; animation: pulse 3s ease infinite alternate, nudge 5s linear infinite alternate; border-radius: 100%; } @keyframes pulse { 0%, 100% { background-color: red; } 50% { background-color: orange; } } @keyframes nudge { 0%, 100% { transform: translate(0, 0); } 50% { transform: translate(150px, 0); } 80% { transform: translate(-150px, 0); } } Design para Front End – Página 49 de 112 Noções de UI e UX UX (user experience) Design é o processo de projetar produtos físicos ou digitais que são úteis, fáceis de usar e oferecem uma ótima experiência na interação com eles. No processo de criação de um produto, o UX Designer deve passar por várias etapas: Fonte: CANZIBA, 2018. 1. Descoberta e Planejamento: é o primeiro estágio do processo de UX, onde primeiro tocamos/discutimos a ideia por trás de nosso produto. O objetivo dessa etapa é que a equipe tenha uma ideia clara sobre o produto que irá projetar e desenvolver. Discutimos a ideia do projeto e a visão do cliente, fazemos entrevistas, analisamos o orçamento e desenhamos o roteiro. 2. Estratégia UX: é aqui que as equipes realizam pesquisas profundas relacionadas à ideia que foi fornecida por um cliente para criar a que queremos construir para nós mesmos. Nessa fase é onde entendemos o cliente, os competidores, os usuários, os objetivos do negócio, os stakeholders e fazemos medições. 3. Pesquisa UX: concentra-se em entender o produto em si, o comportamento do usuário com o ele, suas necessidades, dores e motivações para usar nossos produtos. Nessa etapa são realizadas pesquisas, a exploração do problema, testes e revisão do que foi feito. Design para Front End – Página 50 de 112 4. Análise UX: é nessa etapa que medimos a interação entre um usuário e a interface do usuário; muitas vezes, neste caso, pode ser um aplicativo, um produto digital ou até mesmo o próprio design. É onde são feitas análises de caso de uso, as personas e a estrutura de dados. 5. Design: é nessa etapa que desenvolvemos o design do produto em si. Aqui são feitos os modelos no Sketch, a prototipagem, o design visual e os fluxos de interação. 6. Produção: é nessa etapa, que pode começar com o design do processo de UX, especialmente quando o desenvolvimento do o produto se inicia, já que é a fase em que começa a dar feedback sobre um produto, que podemos ver, tocar e sentir visualmente. Nela são feitos testes, medições, feedback e aperfeiçoamento do produto. Para alcançar essa ótima experiência, Peter Morville desenvolveu a ferramenta UX Honeycomb, que explica as várias facetas do UX design: Fonte: WESOLKO. 2016. Cada faceta do UX design pode ser definida por este diagrama como: Design para Front End – Página 51 de 112 ▪ Utilizável (usable): o sistema no qual o produto ou serviço é entregue deve ser simples e fácil de usar. Os sistemas devem ser projetados de forma familiar e fácil de entender. A curva de aprendizado pela qual um usuário deve passar deve ser a mais curta e indolor possível. ▪ Útil (useful): o produto ou serviço de uma empresa precisa ser útil e preencher uma necessidade. Se o produto ou serviço não for útil ou atender aos desejos ou necessidades do usuário, não há um propósito real para o produto em si. ▪ Desejável (desirable): a estética visual do produto, serviço ou sistema precisa ser atraente e fácil de traduzir. O design deve ser mínimo e direto ao ponto. ▪ Localizável (findable): as informações precisam ser localizáveis e fáceis de navegar. Se o usuário tiver um problema, ele deve ser capaz de encontrar uma solução rapidamente. A estrutura de navegação também deve ser configurada de forma que faça sentido. ▪ Acessível (accessible): o produto ou serviços devem ser projetados de forma que até mesmo pessoas com deficiência possam ter a mesma experiência de usuário que os outros. ▪ Credível (credible): a empresa e seus produtos ou serviços precisam ser confiáveis. A partir dessas várias facetas é que temos o valor do produto, ou seja, uma ótima experiência do usuário. UI, por outro lado, é a parte em que projetamos interfaces de usuário para diferentes softwares de computador, aplicativos móveis, videogames e até mesmo para máquinas diferentes, como uma interface ATM, de máquina de lavar, de telas de carro ou qualquer interface física e digital que nosso usuário tenha que interagir. É nela onde projetamos algo mais direcionado para o produto em si, por exemplo: a forma dos botões, os campos de formulário, etc. Design para Front End – Página 52 de 112 As interfaces do usuário (user interface) são os pontos de acesso onde os usuários interagem com os designs. Eles vêm em três formatos: ▪ Interfaces gráficas do usuário (GUIs) - os usuários interagem com representações visuais em painéis de controle digital. A área de trabalho de um computador é uma GUI. ▪ Interfaces controladas por voz (VUIs) - os usuários interagem com elas por meio de suas vozes. A maioria dos assistentes inteligentes - por exemplo, Siri no iPhone e Alexa nos dispositivos Amazon - são VUIs. ▪ Interfaces baseadas em gestos - os usuários se envolvem com espaços de design 3D por meio de movimentos corporais: por exemplo, em jogos de realidade virtual (VR). A grande diferença entre UI e UX é que UX analisa a experiência geral do produto, enquanto a UI se concentra mais na aparência, como fontes, cores, botões, layout e espaços. Observe o exemplo abaixo: Fonte: CANZIBA, 2018 Para ter bons resultados na implementação da UI ao lado do front-end, deve haver uma grande colaboração entre a equipe de design e a equipe de front-end. Obter insights sobre o produto desde os estágios iniciais dará aos desenvolvedores front-end tempo para pesquisar diferentes tipos de estruturas que eles podem usar Design para Front End – Página 53 de 112 durante o processo de desenvolvimento, como Bootstrap, Bulma, Tailwind, Material Design ou Foundation. Eles também podem preparar facilmente o espaço de trabalho para esse momento ao decidir sobre diferentes ferramentas, como CSS, pré- processadores, como SASS ou LESS, ferramentas de automação, como gulp ou grunt, e até mesmo frameworks JavaScript, como Angular, React ou Vue. Design Systems De acordo com HACQ (2019), Design Systems “é a única fonte de verdade que agrupa todos os elementos que permitirão às equipes projetar, realizar e desenvolver um produto” (tradução livre). Ele é um documento vivo que possui todos componentes de UI e padrões visuais de uma empresa, marca, produto ou experiência. Um bom design system é o que vai unir a identidade do produto com os princípios da empresa, as melhores práticas de usabilidade e acessibilidade para construir componentes e padrões visuais que atendam aos usuários. Mais que padrões visuais, o Design System expressa também a mensagem que a empresa ou produto quer passar para seu usuário final, e serve para facilitar a comunicação com os diferentes times (desenvolvimento, design, produto etc.). É um documento muito importante para manter a consistência visual e a experiência de uso como um todo, e isso fica fácil tendo os padrões bem definidos. Com o Design System, os desenvolvedores são capazes de entender qual sistema de grid foi usado no estágio de design sendo então mais fácil para eles decidirem se devem ir com alguns frameworks prontos, como Bootstrap, ou criar algo novo do zero. Além disso, oDesign System também dará aos desenvolvedores mais insights, fazendo-os entender quais tipos de componentes de UI serão incluídos na interface do usuário, por exemplo, qualquer componente exclusivo em comparação com os padrão (botões, entradas, formulários, guias e assim por diante), qualquer layout exclusivo ou se há componentes de design extras para os próximos recursos. Design para Front End – Página 54 de 112 Fonte: HACQ, 2019. Não existe uma estrutura padrão em relação ao que um Design Systems deve ter, isso depende da necessidade da equipe e do tipo de projeto. De uma forma geral, um Design Systems possui a seguinte estrutura: Design para Front End – Página 55 de 112 Fonte: SERRADAS, 2018. Como é possível ver pela imagem, a estrutura é dividida em 4 grandes blocos: ▪ Blocos de construção (building blocks): é onde se encontra a paleta de cor, a tipografia, definição de grid, iconografia etc. Ou seja, é o bloco onde são definidos os padrões básicos de design. ▪ Biblioteca de Padrões (Pattern Library): é uma “subclasse no sistema de design, é o conjunto de padrões de design para uso em uma empresa” (SERRADAS, 2018). Ou seja, é onde se encontram os templates, módulos, componentes e elementos que serão usados por padrão. Essa parte pode ser construída apenas a parte visual ou já ter os códigos de cada elemento para implementação. ▪ Regras (rules): onde se encontram as regras de design, diretrizes de implementação e diretrizes editoriais. Ou seja, é onde são definidos as regras de o que deve ser implementado, onde e de qual forma. ▪ Guia de estilos (style guide): é “uma documentação que descreve o próprio sistema de design: como os produtos devem parecer e se comportar, padrões Design para Front End – Página 56 de 112 de interface do usuário como tamanho de fonte, cores, botões e etc.” (SERRADAS, 2018). Muitas empresas possuem seu Design System disponível para o público, abaixo estão alguns exemplos para se ter como referência: Material Design - https://material.io/. Atlassian - https://atlassian.design/. https://material.io/ https://atlassian.design/ Design para Front End – Página 57 de 112 Polaris - https://polaris.shopify.com/. Atomic Design O design atômico é uma metodologia composta por cinco estágios distintos trabalhando juntos para criar sistemas de design de interface de uma maneira mais deliberada e hierárquica. Os cinco estágios do projeto atômico são: Fonte: FROST, 2018. 1. Átomos: servem como blocos de construção básicos que abrangem todas as nossas interfaces de usuário. Eles incluem elementos HTML básicos, como rótulos de formulários, entradas, botões e outros que não podem ser divididos, mas sem deixar de ser funcionais. https://polaris.shopify.com/ Design para Front End – Página 58 de 112 2. Moléculas: são grupos relativamente simples de elementos de UI funcionando juntos como uma unidade. Por exemplo, um rótulo de formulário, entrada de pesquisa e botão podem ser unidos para criar uma molécula de formulário de pesquisa. Fonte: FROST, 2018. 3. Organismos: são componentes UI relativamente complexos compostos por grupos de moléculas e/ou átomos e/ou outros organismos. Esses organismos formam seções distintas de uma interface. Fonte: FROST, 2018. Enquanto alguns organismos podem consistir em diferentes tipos de moléculas, outros organismos podem consistir na mesma molécula repetida continuamente. Por exemplo, em uma loja de roupas, podemos ter vários módulos de produtos dentro de um organismo. 4. Modelos (templates): são objetos de nível de página que colocam componentes em um layout e articulam a estrutura de conteúdo subjacente do design. Design para Front End – Página 59 de 112 Fonte: FROST, 2018. Esse modelo de página inicial exibe todos os componentes de página necessários funcionando juntos, o que fornece contexto para essas moléculas e organismos relativamente abstratos. Ao elaborar um sistema de design eficaz, é fundamental demonstrar como os componentes se parecem e funcionam juntos no contexto de um layout para provar que as peças somam um todo que funciona bem. Outra característica importante dos modelos é que eles se concentram na estrutura de conteúdo subjacente da página e não no conteúdo final. 5. Páginas: são instâncias específicas de modelos que mostram a aparência de uma UI com conteúdo representativo real no local. Além de demonstrar a interface final como seus usuários a verão, as páginas são essenciais para testar a eficácia do sistema de design subjacente. É no estágio da página que Design para Front End – Página 60 de 112 podemos dar uma olhada em como todos esses padrões se mantêm quando o conteúdo real é aplicado ao sistema de design. Fonte: FROST, 2018. As páginas também fornecem um local para articular variações em modelos, o que é crucial para estabelecer sistemas de design robustos e confiáveis. Vantagens em usar o Atomic Design ▪ O design atômico se aplica a todas as interfaces de usuário, não apenas às baseadas na web. ▪ Uma das maiores vantagens que o design atômico oferece é a capacidade de alternar rapidamente entre o abstrato e o concreto. ▪ Com ele, temos a separação limpa entre estrutura e conteúdo. Design para Front End – Página 61 de 112 Fonte: FROST, 2018. Design para Front End – Página 62 de 112 CSS Layout As técnicas de layout de página CSS nos permitem pegar os elementos contidos em uma página da web e controlar onde eles são posicionados, os outros elementos ao redor deles, seu contêiner pai e a janela/viewport principal. Fluxo normal do CSS Elementos em bloco (display: block): ▪ Os elementos aparecem empilhados uns sobre os outros; ▪ O conteúdo de um elemento de nível de bloco é 100% da largura de seu elemento pai e tem a mesma altura de seu conteúdo. Elementos em linha (display: inline): ▪ Os elementos aparecem um ao lado do outro; ▪ O conteúdo de um elemento de nível de linha tem a mesma altura e largura de seu conteúdo. Elementos em bloco e linha (display: inline-block): ▪ É a junção dos comportamentos dos valores inline + block: é possível definir uma largura (width) e altura (height) como no display: block e é possível deixar um elemento do lado do outro, da mesma forma que fazemos com o display: inline. Design para Front End – Página 63 de 112 Fonte: http://devfuria.com.br/html-css/display/. Os primórdios do layout web ▪ Layout de tabela (legado) Antes mesmo de CSS básico ser suportado de forma confiável em navegadores, os desenvolvedores web também costumavam usar tabelas para layouts de páginas da web inteiras, colocando seus cabeçalhos, rodapés, colunas diferentes etc. em várias linhas e colunas da tabela. Problemas ao usar o layout de tabela: são inflexíveis, muito pesados na marcação, difíceis de depurar e semanticamente errados (por exemplo, usuários de leitores de tela têm problemas para navegar nos layouts de tabelas). Fonte: https://www.pngwing.com/pt/free-png-tcyby. http://devfuria.com.br/html-css/display/ https://www.pngwing.com/pt/free-png-tcyby Design para Front End – Página 64 de 112 ▪ Float (legado) Float tem sido comumente usado para criar layouts de sites inteiros com várias colunas de informações flutuantes para que fiquem lado a lado. A manipulação dos elementos com float é comumente usado junto com elementos de margem, borda, altura/largura etc. Fonte: https://css-tricks.com/almanac/properties/f/float/. CSS Flexbox O módulo Flexbox Layout (Caixa Flexível) visa fornecer uma forma mais eficiente de dispor, alinhar e distribuir o espaço entre os itens em um contêiner, mesmo quando seu tamanho é desconhecido e/ou dinâmico (daí a palavra “flex”). Características: ▪ Foco no fluxo deconteúdo; ▪ Usado para projetar layouts unidimensionais simplificados, com uma disposição em linha reta; ▪ Define propriedades para o pai (contêiner) e seus filhos (itens); https://css-tricks.com/almanac/properties/f/float/ Design para Front End – Página 65 de 112 ▪ É mais indicado para os componentes de aplicativos e layouts em pequena escala. Fonte: https://css-tricks.com/snippets/css/a-guide-to-flexbox/. Comandos de Flexbox: ▪ Flex contêiner (pai): ‒ display: flex; - Define o elemento como um flex contêiner, tornando os seus filhos flex-itens. ‒ flex-direction: row | row-reverse | column | column-reverse; - Define a direção dos flex itens. ‒ flex-wrap: wrap | nowrap | wrap-reverse; - Define se os itens devem quebrar ou não a linha. ‒ flex-flow: <flex-direction> <flex-wrap>; - Atalho para as propriedades flex-direction e flex-wrap. ‒ justify-content: flex-start | flex-end | center | space-between | space- around | space-evenly; - Alinha os itens flex no contêiner de acordo com a direção. ‒ align-items: stretch | flex-start | flex-end | center | baseline; - Alinha os flex itens de acordo com o eixo do contêiner. https://css-tricks.com/snippets/css/a-guide-to-flexbox/ Design para Front End – Página 66 de 112 ‒ align-content: flex-start | flex-end | center | space-between | space- around | space-evenly | stretch; - Alinha as linhas do contêiner em relação ao eixo vertical (só funciona se existir mais de uma linha de flex- itens). Fonte: https://css-tricks.com/snippets/css/a-guide-to-flexbox/. ▪ Flex itens (filhos): ‒ order: 0; - Modifica a ordem dos flex itens. ‒ flex-grow: 0; - Define a habilidade de um flex item crescer. ‒ flex-shrink: 1; - Define a capacidade de redução de tamanho do item. ‒ flex-basis; - Indica o tamanho inicial do flex item antes da distribuição do espaço restante. ‒ align-self: auto; - serve para definirmos o alinhamento específico de um único flex item dentro do nosso contêiner. https://css-tricks.com/snippets/css/a-guide-to-flexbox/ Design para Front End – Página 67 de 112 CSS Grid CSS Grid Layout (também conhecido como “Grid”), é um sistema de layout bidimensional, baseado em grade, que visa nada menos do que mudar completamente a maneira como projetamos interfaces de usuário baseadas em grade. Características: ▪ Foco na posição de conteúdo; ▪ Usado para criação de layouts bidimensionais de complexidade maior; ▪ Define propriedades para linhas e colunas, como uma tabela; ▪ É ideal para organizar a estrutura de um esquema com elementos de nível mais elevado, como cabeçalhos, rodapés, seções e sidebar. Fonte: https://css-tricks.com/snippets/css/complete-guide-grid/. Comandos de Grid: https://css-tricks.com/snippets/css/complete-guide-grid/ Design para Front End – Página 68 de 112 ▪ Grid contêiner (pai): ‒ display: grid; - Define o elemento como um grid contêiner. ‒ grid-template-column: (3, 1fr); - Define o número total de colunas que serão criadas no grid. ‒ grid-template-rows: auto; - Define a quantidade de linhas no grid. ‒ grid-template-areas: “area area area”; - Define áreas específicas no grid. O ponto (.) é usado para criar áreas vazias. ‒ gap: <grid-row-gap> <grid-column-gap>; - Define o gap (espaço) entre os elementos do grid (linhas e colunas). ‒ grid-auto-columns: 1fr; - Define o tamanho das colunas do grid implícito que são geradas automaticamente quando um elemento é posicionado em uma coluna que não foi previamente definida. ‒ grid-auto-rows: 1fr; - Define o tamanho das linhas do grid implícito que são geradas automaticamente quando um elemento é posicionado em uma linha que não foi definida. ‒ place-items: <justify-items><align-items>; - Justifica os itens do grid em relação ao eixo x (horizontal) e ao eixo y (vertical). Design para Front End – Página 69 de 112 ‒ place-content: <justify-content><align-content>; - Justifica o conteúdo dos itens do grid em relação ao eixo x (horizontal) e ao eixo y (vertical) em relação à célula. Fonte: https://css-tricks.com/snippets/css/complete-guide-grid/. ▪ Grid itens (filhos): ‒ grid-column: 3 / span 2; - Define quais colunas serão ocupadas pelo grid item. ‒ grid-row: 3 / 4; - Define quais linhas serão ocupadas pelo grid item. https://css-tricks.com/snippets/css/complete-guide-grid/ Design para Front End – Página 70 de 112 ‒ grid-area: header; - Define a área do item do grid. ‒ place-self: center stretch; - Justifica o item do grid em relação ao eixo x (horizontal) e ao eixo y (vertical) e em relação à célula. Design para Front End – Página 71 de 112 Técnicas de Design Responsivo Durante a elaboração de um projeto, é importante pensar na responsividade da aplicação para diferentes dispositivos. Existem dois padrões que normalmente são usados: o Responsive Design e o Adaptive Design. Responsive Design Responsive Design (ou Design Responsivo) é fluido e se adapta ao tamanho da tela, independentemente do dispositivo de destino. Esse padrão usa media queries CSS para alterar estilos com base no dispositivo de destino, como tipo de exibição, largura, altura etc., e apenas um deles é necessário para que o site se adapte às telas diferentes. Fonte: http://www.cuellarstudio.com/hello-world/. O design responsivo não oferece tanto controle quanto o adaptativo, mas exige muito menos trabalho para construir e manter. Os layouts responsivos também são fluidos e, embora os adaptativos possam usar, e usam, porcentagens para dar http://www.cuellarstudio.com/hello-world/ Design para Front End – Página 72 de 112 uma sensação mais fluida ao dimensionar, eles podem, novamente, causar um salto quando uma janela é redimensionada. Adaptive Design Adaptive Design (ou design adaptável) usa layouts estáticos baseados em pontos de interrupção que não respondem, uma vez que são carregados inicialmente. Adaptive funciona para detectar o tamanho da tela e carregar o layout apropriado para ele – geralmente é projetado um site adaptável para seis larguras de tela comuns: ▪ 320; ▪ 480; ▪ 760; ▪ 960; ▪ 1200; ▪ 1600. Este design é útil para adaptar um site existente a fim de torná-lo mais compatível com dispositivos móveis. Isso permite que você controle o design e desenvolva para viewports múltiplas e específicas. O número de viewports que será usado para programar as páginas depende inteiramente do programador. No entanto, ele oferece um certo controle (por exemplo, sobre o conteúdo e o layout) que não existe necessariamente com o design responsivo. Design para Front End – Página 73 de 112 Fonte: http://www.cuellarstudio.com/hello-world/. Geralmente, você começaria projetando para uma janela de visualização de baixa resolução (mobile-first) e aumentaria para garantir que o design não fosse restringido pelo conteúdo. Como mencionado anteriormente, é padrão projetar para seis resoluções. No entanto, você pode tomar uma decisão mais informada, observando sua análise da web para os dispositivos mais comumente usados e, em seguida, projetando para essas janelas de visualização. Responsive vs Adaptive Design À primeira vista, parece que o adaptativo requer mais trabalho, pois você precisa projetar layouts para no mínimo seis larguras. No entanto, responsivo pode ser mais complexo, pois o uso indevido de consultas de mídia (ou mesmo não as usar) pode causar problemas de exibição e desempenho. O design responsivo é geralmente a técnica preferida apenas por causa do trabalho contínuo que o design adaptativo exige. Responsive design é mais usado por ser mais rápido em desenvolvimento e manutenção, mas Adaptive design é mais performático e tem uma melhor usabilidade http://www.cuellarstudio.com/hello-world/ Design para Front End –
Compartilhar