Emmet - это утилита для текстовых редакторов, которая упрощает и повышают скорость написания кода. Первоначально слово "Emmet" означало муравей - маленькое насекомое, которое может нести в 50 раз больше своего веса. Чтобы использовать Emmet, нужно скачать и установить плагин для используемого текстового редактора. Список всех плагинов доступен на официальном сайте. Если вы используете Visual Studio Code, то устанавливать плагин не нужно, он уже встроен.
Для создания HTML-тегов вы можете использовать имена тегов, такие как div или p. У Emmet нет предопределенного набора имен тегов, вы можете написать любое слово и преобразовать его в тег: div → <div></div>, foo → <foo></foo> и так далее. Преобразование происходит по нажатию клавиши. Обычно это клавиша Tab. В VSCode, чтобы выполнять преобразование по нажатию клавиши Tab, добавьте следующую настройку:
{
"emmet.triggerExpansionOnTab": true
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body></body>
</html>
div>ul>li→
<div>
<ul>
<li></li>
</ul>
</div>
div+p+bq→
<div></div>
<p></p>
<blockquote></blockquote>
ul>li*3→
<ul>
<li></li>
<li></li>
<li></li>
</ul>
div>(header>ul>li*2>a)+footer>p→
<div>
<header>
<ul>
<li><a href=""></a></li>
<li><a href=""></a></li>
</ul>
</header>
<footer>
<p></p>
</footer>
</div>
Вы можете вкладывать группы друг в друга и повторять их с помощью оператора умножения:
(div>dl>(dt+dd)*3)+footer>p→
<div>
<dl>
<dt></dt>
<dd></dd>
<dt></dt>
<dd></dd>
<dt></dt>
<dd></dd>
</dl>
</div>
<footer>
<p></p>
</footer>
div#header+div.page+div#footer.class1.class2.class3→
<div id="header"></div>
<div class="page"></div>
<div id="footer" class="class1 class2 class3"></div>
td[title="Hello world!" colspan=3][URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<td title="Hello world!" colspan="3"></td>
Произвольные атрибуты имеют следующие особенности:
[LIST=1]
[*]Для разделения атрибутов используется пробел.
[*]Если не указано значение атрибута, то его значением станет пустая строка с меткой для табуляции (если ваш редактор поддерживает метки табуляции).
[*]Можно использовать одинарные и двойные кавычки для указания значений атрибутов.
[*]Если значение атрибута не содержит пробелов, то его не обязательно заключать в кавычки.
[/LIST]
[HEADING=2]Нумерация[/HEADING]
Оператор $ позволяет создавать нумерацию. Для этого поместите данный оператор после имени элемента, имени атрибута или значения атрибута:
ul>li.item$*3[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<ul>
<li class="item1"></li>
<li class="item2"></li>
<li class="item3"></li>
</ul>
Оператор $ можно поместить в любом месте имени:
ul>li.ite$m*2[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<ul>
<li class="ite1m"></li>
<li class="ite2m"></li>
</ul>
Вы можете использовать несколько операторов $ подряд, чтобы дополнить номер нулями:
ul>li.item$$$*3[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<ul>
<li class="item001"></li>
<li class="item002"></li>
<li class="item003"></li>
</ul>
[HEADING=3]Начальное значение и направление нумерации[/HEADING]
Модификатор @ позволяет изменить начальное значение и направление нумерации (по возрастанию или убыванию). Чтобы изменить направление нумерации, добавьте модификатор @- после оператора $:
ul>li.item$@-*3[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<ul>
<li class="item3"></li>
<li class="item2"></li>
<li class="item1"></li>
</ul>
Чтобы изменить начальное значение счетчика, добавьте модификатор @N к оператору $:
ul>li.item$@3*5[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<ul>
<li class="item3"></li>
<li class="item4"></li>
<li class="item5"></li>
<li class="item6"></li>
<li class="item7"></li>
</ul>
Вы можете изменить начальное значение счетчика и направление нумерации одновременно:
ul>li.item$@-3*5[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<ul>
<li class="item7"></li>
<li class="item6"></li>
<li class="item5"></li>
<li class="item4"></li>
<li class="item3"></li>
</ul>
[HEADING=2]Добавление текста[/HEADING]
Фигурные скобки позволяют добавить текст в элемент:
a{Перейти}[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<a href="">Перейти</a>
[HEADING=1]Неявные имена тегов[/HEADING]
Во многих случаях можно не писать имя тега. Например, вместо div.content вы можете написать .content, что преобразуется в <div class="content"></div>. Emmet смотрит на родительский тег каждый раз, когда вы расширяете аббревиатуру без имени тега. Если родительcкий элемент является [URL='https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements']блочным[/URL], то будет выбрать тег div, в противном случае — span. При этом есть несколько исключений:
[LIST=1]
[*]li для ul и ol.
[*]tr для table, tbody, thead и tfoot.
[*]td для tr.
[*]option для select и optgroup.
[/LIST]
[HEADING=1]Генератор "Lorem Ipsum"[/HEADING]
Аббревиатуры "lorem" и "lipsum" генерируют случайный текст. Каждый раз, когда вы выполняете преобразование данных аббревиатур, генерируется текст из 30 слов, разбитый на несколько предложений.
lorem[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
Lorem ipsum dolor sit amet consectetur adipisicing elit. Et hic incidunt repellat, quos veritatis a tenetur deserunt accusantium ab ad adipisci ex rerum distinctio corrupti omnis asperiores, numquam exercitationem sapiente.
Вы можете указать количество генерируемых слов. Например, lorem10 сгенерирует текст из 10 слов. Также, вы можете использовать оператор повторения *, чтобы создать несколько элементов со случайным текстом:
ul>li*3>lorem10[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<ul>
<li>Lorem ipsum dolor sit amet consectetur adipisicing elit. Ad, temporibus.</li>
<li>Earum totam eius repudiandae sit optio, consectetur ipsum officiis enim?</li>
<li>Ex, molestias. Minima ducimus quaerat et earum commodi natus autem?</li>
</ul>
[HEADING=1]Добавление аббревиатур и фрагментов[/HEADING]
Некоторые аббревиатуры преобразуются в элементы с предустановленными атрибутами. Список таких аббревиатур для различных языков вы можете посмотреть в официальном репозитории в каталоге [URL='https://github.com/emmetio/emmet/tree/master/snippets']snippets[/URL]. Например, аббревиатуры для html находятся в файле [URL='https://github.com/emmetio/emmet/blob/master/snippets/html.json']html.json[/URL].
Способ добавления аббревиатур вы можете узнать в документации плагина, который используете в текстовом редакторе. Если используется Visual Studio Code, то вам нужно создать файл snippets.json. Таких файлов может быть несколько, например, один с глобальными настройками, а другой с локальными на уровне проекта. Затем, в файле настроек VSCode, добавьте параметр emmet.extensionsPath, содержащий массив путей к папкам, содержащим файл snippets.json. Рассмотрим на примере: создайте каталог .vscode в текущем проекте. В каталоге .vscode создайте файлы settings.json и snippets.json. Вот как это сделать через терминал:
[LIST=1]
[*]mkdir .vscode && cd .vscode
[*]touch settings.json && touch snippets.json
[/LIST]
В файл settings.json добавьте следующую настройку:
{
"emmet.extensionsPath": ["./.vscode"]
}
В файле snippets.json для каждого языка записываются его псевдонимы и фрагменты. На данный момент в VSCode используется Emmet 2.0. В данной версии аббревиатуры и фрагменты задаются через один параметр snippets. Создадим несколько аббревиатур для html и css:
{
"html": {
"snippets": {
"abbr1": "ul>li*3",
"abbr2": "ol>li*3"
}
},
"css": {
"snippets": {
"clw": "color: white",
"clb": "color: black"
}
}
}
Подробности создания аббревиатур и фрагментов в VSCode можно найти в официальной документации.
Аббревиатуры
Аббревиатуры - это специальные выражения, которые преобразуются в структурированный блок кода. Во многих редакторах также создаются метки табуляции, по которым вы можете быстро перемещаться между важными местами сгенерированного кода с помощью клавиши Tab.Для создания HTML-тегов вы можете использовать имена тегов, такие как div или p. У Emmet нет предопределенного набора имен тегов, вы можете написать любое слово и преобразовать его в тег: div → <div></div>, foo → <foo></foo> и так далее. Преобразование происходит по нажатию клавиши. Обычно это клавиша Tab. В VSCode, чтобы выполнять преобразование по нажатию клавиши Tab, добавьте следующую настройку:
{
"emmet.triggerExpansionOnTab": true
}
Создание базовой структуры html
Для создания базовой структуры html напишите символ ! и нажмите клавишу Tab. В результате файл заполнится следующим содержимым:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body></body>
</html>
Операторы вложенности
Операторы вложенности используются для позиционирования элементов внутри сгенерированного дерева.Дочерний элемент
Оператор > позволяет вкладывать один элемент в другой:div>ul>li→
<div>
<ul>
<li></li>
</ul>
</div>
Соседний элемент
Оператор + позволяет разместить элементы рядом друг с другом на одном уровне:div+p+bq→
<div></div>
<p></p>
<blockquote></blockquote>
Повторение
Оператор * позволяет определить, сколько раз должен выводиться элемент:ul>li*3→
<ul>
<li></li>
<li></li>
<li></li>
</ul>
Группировка
Круглые скобки позволяют выделить в аббревиатуре отдельные поддеревья:div>(header>ul>li*2>a)+footer>p→
<div>
<header>
<ul>
<li><a href=""></a></li>
<li><a href=""></a></li>
</ul>
</header>
<footer>
<p></p>
</footer>
</div>
Вы можете вкладывать группы друг в друга и повторять их с помощью оператора умножения:
(div>dl>(dt+dd)*3)+footer>p→
<div>
<dl>
<dt></dt>
<dd></dd>
<dt></dt>
<dd></dd>
<dt></dt>
<dd></dd>
</dl>
</div>
<footer>
<p></p>
</footer>
Атрибуты операторов
Вы можете указать атрибуты для выводимых элементов.Указание класса и id
Оператор . позволяет указать класс. Оператор # предназначен для указания id:div#header+div.page+div#footer.class1.class2.class3→
<div id="header"></div>
<div class="page"></div>
<div id="footer" class="class1 class2 class3"></div>
Произвольные атрибуты
Квадратные скобки позволяют задавать элементу произвольные атрибуты:td[title="Hello world!" colspan=3][URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<td title="Hello world!" colspan="3"></td>
Произвольные атрибуты имеют следующие особенности:
[LIST=1]
[*]Для разделения атрибутов используется пробел.
[*]Если не указано значение атрибута, то его значением станет пустая строка с меткой для табуляции (если ваш редактор поддерживает метки табуляции).
[*]Можно использовать одинарные и двойные кавычки для указания значений атрибутов.
[*]Если значение атрибута не содержит пробелов, то его не обязательно заключать в кавычки.
[/LIST]
[HEADING=2]Нумерация[/HEADING]
Оператор $ позволяет создавать нумерацию. Для этого поместите данный оператор после имени элемента, имени атрибута или значения атрибута:
ul>li.item$*3[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<ul>
<li class="item1"></li>
<li class="item2"></li>
<li class="item3"></li>
</ul>
Оператор $ можно поместить в любом месте имени:
ul>li.ite$m*2[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<ul>
<li class="ite1m"></li>
<li class="ite2m"></li>
</ul>
Вы можете использовать несколько операторов $ подряд, чтобы дополнить номер нулями:
ul>li.item$$$*3[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<ul>
<li class="item001"></li>
<li class="item002"></li>
<li class="item003"></li>
</ul>
[HEADING=3]Начальное значение и направление нумерации[/HEADING]
Модификатор @ позволяет изменить начальное значение и направление нумерации (по возрастанию или убыванию). Чтобы изменить направление нумерации, добавьте модификатор @- после оператора $:
ul>li.item$@-*3[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<ul>
<li class="item3"></li>
<li class="item2"></li>
<li class="item1"></li>
</ul>
Чтобы изменить начальное значение счетчика, добавьте модификатор @N к оператору $:
ul>li.item$@3*5[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<ul>
<li class="item3"></li>
<li class="item4"></li>
<li class="item5"></li>
<li class="item6"></li>
<li class="item7"></li>
</ul>
Вы можете изменить начальное значение счетчика и направление нумерации одновременно:
ul>li.item$@-3*5[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<ul>
<li class="item7"></li>
<li class="item6"></li>
<li class="item5"></li>
<li class="item4"></li>
<li class="item3"></li>
</ul>
[HEADING=2]Добавление текста[/HEADING]
Фигурные скобки позволяют добавить текст в элемент:
a{Перейти}[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<a href="">Перейти</a>
[HEADING=1]Неявные имена тегов[/HEADING]
Во многих случаях можно не писать имя тега. Например, вместо div.content вы можете написать .content, что преобразуется в <div class="content"></div>. Emmet смотрит на родительский тег каждый раз, когда вы расширяете аббревиатуру без имени тега. Если родительcкий элемент является [URL='https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements']блочным[/URL], то будет выбрать тег div, в противном случае — span. При этом есть несколько исключений:
[LIST=1]
[*]li для ul и ol.
[*]tr для table, tbody, thead и tfoot.
[*]td для tr.
[*]option для select и optgroup.
[/LIST]
[HEADING=1]Генератор "Lorem Ipsum"[/HEADING]
Аббревиатуры "lorem" и "lipsum" генерируют случайный текст. Каждый раз, когда вы выполняете преобразование данных аббревиатур, генерируется текст из 30 слов, разбитый на несколько предложений.
lorem[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
Lorem ipsum dolor sit amet consectetur adipisicing elit. Et hic incidunt repellat, quos veritatis a tenetur deserunt accusantium ab ad adipisci ex rerum distinctio corrupti omnis asperiores, numquam exercitationem sapiente.
Вы можете указать количество генерируемых слов. Например, lorem10 сгенерирует текст из 10 слов. Также, вы можете использовать оператор повторения *, чтобы создать несколько элементов со случайным текстом:
ul>li*3>lorem10[URL='https://www.toptal.com/designers/htmlarrows/arrows/right-arrow/'][B]→[/B][/URL]
<ul>
<li>Lorem ipsum dolor sit amet consectetur adipisicing elit. Ad, temporibus.</li>
<li>Earum totam eius repudiandae sit optio, consectetur ipsum officiis enim?</li>
<li>Ex, molestias. Minima ducimus quaerat et earum commodi natus autem?</li>
</ul>
[HEADING=1]Добавление аббревиатур и фрагментов[/HEADING]
Некоторые аббревиатуры преобразуются в элементы с предустановленными атрибутами. Список таких аббревиатур для различных языков вы можете посмотреть в официальном репозитории в каталоге [URL='https://github.com/emmetio/emmet/tree/master/snippets']snippets[/URL]. Например, аббревиатуры для html находятся в файле [URL='https://github.com/emmetio/emmet/blob/master/snippets/html.json']html.json[/URL].
Способ добавления аббревиатур вы можете узнать в документации плагина, который используете в текстовом редакторе. Если используется Visual Studio Code, то вам нужно создать файл snippets.json. Таких файлов может быть несколько, например, один с глобальными настройками, а другой с локальными на уровне проекта. Затем, в файле настроек VSCode, добавьте параметр emmet.extensionsPath, содержащий массив путей к папкам, содержащим файл snippets.json. Рассмотрим на примере: создайте каталог .vscode в текущем проекте. В каталоге .vscode создайте файлы settings.json и snippets.json. Вот как это сделать через терминал:
[LIST=1]
[*]mkdir .vscode && cd .vscode
[*]touch settings.json && touch snippets.json
[/LIST]
В файл settings.json добавьте следующую настройку:
{
"emmet.extensionsPath": ["./.vscode"]
}
В файле snippets.json для каждого языка записываются его псевдонимы и фрагменты. На данный момент в VSCode используется Emmet 2.0. В данной версии аббревиатуры и фрагменты задаются через один параметр snippets. Создадим несколько аббревиатур для html и css:
{
"html": {
"snippets": {
"abbr1": "ul>li*3",
"abbr2": "ol>li*3"
}
},
"css": {
"snippets": {
"clw": "color: white",
"clb": "color: black"
}
}
}
Подробности создания аббревиатур и фрагментов в VSCode можно найти в официальной документации.
Повышение скорости написания кода: Emmet и его использование в VSCode
Emmet - это утилита для текстовых редакторов, которая упрощает и повышают скорость написания кода. Первоначально слово "Emmet" означало муравей - маленькое насекомое, которое может нести в 50 раз...
habr.com