100 dicas de front-end (parte 1)

Daniel Tapias Morales
Training Center
Published in
9 min readJan 18, 2019

--

Resolvi participar da brincadeira e fiz minha compilação com 100 dicas de front-end. Pode ser que você já saiba muitas delas, mas creio que, até mesmo para os mais experientes, possa ter algo de novo.

Então, vamos às dicas:

1 — Não deve ser novidade para ninguém que o HTML deve ser usado para marcar nosso conteúdo com tags semânticas. Quando for escrever seu código HTML, tente não pensar no resultado visual e foque no que cada informação da página representa.

2 — Partindo desse princípio, não há nada de errado em usar corretamente a tag <br> para gerar quebra de linha. Mas se você escrever dois <br>’s seguidos provavelmente o que você está querendo, na verdade, são dois parágrafos.

3 — Ainda sobre essa ótica, uma <aside> não precisa ficar, necessariamente, ao lado. A tag <aside> está diretamente relacionada ao que ela representa e não à sua posição no layout. Eu escrevi sobre isso aqui Quando o header é aside

4 — Outra tag que pode gerar confusão é o <address>. Essa tag não deve ser utilizada para mostrar um endereço, mas sim as informações de contato do dono da página ou da seção. Segundo o site da MDN, para representar um endereço arbitrário, um que não seja relacionado à informação para contato do dono da página ou da seção, use um elemento <p> ao invés do elemento <address>.

5 — Nós seres humanos sabemos que “22h00”, “22:00” ou “10 horas da noite” representam o mesmo horário. Mas para informarmos à máquina que se trata de um horário, precisamos escrever a marcação correta, ou seja, <time datetime="22:00">22h00</time>. Podemos, inclusive, acrescentar informações sobre o horário universal UTC: <time datetime="22:00-03:00">22h00</time>.

6 — Quando você precisar representar uma tecla do teclado, use a tag <kbd>. Exemplo: <p>Pressione <kbd>Ctrl</kbd> + <kbd>P</kbd> Para imprimir</p>.

7 — Quando você precisar incluir alguma citação externa na sua página, utilize as tags <blockquote>, <cite> ou <q> para isso.

8 — Imagens responsivas de verdade precisam utilizar o atributo srcset (faça o que eu digo, não faça o que eu faço 😁). Exemplo:

<img src=http://lorempixel.com/400/200/ srcset=http://lorempixel.com/600/300/ 600w, http://lorempixel.com/800/400/ 800w alt="texto alternativo convencional" sizes="(min-width: 480px) 33.33vw, 100vw">.

No código acima, informamos ao browser que se a viewport for menor que 480px, a imagem ocupará a largura total, caso contrário, a imagem ocupará 1/3 da tela. O browser irá decidir por conta própria qual a melhor fonte de imagem para renderizar na tela.

9 — Você pode incluir emojis no seu HTML ou CSS da maneira que escreve no seu celular

10 — A tag <picture> para imagens responsivas é opcional e é utilizado em conjunto com a tag <source> quando você tem mais de uma fonte de imagem.
Você pode ler a respeito no link que escrevi há muito tempo no medium design responsivo nos dias de hoje.

11 — Uma <dl> pode ter mais de um <dt> e <dd>.

Veja dois exemplos copiados na cara-de-pau do MDN.

<dl>
<dt>Firefox</dt>
<dt>Mozilla Firefox</dt>
<dt>Fx</dt>
<dd>
A free, open source, cross-platform,
graphical web browser developed by the
Mozilla Corporation and hundreds of
volunteers.
</dd>
</dl><dl>
<dt>Firefox</dt>
<dd>
A free, open source, cross-platform,
graphical web browser developed by the
Mozilla Corporation and hundreds of
volunteers.
</dd>
<dd>
The Red Panda also known as the Lesser
Panda, Wah, Bear Cat or Firefox, is a
mostly herbivorous mammal, slightly larger
than a domestic cat (60 cm long).
</dd>
</dl>

12 — Sabe quando você quer destacar um pedaço do texto e acaba envolvendo-o dentro de uma <span> com uma classe .destaque? Forte indício de que você estava querendo, na verdade, era usar a tag <mark>.

13 — Utilize as tags <del> e <ins> para representar textos removidos ou inseridos, respectivamente.

14 — O HTML5 possui um atributo que informa ao agente de usuário que o conteúdo de determinada tag pode ser editado pelo usuário. Deve ser utilizado em conjunto com o javascript. Segue um exemplo de utilização no mundo HTML.

<p contenteditable=”true”> Edite seu conteúdo </p>

15 — Por padrão, a tag <a> recebe o foco quando o usuário navega pelo teclado. Se você precisar que outro elemento tenha o mesmo comportamento, utilize o atributo tabindex. Este atributo recebe um numero inteiro que representa a ordem de navegação.

16 — É possível incluir links que, ao serem clicados, abre o telefone em aparelhos mobile:

<a href=”tel:1–408–555–5555">1–408–555–5555</a>

