Emmetで複数のタグを一括展開して、コーディングスピードをさらに上げる方法

効率的にHTMLを入力するために、Emmetは欠かせない機能です。
意外と知られていませんが、Emmetでは複数タグを一括展開できます。
たとえば下記の1行をざっと書いてtabでEmmet展開をすると…
header.header>.header_wrap>.header_left>h1>img^^.header_right>nav>ul.header_nav>li*3>a下記のHTMLが一気にできあがります。
<header class="header">
<div class="header_wrap">
<div class="header_left">
<h1><img src="" alt=""></h1>
</div>
<div class="header_right">
<nav>
<ul class="header_nav">
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
</ul>
</nav>
</div>
</div>
</header>Emmetというと、あくまで1つのHTMLタグをすばやく展開するためにしか使われていなかったりします。
しかし、Pugを使っている人であればきっとこの入力はすぐマスターできますし、ある程度の骨組みは1つ1つ入力するよりも一気に入力できた方が効率的です。
以前もEmmetの記事で紹介でしたことがありますが、改めてEmmetで「複数タグを一括展開する」ことにフォーカスを当ててまとめてみます。
そもそもの基本的な部分から知りたい方は、過去記事と合わせてご覧ください。
前提の考え方
Emmetで大量のタグを一括展開できたときはものすごい爽快感なのですが、記述が間違っていてうまく展開されないと、かなりストレスになります。
また、長い記述をすればするほど間違いを探すときに面倒になりますし、そうなってくるとなんのためにEmmetを使っているのか分からなくなります。
最初から最後まで自分の思うタグ全てを間違いなく一括展開できるのであれば問題ありませんが、そうでない方は下記の考え方を意識しておくと、うまくEmmetを利用してラクできると思います。
- 骨組みは一括展開するようにして、細かい部分は1タグずつ展開して作っていく
- コーディングがややこしくなりそうな部分は一括展開の対象からスキップする
- 必ず一括展開をしなければならないわけではないので、あくまで自分のコーディングスキルの1つとして利用する
階層の移動
Emmetで複数展開をするためには、いまの階層を意識しておくことが重要です。
下記の3つの記号をタグの間に入力することで、タグの階層を下がったり上がったりしていきます。
| 記号 | 内容 | 記述例 |
|---|---|---|
| > | 要素を入れ子にする | ul>li |
| + | 要素を同階層に展開 | header+main |
| ^ | 1つ上の階層に展開 | .left>img^.right |
また、上の階層に上がる^は複数入力することが可能で、^^とすることで2階層上へ上がれます。
これらの記号を組み合わせながら、いまのどのような構造でタグを組んでいっているのか頭の中で想像しながら、入れ子にするのか、同階層に追加するのか、上の階層に追加するのか選択して入力します。
複雑に見えるかもしれませんが、Emmetはこの3パターンと後述する繰り返し作成しかありません。
繰り返しは階層構造に影響は与えないので、この3パターンの意識が頭の中でできるようになれば自由にHTMLが組めるようになります。
同じ要素の繰り返し作成
liタグなどは単体ではなく、複数使うことがほとんどです。
そんなときにli+li+li+li+liなどと記述するのは面倒です。
しかも、liタグの中にaタグを入れたい場合はもっと面倒になります。
li>a^li>a^li>a^li>a^li>a^いま何個入力したのかわけが分からなくなりますし、すごく見にくいです。
同じ要素を複数作成するときは下記の記号を使いましょう。
| 記号 | 内容 | 記述例 |
|---|---|---|
| * | 要素名の後ろに記述し、その後に展開したい数を入力する | li*3 |
| $ | class名に使うと連番として展開される(*と併用する) | .item-$*3 |
li*3と入力することでliが3つ生成されることが分かりやすいですし入力もラクです。
各liの中にaタグを入れたい場合は下記のように記述します。
li*3>aこのように、*を使った下の階層は、生成されるすべてのタグに影響がある点だけ注意が必要です。
たとえば、1つ1つのliタグの中身が全然違うような場合は*の使用をオススメできません。
その場合はEmmetでliのところまで作っておいて、その中は別途入力した方がラクですしミスも少なくなります。
連番の使用
*で複数生成したあとは$を使って連番の使用が可能です。
ul>li.item.item-$*3上記のEmmetを展開すると下記のようになります。
<ul>
<li class="item item-1"></li>
<li class="item item-2"></li>
<li class="item item-3"></li>
</ul>連番を割り振ったclass名を使いたいときに便利なので、これも覚えておきましょう。
Wrap with Abbreviation
先にテキストを貼り付けておいて、それをEmmetを使ってHTMLで囲む「Wrap with Abbreviation」という方法もあります。
これを使うと、原稿がきちんと用意されている場合のマークアップがかなりラクになります。
過去に記事にしているので、ぜひこちらもご覧ください。



Visual Studio CodeでToDoコメントを一覧で表示する拡張機能「Todo Tree」
SourceTreeでマージ時に「fatal: You have not concluded your merge (MERGE_HEAD exists).」と表示される場合の対処法
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Vue.jsで値段を表示するときに3桁ごとにカンマを入れる方法
WordPressの常時SSL化で、下層ページのhttpからhttpsへのリダイレクトがうまくいかない場合に確認すること
JavaScriptで日付をコピーして計算すると、コピー元の日付も変わってしまう場合の対処法
Visual Studio CodeをMarkdownエディターとして使用する
Font Awesome 5の基本的な使い方と、Font Awesome 4との違い
「epel-release」インストール後にyum installで「Cannot retrieve metalink for repository」と表示される場合の対処法
gulpのwatch機能を使って、監視ファイルに変更があった時にタスクを実行する
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
AirPodsで片耳を外しても再生が止まらないようにする方法
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
1つのノートアプリにすべて集約するのをやめた理由|2025年時点のノートアプリの使い分け
Notionログイン時の「マジックリンク」「ログインコード」をやめて普通のパスワードを使う
AlfredでNotion内の検索ができるようになるワークフロー「Notion Search」
Gitで1行しか変更していないはずのに全行変更した判定になってしまう
Macでアプリごとに音量を調節できるアプリ「Background Music」
Macのターミナルでパスワード付きのZIPファイルを作成する方法
MacBook Proでディスプレイのサイズ調整をして作業スペースを広げる
SteerMouseの「自動移動」機能で保存ダイアログが表示されたら自動でデフォルトボタンへカーソルを移動させる
iPhoneでタッチが一切効かなくなった場合に強制再起動する方法