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」という方法もあります。
これを使うと、原稿がきちんと用意されている場合のマークアップがかなりラクになります。
過去に記事にしているので、ぜひこちらもご覧ください。



WordPressで既に公開済みの記事の更新を、指定した日付に反映する方法「PublishPress Revisions」
Visual Studio Codeで対応する括弧に色を付けて見やすくする環境設定
SVGを操作するためのCSSプロパティまとめ
Mac向けのミニマルでお洒落なデザインのGitクライアント「Gitfox」
Font Awesome 5の基本的な使い方と、Font Awesome 4との違い
手軽にコーディングの勉強ができるCodePenをもっと便利に使うための設定
効率的にHTMLを生成できるPugの特徴や記述方法
Safari 12.1から外観モード(ライト/ダーク)の判定をCSSで行えるように!
WordPressで作成した記事をSlackでシェアしたときに、抜粋文が長く表示される場合の対処法
JavaScriptのテンプレートリテラル内で条件分岐を行う方法
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Figma × Keyboard Maestroでどこまで効率化できる?
マウス操作の完成度が高いウインドウリサイズアプリ「Magnet」
Macで複数ディスプレイを使っている場合に便利な設定集
AppCleanerでMacアプリを関連ファイルごと完全に削除する
操作に没頭できる!Firefox版 Arcのようなブラウザ「Zen Browser」
chezmoi(シェモア)で始めるdotfiles管理
GitHubの通知を見逃さない!通知に特化したアプリ「Gitify」
Keyboard Maestroの変数基礎
Neovimを使い始める最初の一歩として便利な「LazyVim」
ウェブサイトをmacOSアプリとしてラッピングする「Unite Pro」