17 — o atributo target="_blank" possui problemas de segurança em links. use rel="noopener noreferrer" para minimizar esse problema.

18 — microdados acrescentam mais valor semântico quando as tags HTML não são suficientes.

Como exemplo, avalie o código a seguir:

<p>
Daniel Tapias Morales<br>
Intrutor<br>
<a href=”http://www.serfrontend.com" >serfrontend.com</a>
</p>

Não há nada de errado com o parágrafo acima, porém, a máquina não sabe que se trata de uma pessoa (Daniel) e nem tãopouco de um cargo (instrutor). Vamos corrigir isso usando microdados:

<p itemscope itemtype=”http://schema.org/Person">
<span itemprop=”name”>Daniel Tapias Morales</span><br>
<span itemprop=”jobTitle”>Intrutor</span><br>
<a href=”http://www.serfrontend.com" itemprop=”url”>serfrontend.com</a>
</p>

Para saber mais http://schema.org

19 — Muito semelhante aos Microdados, que passa informações adicionais ao user-agent, o JSON-LD oferece informações padronizadas aos user-agents como os motores de busca. O conceito é muito parecido com os microdados mas os atributos não são mais inseridos no meio das tags HTML. Esse assunto é muito extenso (e pra ser sincero eu não sou a melhor pessoa pra falar sobre ele). De qualquer forma, segue um exemplo de código

<script type=”application/ld+json”>
{
“@context”: “http://schema.org",
“@type”: “Person”,
“name”: “Daniel Tapias Morales”,
“jobTitle”: “Intrutor”,
“url”: “http://serfrontend.com"
}
</script>

20 — Se possível, inclua <caption> como primeiro filho de suas <table> contendo uma descrição dos dados da tabela. Note que o atributo summary foi depreciado

21 — Nas células de sua tabela que representam cabeçalhos, troque as suas <td> por <th>.

22 — Inclua atributos scope nas suas <th> para informar ao agente de usuário se este cabeçalho se refere a linhas, colunas, conjunto de linhas ou conjunto de colunas.

Os valores possíveis são, portanto: row, col, rowgroup ou colgroup.

Vai ficar mais fácil entender com uma imagem

23 — Agora falando de formulários, utilize as tags <fieldset> para criar grupos lógicos de suas entradas de dados.

24 — A tag <legend> acrescenta uma descrição ao <fieldset>.

25 — Faça um vínculo entre o texto que aparece ao usuário e o seu respectivo input com a tag <label>. Voce pode fazer esse vínculo de duas formas:

26 — Com o atributo id que deve ter o mesmo valor do atributo for do <label>.

Veja um exemplo:

<label for=”user”>Usuário</label>
<input type=”text” id=”user” name=”txtuser” />

27 — Ou envolvendo o input e o texto com a tag <label>.Mais um exemplo:

<label>Usuário <input type=”text” name=”txtuser” /></label>

28 — Nunca, mas NUNCA, crie um <input type="radio"> ou <input type="checkbox"> sem um <label> relacionado. Isso cria um vínculo entre o campo e o texto que aparece para o usuário. Isso é regra básica para melhorar a acessibilidade de sua interface.

30 — É permitido ter dois <label> para o mesmo input. Não há nada de errado com isso.

31 — Se a função da sua página é fazer com que o usuário digite algo em um input, como por exemplo uma página de busca ou um formulário de login, acrescente um atributo autofocos no seu input. Isso também facilita a usabilidade

32 — Voce pode utilizar a tag <optgroup> para agrupar <option> dentro de um <select>.

<select>
<optgroup label=”Grupo 1">
<option>Opção 1.1</option>
</optgroup>
<optgroup label=”Grupo 2">
<option>Opção 2.1</option>
<option>Opção 2.2</option>
</optgroup>
<optgroup label=”Grupo 3" disabled>
<option>Opção 3.1</option>
<option>Opção 3.2</option>
<option>Opção 3.3</option>
</optgroup>
</select>

33 — Se vc tem um texto muito grande sem espaço (exemplo de uma URL) e está quebrando em aparelhos mobile, pode colocar <br> opcionais. Como? Com a tag <wbr>. É só colocar essa tag onde você quer que quebre para a próxima linha se for necessário.

Exemplo:

<p> http://www.serfrontend.com/<wbr>qualquer/<wbr>url/<wbr>/bem/<wbr>grande...</p>

34 — Ao contrário do <wbr> há também a tag <nobr>, que diz para o navegador que não pode quebrar linha. Mas atenção: essa tag foi depreciada e não deve ser usada. Use CSS no lugar.

<span style=”white-space: nowrap”>Texto longo sem quebras de linha</span>

35 — Outra tag que foi depreciada e, portanto, não deve ser usada é a <hgroup> que servia para agrupar títulos. Não a use.

36 — A tag <figure> não tem nada a ver com figuras. Ela é usada para demarcar uma área independente do documento. Algo que, se for removido da página, não causa prejuízo ao conteúdo principal.

