Nossa querida e amada Linguagem de Marcação de Hipertexto, às vezes chamada de HTML, constitui a base da própria Web. Mas sua escrita, convenhamos, não é das mais rápidas. Felizmente, existem soluções como Emmet para ajudar muuuito na hora de escrever HTML.
Então, se você ainda não sabe o que é o Emmet e/ou quer saber como instalar e usar o Emmet, nas mais diversas linguagens, continue lendo.
O que é Emmet
Devs com vestígios de pêlos grisalhos no corpo provavelmente se lembram do Zen Coding, um plugin (para diversos editores/IDEs) que facilitava bastante a escrita do HTML, provendo abreviações poderosas, snippets dinâmicos e diversos atalhos para escrever HTML.
Já o Emmet é um plugin (para diversos editores/IDEs) que facilita bastante a escrita do HTML, provendo abreviações poderosas, snippets dinâmicos e diversos atalhos para escrever HTML…
Coincidência? Eu acho que não.
Origens à parte, fato é que o poderoso Emmet oferece uma série de vantagens/funcionalidades, como:
- Abreviações baseadas na sintaxe de CSS. A adaptação ao Emmet é praticamente automática, já que sua sintaxe é inspirada nos seletores de CSS (qualquer dev front-end sabe como usar antes de usar);
- Snippets dinâmicos. Cada abreviação é transformada em tempo de execução, apenas sendo preciso pequenas alterações em nomes para se obter resultados diferentes;
- Codificação ultra-rápida. Com o Emmet, é possível escrever rapidamente um monte de código, envolver trechos com novas tags, percorrer rapidamente e selecionar partes importantes e muito mais;
- Customização. É possível adicionar facilmente novos trechos e ajustar a experiência do Emmet com apenas alguns arquivos JSON;
- Plataforma para novas ferramentas. Emmet é open souce, permitindo alterações no código-fonte e reutilizção de seus módulos para criar ações novas e exclusivas.
Como instalar o Emmet
Emmet é um plugin disponível para diversos editores, IDEs e plataformas. Independentemente de sua preferência na hora de codificar, é provável que haja a possibilidade de você se beneficiar de tudo de bom que o Emmet oferece.
Algumas dessas versões do Emmet são oficiais, enquanto outras são oferecimentos third-party que, às vezes, não contemplam todas suas características.
Então, por exemplo, se você quer usar Emmet no Sublime Text ou Eclipse/Aptana, trata-se de um plugin oficial, com todas as funcionalidades; se for usar Emmet no VS Code ou Vim, trata-se de um third-party.
Lembrando que o Emmet também está disponível em serviços e plataformas online, como Codeanywhere, CodePen, JSFiddle e muitos outros.
De qualquer maneira, basta acessar a página de download do Emmet para baixar a versão apropriada ao seu IDE/Editor de preferência — em alguns casos, já até vêm pré-instalado; consulte a documentação de seu Editor ou IDE favorito.
Como usar o Emmet
O foco desta explicação é mostrar como escrever HTML até 10x mais rápido, mas não necessariamente limitando-se a arquivos .html
, já que ele pode prover suporte de uso (a depender do editor/IDE) em diversos tipos de arquivo, como .html
, .haml
, .pug
, .jsx
, .css
, .scss
, .sass
, .less
e linguagens como .handlebars
e .php
.
Então, já sabe: até usar Emmet com React e PHP é possível.
E se leu com atenção a listagem de formatos acima, pode ter se perguntando que raios de utilidade teria usar o Emmet em arquivos de CSS e pré-processadores, como Sass, mas a verdade é que — atenção, segure-se na cadeira! — Emmet também oferece suporte a abreviações em CSS.
Sim, é possível também usar o Emmet para estilo, otimizando para uma fita k7, mas agora o foco é como escrever HTML mais rápido, então esse assunto fica para um outro artigo.
Uma coisa importante é o termo “expandir“. Comumente, quando se escreve uma abreviação com Emmet, para se obter o resultado final é preciso acionar um trigger (geralmente, Tab
); quando isso acontece, dizemos que “houve uma expansão”, que “o código expandiu” ou coisas desse tipo.
E por quê esse termo? É uma convenção. Nada mais.
Sem mais delongas, partamos para como usar o Emmet e conhecer sua sintaxe e algumas possibilidades de abreviações.
Elementos
A funcionalidade mais básica do Emmet é fazer expansão em nomes de tags/elementos.
Por exemplo, ao se escrever main
e expandir, cria-se:
1 |
<main></main> |
Ao se escrever footer
e expandir, cria-se <footer></footer>
; header
, <header></header>
; p
, <p></p>
e; assim por diante.
Tem também alguns “especiais”, como bq
para <blockquote></blockquote>
.
O interessante é que, ao fazer a expansão, o cursos já se posiciona no ponto ideal para continuar a escrita da estrutura HTML. Não dá para exemplificar nesses exemplos de código, mas assista ao vídeo no início do artigo para ver exatamente como é a coisa.
Classes e IDs
Aqui, a inspiração na sintaxe de CSS começa a ficar evidente.
Ao digitar algum nome precedido de .
(ponto), ocorre uma expansão para uma div
(elemento default) com atributo de classe preenchido exatamente com o nome em questão.
Por exemplo, .some-class
expande para <div class="some-class"></div>
.
O mesmo para IDs. Como exemplo, #some-id
expande para <div id="some-id"></div>
.
E para esse tipo de expansão para outros elementos? Simples, basta preceder o .
ou #
com o nome da tag que se quer.
main.l-main
expande para <main class="l-main"></main>
; aside#exclusive
para <aside id="exclusive"></aside>
e; assim por diante (mas atenção ao usar IDs).
Atributos
“Qualquer dev front-end sabe como usar o Emmet antes de usar o Emmet”.
Enquanto minha camiseta com essa frase não fica pronta, adivinhe qual a abreviação necessária para atributos. Lembre-se: é de inspiração no CSS.
Sem manter o suspense, a sintaxe para atributos é usar a sintaxe [attr]
.
Então, span[tabindex="0"]
expande para <span tabindex="3"></span>
; button[disabled]
, para <button disabled></button>
; td[title="Hello world!" colspan=3]
, <td title="Hello world!" colspan="3"></td>
; etc.
Aninhamento
Uma das funções mais úteis, poderosas e favoritas da comunidade Emmet: aninhamento.
Com aninhamento, o real poder do Emmet começa a ser liberado, permitindo criar estrutura mais completas e complexas.
Através de >
é possível estipular quantos níveis de profundidade forem necessários para uma estrutura HTML desejada.
Após a expansão de ul>li>a
, obtém-se:
1 2 3 |
<ul> <li><a href=""></a></li> </ul> |
Já com o cursor dentro das aspas do atributo href
, prontinho para receber o URL; depois de escrever, ao apertar Tab
, ele já pula para entre as chaves de abertura e fechamento para que o texto do link seja informado.
Tava achando que era brincadeira (ou clickbait) quando afirmamos ser possível escrever HTML até 10x mais rápido usando o Emmet?
Seletor-irmão
E se existe a possibilidade de criar estruturas aninhadas, vem muito a calhar ser possível também trabalhar com seletores-irmão através de +
.
Por exemplo, ao escrever div+p+bq
e expandir, obtém-se:
1 2 3 |
<div></div> <p></p> <blockquote></blockquote> |
Subida
A subida (ou climb-up), feita com ^
, é um recurso que muitos dos usuários de Emmet desconhecem. Juntamente com aninhamento e seletor-irmão, ela permite compor abreviações ainda mais poderosas para resultados ainda mais surpreendentes.
Por exemplo, div+div>p>span+em^bq
expande para:
1 2 3 4 5 |
<div></div> <div> <p><span></span><em></em></p> <blockquote></blockquote> </div> |
Perceba que foi-se fazendo uma estrutura com irmãos e descendentes e, ao se chegar no em
, voltou-se um nível na hierarquia para a inclusão do bq
, fazendo dele irmão de p
.
É possível usar quantas subidas forem necessárias, como o caso de div+div>p>span+em^^^bq
expandir para:
1 2 3 4 5 |
<div></div> <div> <p><span></span><em></em></p> </div> <blockquote></blockquote> |
Multiplicação
Essa é uma possibilidade do Emmet que também consta no rol de preferências da comunidade e, com certeza, você também vai gostar bastante.
Através do caractere *
é possível fazer a multiplicação de seletores que constarão na expansão.
Lembra do exemplo mais acima ul>li>a
? Se precisasse de múltiplos item de lista, bastaria usar ul>li*5>a
para obter:
1 2 3 4 5 6 7 |
<ul> <li><a href=""></a></li> <li><a href=""></a></li> <li><a href=""></a></li> <li><a href=""></a></li> <li><a href=""></a></li> </ul> |
Agrupamento
E para fechar o quarteto de abreviações para estruturas complexas de HTML com Emmet, temos o agrupamento, que, através de ()
(parênteses), permite fazer grupamentos de abreviações (algo como “subabreviaturas”).
Um exemplo é div>(header>ul>li*2>a)+footer>p
, que faz a expansão para:
1 2 3 4 5 6 7 8 9 10 11 |
<div> <header> <ul> <li><a href=""></a></li> <li><a href=""></a></li> </ul> </header> <footer> <p></p> </footer> </div> |
10x mais rápido, amigo. 10x mais rápido.
Texto/Contador
Também estão disponível alguns facilitadores a mais, como a possibilidade de já incluir texto diretamente nas abreviações através de {}
(chaves).
Um exemplo bem simples para entender é a{Clica ni mim}
, que expande para:
1 |
<a href="">Clica ni mim</a> |
Podendo, inclusive, ser usado várias vezes em uma mesma abreviação, como em a>{Clica }+b{ni mim}
, que resulta em:
1 |
<a href="">Clica <b>ni mim</b></a> |
E o caractere $
, permite atribuir contadores textuais a abreviações com multiplicação, como no exemplo ul>li*5>a{Item $}
, que resulta em:
1 2 3 4 5 6 7 |
<ul> <li><a href="">Item 1</a></li> <li><a href="">Item 2</a></li> <li><a href="">Item 3</a></li> <li><a href="">Item 4</a></li> <li><a href="">Item 5</a></li> </ul> |
Que também pode ser usado fora da parte de conteúdo, como em ul>li.item$*5
, que expande para:
1 2 3 4 5 6 7 |
<ul> <li class="item1"></li> <li class="item2"></li> <li class="item3"></li> <li class="item4"></li> <li class="item5"></li> </ul> |
Gerador de Lorem Ipsum
E para quem gosta de um bom placeholder textual na interface, acabou-se a necessidade de ter que visitar sites geraores de lorem ipsum ou instalar plugins em seu editor ou IDE: Emmet tem um gerador nativo de lorem ipsum.
Digitando somente lorem, obtém-se 30 palavras de “lorem ipsum” na expansão:
1 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eligendi non quis exercitationem culpa nesciunt nihil aut nostrum explicabo reprehenderit optio amet ab temporibus asperiores quasi cupiditate. Voluptatum ducimus voluptates voluptas? |
E estamos falando de um gerador, propriamente dito, então, sempre vão aparecer palavras diferentes em cada geração.
Também é possível especificar precisamente quantas palavras se quer, usando um contador como no exemplo lorem10
, que gera 10 palavras loremipsunianas na expansão.
Claro, é possível combinar o gerador de lorem ipsum nas abreviações para conseguir resultados bem legais, como ul.c-list>lorem10.c-list__item*4
, que gera:
1 2 3 4 5 6 |
<ul class="c-list"> <li class="c-list__item">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Rerum, mollitia.</li> <li class="c-list__item">Placeat debitis ut, assumenda facere nostrum dolore quae hic harum!</li> <li class="c-list__item">Optio itaque, iure vel quasi fuga quibusdam culpa facilis inventore?</li> <li class="c-list__item">Magni quas voluptates minima magnam, ea eveniet dolor dolores possimus!</li> </ul> |
Conclusão
Uma das características citadas do Emmet é sua capacidade de ser customizado/expandido facilmente através de simples arquivos JSON.
Geralmente, na documentação de seu editor/IDE constará como é feita essa customização e com quais arquivos e parâmetros você deve ser preocupar.
Por exemplo, se for usar Emmet no VS Code, existe uma página na documentação que mostrando todas as possibilidades.
Existem muito mais features e possibilidades oferecidas pelo Emmet. Consulte a documentação oficial para conhecê-las e realmente saber porque ele é um queridinho da comunidade front-end.
Mas só por essa palhinha do que é possível já foi comprovado: com Emmet, realmente é possível escrever HTML 10x mais rápido. Ou mais. :)