Как создать пользовательские теги для HTML

#html #tags

#HTML #Теги

Вопрос:

Как я могу создать пользовательские мета-теги для HTML со специальными атрибутами и поведением?

Комментарии:

1. Не знаю, можете ли вы сделать это в чистом HTML, но, возможно, вы можете использовать XHTML, в части XML есть пользовательские теги, созданные вами

Ответ №1:

В зависимости от того, что вы подразумеваете под «особыми атрибутами и поведением», вы можете «создавать» пользовательские HTML-теги прямо сейчас. Следующее отображается во всех браузерах и даже работает с различными методами JavaScript:

 <my-book data-pages="400" data-author="Nietzsche">The Wanderer and His Shadow</my-book>
  

Есть всего пара вещей, которые вы должны иметь в виду:

  1. Перенос! Пользовательские элементы должны состоять хотя бы из одного - like my-book или app-menu или header-title и т.д. Просто не используйте, data-* поскольку он зарезервирован для атрибутов данных.

  2. По умолчанию все пользовательские элементы отображаются как inline . Однако вы можете изменить это с помощью CSS или JavaScript.

  3. Internet Explorer не распознает ни один из этих элементов, если вы сначала не «создадите» их с помощью JavaScript:

      document.createElement('my-book');
      

Итак, вам нужно сделать это, прежде чем вы сможете использовать их в вашем CSS, HTML или JavaScript.

Комментарии:

1. Я собирался создать тег <hasjs>, который был скрыт для пользователей с отключенным js, но теперь я должен сначала зарегистрировать его с помощью JavaScript. Думаю, мне придется придерживаться <div class=»hasjs»>.

2. @apokaliptis проблема с отключением js возможно, вы можете использовать <noscript> свой обычный html для браузеров без поддержки js</noscript>

3. Было бы неплохо включить некоторые ссылки для этого ответа.

Ответ №2:

Есть интересная и подробная статья от HTML5Rocks.com о том, как работать с пользовательскими элементами: Пользовательские элементы: определение новых элементов в HTML

Вот выдержка из статьи о том, как это сделать.

Создание экземпляров элементов

Общие методы создания элементов по-прежнему применимы к пользовательским элементам. Как и в случае с любым стандартным элементом, они могут быть объявлены в HTML или созданы в DOM с использованием JavaScript. Создание пользовательских тегов

Объявите их:

 <x-foo></x-foo>
  

Создайте DOM в JS:

 var xFoo = document.createElement('x-foo');
xFoo.addEventListener('click', function(e) {
    alert('Thanks!');
});
  

Используйте оператор new:

 var xFoo = new XFoo();
document.body.appendChild(xFoo);
  

Комментарии:

1. Стоит отметить, что это правильный способ сделать это с точки зрения стандартов и поддержки браузера. foo-bar всегда следует использовать для имен пользовательских тегов (требуется дефис, x- это распространенное явление) и data-foo всегда следует использовать для пользовательских атрибутов ( data- обязательно). Браузеры могут хорошо обрабатывать произвольные теги, подобные foo , а могут и нет. Обычно они не вызывают ошибок, но это совершенно нестандартно и может вызвать проблемы в некоторых ситуациях. Также обратите внимание, что контент, отличный от HTML5, должен использовать нестрогий doctype при выполнении этого. JS можно использовать для обхода ограничения атрибута «data-«, но это неуклюже.

2. Обновленная спецификация для пользовательских элементов версии v1: Повторно используемые веб-компоненты developers.google.com/web/fundamentals/getting-started/primers /…

Ответ №3:

Все, что вам действительно нужно сделать, это определить содержимое CSS для этого тега.

Пример:

 mytag {
    font-weight: bold;
}
  

И теперь mytag выделен вашим собственным жирным шрифтом:

 <mytag>This text is in bold</mytag>
  

Комментарии:

1. Я знаю, что это, по крайней мере, работает для Google Chrome 47

2. Уверен, что это работает в chrome 47, но это не рекомендуется, поскольку это просто недопустимый HTML. Chrome может обрабатывать широкий спектр недопустимого кода, и хотя он работает , вам действительно не следует слишком полагаться на это, поскольку его поведение в других браузерах может быть совершенно произвольным.

3. @vrugtehagel Это звучит ужасно похоже на IE 90-х и 2000-х годов. Отклоняясь от стандартов и заставляя людей полагаться на причуды. «Вы должны использовать IE» => «Вы должны использовать Chrome». Не очень хорошая вещь.

Ответ №4:

В настоящее время появляется стандартная спецификация W3C, называемая Пользовательские элементы веб-компонента, которая позволяет разработчикам создавать свои собственные пользовательские HTML-элементы и регистрировать их в анализаторе браузера.

Mozilla разработала библиотеку под названием X-Tag, которая упрощает процесс создания пользовательских элементов и работы с ними, ознакомьтесь с ней:X-Tags.org

Ответ №5:

Существует также версия, которая поддерживается только в Chrome 54 и Opera.

Пример:

 class BasicElement extends HTMLElement {
    connectedCallback() {
        this.textContent = 'Just a basic custom element.';
    }
}
customElements.define('basic-element', BasicElement);
  

Вы можете узнать больше об этом здесь.

Комментарии:

1. Теперь это работает и в Safari: caniuse.com/#search=custom elements v1

2. Приятно знать, приятель, спасибо.

3. И в Firefox тоже

Ответ №6:

Вы можете создать пользовательские HTML-теги, выполнив следующие действия:

Шаг 1 — Зарегистрируйте новый элемент. Пользовательские элементы создаются с помощью document.registerElement():

 var XFoo = document.registerElement('x-foo', {
    prototype: Object.create(HTMLElement.prototype)
});
  

Второй аргумент в registerElement является необязательным объектом, который описывает прототип элемента.

Шаг 2 — Создание пользовательских тегов

Для этого есть несколько способов:

Объявите их:

 <x-foo></x-foo>
  

Создать DOM в JavaScript:

 var xFoo = document.createElement('x-foo');
xFoo.addEventListener('click', function(e) {
    alert('Thanks!');
});
  

Используйте оператор new:

 var xFoo = new XFoo();
  

Шаг 3 — Прикрепите вновь созданный элемент к документу

 document.body.appendChild(new XFoo());
  

Полный пример:

 var XFooProto = Object.create(HTMLElement.prototype);

// 1. Give x-foo a foo() method.
XFooProto.foo = function() {
  alert('foo() called');
};

// 2. Define a property read-only "bar".
Object.defineProperty(XFooProto, "bar", {value: 5});

// 3. Register x-foo's definition.
var XFoo = document.registerElement('x-foo', {prototype: XFooProto});

// 4. Instantiate an x-foo.
var xfoo = document.createElement('x-foo');

// 5. Add it to the page.
document.body.appendChild(xfoo);
  

Комментарии:

1. У меня это не работает.

2. Ошибка типа: document.registerElement не является функцией. (В ‘document.registerElement()’ параметр ‘document.registerElement’ не определен)

3. Предупреждение: document.registerElement() устарел в пользу customElements.define(). Источник MDN