37 — dentro de <figure> você pode incluir um <figcaption> que representa uma legenda da tag <figure>.

38 — Outra tag bem importante para semântica é a <abbr>. É usada quando temos abreviações. Você pode ter pensado em <acronym>, mas esta foi depreciada.

<p>Eu amo <abbr title=”Linguagem de marcação de hypertextos”>HTML</abbr></p>

38 — Coloque o atributo lang no seu <html> indicando qual é o idioma da página. E coloque o atributo lang em outras tags atualizando o idioma quando necessário. Exemplo:

<html lang=”pt-br”>
<body>
<p> Eu amo o <i lang=”en-us”>Hypertext Language Markup</i>.</p>
</body>
</html>

39 — Falando agora de CSS. Já precisou colocar uma borda interna em um elemento? Não faça gambiarras. Você pode incluir um outline e um outline-offset. Inclusive pode animar a distância interna da borda.

div{
outline: 1px dotted blue;
outline-offset: -10px;
}
div:hover{
outline-offset: -50px;
}

40 — Provavelmente vc já sabia que dá pra incluir um contador com CSS.

main {
counter-reset: paragrafos;
}
h3::before {
counter-increment: paragrafos;
content: counter(paragrafos);
}

Mas além disso, dá pra definir qual número inicial da contagem.

main {
counter-reset: parágrafos 9;
}
h3::before {
counter-increment: paragrafos;
content: counter(paragrafos);
}

Agora a contagem começará em 10.41 — Sabia que dá pra ampliar ou diminuir uma sombra do box-shadow? É só passar um valor adicional antes da cor. Este valor é um número em pixels. Se positivo, então a sombra é ampliada. Se negativo, a sombra é reduzida.

box-shadow: 2px 2px 2px 10px rgba(0, 0, 0, 0.2);

A sombra será ampliada 10 pixels.42 — Por padrão, as células de uma tabela são separadas umas das outras. Para mudar esse comportamento:

border-collapse: collapse;

43 — provavelmente você já conhece text-decoration: underline; Mas saiba que dá fazer coisas muito mais legais, como por exemplo: text-decoration: underline wavy #c09; que na verdade é um atalho para

text-decoration-line: underline;
text-decoration-style: wavy;
text-decoration-color: #c09;

Isso não vai funcionar no IE. Mas é a vida!

44 — Media-queries não gera especificidade. Isso significa que o código abaixo não funciona da maneira que você espera.

@media screen and (min-width: 1000px) {
body{
background: red;
}
}
body{
background: blue;
}

45 — No flexbox, não existe horizontal e vertical. O que existe é eixo principal (main axis) e transversal (cross axis). Você pode falar que o eixo principal é horizontal com flex-direction: row; e que é vertical quando flex-direction: column. Um detalhe importante é que isso é válido apenas em escritas horizontais (dir=ltr).

46 — Há um espaço obrigatório entre elementos com display: inline-block assim como há um espaço entre duas palavras (elementos inline). Existem gambiarras que removem esses espaços, mas todas elas são muito feias para constar nessa lista.

47 — Provavelmente você já conhece background-repeat. Sabia que esta propriedade aceita dois valores pouco usados: round e space? Pois é, elas tratam como a imagem de fundo irá se repetir.
Ambos os valores fazem com que a imagem de fundo que se repete nunca seja cortada (exceto quando o valor for space e a imagem for maior do que o elemento). A diferença é que enquanto o valor space distribui as imagens igualmente no espaço interno do elemento, o valor round aumenta ou diminui a imagem de fundo para que se ajuste ao elemento.

48 — Já tentou aplicar box-shadow num elemento com transparência e o resultado não foi exatamente o que você esperava? Tente trocar o box-shadow por filter: drop-shadow(). A diferença é que este respeita a transparência do conteúdo, seja um .png transparente, um svg ou até mesmo um desenho criado pelo próprio CSS.

49 — Sabia que dá pra utilizar no CSS qualquer valor passado por atributo HTML? Para isso, basta usar o attr(). Veja um exemplo:

<div data-index-number=”12314">

</div>

CSS:

div::before {
content: attr(data-index-number);
}

Importante notar que este conteúdo não está acessível em tecnologias assistivas ou motores de busca. Nem mesmo é possível que o usuário selecione este conteúdo na página.

50 — Para incluir o valor do atributo href dinamicamente em link quando impresso ou salvo em pdf, utilize a seguinte regra:

@media print{
a[href]::after{
content: “ (“ attr(href) “)”;
}
}

O que esta regra faz é incluir depois do texto do link o valor do atributo href entre parênteses, apenas em impressões ou PDF’s.

Por enquanto é isso. Em breve apresentarei mais 50 dicas de front-end.

Obrigado pela leitura

Aproveito para fazer o meu jabá e dizer que qualquer um dos meus cursos de frontend tem um descontão se você utilizar o cupom de desconto PROMOSITE20.

Originally published at serfrontend.com.

--

--