HTML5

タグ(要素)

自律カスタム要素

  編集:2022.06.30 by T.A.

mdn

カスタム要素。

この要素を使用できる文脈

フレージング内容が期待される場所。

内容モデル

透過的

内容属性

※ is属性を除く。

名前空間を持たないその他の属性(文参照)。

解説

自律カスタム要素は特別な意味を持たない: その要素の子を表す。カスタマイズされた組み込み要素は、それが拡張した要素のセマンティクスを継承する。

要素の著者によって決定された、要素の機能に関連する名前空間なしの属性は、属性名が XML 互換、かつ ASCII 大文字を含まない限り、自律カスタム要素上で指定してもよい。例外は is 属性であり、これは自律カスタム要素に指定してはならない(かつ指定しても何の効果もない)。

カスタマイズされた組み込み要素は、それらが拡張する要素に基づいて、属性に関する通常の要件に従う。カスタム属性ベースの動作を追加するには、data-* 属性を使用する。

フォーム関連フィールドが true に設定されているカスタム要素定義に要素が関連付けられている場合、自律カスタム要素はフォームに関連付けられたカスタム要素と呼ばれる。

フォームに関連付けられたカスタム要素のリセット アルゴリズムは、要素、コールバック名 "formResetCallback"、および空の引数リストをもつカスタム要素のコールバック反応をキューに加えることである。

妥当なカスタム要素名は、次のすべての要件を満たす一連の文字名である:

注釈: これらの要件により、妥当なカスタム要素名の多数の目標が保証される。

これらの制限とは別に、〈math-α〉や〈emotion-〉などのユースケースに最大源の柔軟性を与えるために、さまざまな名前が許可されている。

最初に汎用的な HTMLElement クラスを継承して PopUpInfo というクラスを定義する JavaScript ファイルです。

class PopUpInfo extends HTMLElement {
  constructor() {
    // コンストラクターでは常に super を最初に呼び出してください
    super();

    // ここに要素の機能を記述します

    ...
  }
}

中身の構築はshadow domをつけるのが一般的な手法です。

// 基礎の組み込みhtml要素からではなく、大本となるHTMLElementから継承する
class PopUpInfo extends HTMLElement {
  constructor() {
    // Always call super first in constructor
    super();

    // 自律カスタム要素にshadow domをつけるのが一般的な手法
    const shadow = this.attachShadow({ mode: 'open' });

    const info = document.createElement('span');
    info.setAttribute('class', 'info');

    // 自身に渡してきた属性をアクセスすることが可能
    const text = this.getAttribute('data-text');
    info.textContent = text;

    // Create some CSS to apply to the shadow dom
    const style = document.createElement('style');

    style.textContent = `
      .info {
        font-size: 0.8rem;
      }
    `;

    // Attach the created elements to the shadow dom
    shadow.appendChild(style);
    shadow.appendChild(info);
  }
}

// カスタム要素を登録する
customElements.define('pop-up-info', PopUpInfo);

ページでの使い方は以下のようです。

<pop-up-info data-text="Your card"></pop-up-info>

使用した感じ:

<!DOCTYPE HTML>
<HTML>
<HEAD>
<META http-equiv="content-language" content="en">
<META http-equiv="content-type" content="text/html; charset=SHIFT_JIS">
<META http-equiv="Content-Style-Type" content="text/css">
<META http-equiv="Content-Script-Type" content="text/javascript">
<TITLE>Test</TITLE>
</HEAD>
<BODY>
pen
<flag-icon>pen あいうえお</flag-icon>
<SCRIPT>
const flagIcon=document.createElement("flag-icon");
flagIcon.country="jp";
flagIcon.innerText="テキストです";
document.body.appendChild(flagIcon);
</SCRIPT>
</BODY>
</HTML>
<test-tag>てすとです</test-tag>
<SCRIPT>
const testtag=document.createElement("test-tag");
testtag.country="jp";
testtag.innerText="テキストです";
document.body.appendChild(testtag);
</SCRIPT>


form属性

フォームに関連付けられたカスタム要素の場合 ─ 要素を FORM 要素に関連付ける。

form 属性は、フォームに関連付けられたカスタム要素をそのフォーム所有者に明示的に関連付けるために使用される。

disabled属性

フォームに関連付けられたカスタム要素の場合 ─ フォームコントロールが無効かどうか。

disabled 属性は、フォームに関連付けられたカスタム要素を非対話的にし、その送信値が送信されないようにするために使用される。

readonly属性

フォームに関連付けられたカスタム要素の場合 ─ willValidate に影響し、カスタム要素の著者によって追加されたすべての動作。

フォームに関連付けられたカスタム要素の readonly 属性は、要素が制約検証から除外されることを指定する。

制約検証。フォームに関連付けられたカスタム要素に readonly 属性が指定されている場合、その要素は制約検証から除外される。

name属性

フォームに関連付けられたカスタム要素の場合 ─ フォームの送信および form.elements に使用する要素の名前。

name 属性は、フォームに関連付けられたカスタム要素の名前を表す。


テスト
HTML:

ここに表示
HTML:

ここに表示
スクリプト組み込み:



スクリプト:


スクリプト:



表示内容:
表示内容: