翻蚳è
ããïŒä»åŸæ°å¹Žéã§ãã¬ã³ãã«ãªãå¯èœæ§ã®ãããGoogle ã®Webã³ã³ããŒãã³ãã®ææãªæšæºã®ç¿»èš³ã玹ä»ããŸãã çŸæç¹ã§ã¯ããã®èŠæ Œã®ç¥èã¯å®çšçãªãã®ã§ã¯ãªããããæ°ãããŠé¢çœããã®ãã¹ãŠã®ãã¡ã³ã§ã¯ãªãå Žåããã®ç¿»èš³ãèªãã®ã«é£œããŠããŸããããããŸããã翻蚳ã¯githubã«æçš¿ãããã®ã§ã翻蚳ãæäŒã£ããããšã©ãŒãä¿®æ£ãããããå Žåã¯ããã«ãªã¯ãšã¹ããè¡ãããåäººã§æžã蟌ã¿ãŸããã¹ããŒã¿ã¹ïŒ
èè
ïŒ
ã¯ããã«
WebïŒãŸãã¯Webã³ã³ããŒãã³ãïŒã®ã³ã³ããŒãã³ãã¢ãã«ã¯4ã€ã®ã¢ãžã¥ãŒã«ã§æ§æãããŸããããããäžç·ã«äœ¿çšãããšãWebã¢ããªã±ãŒã·ã§ã³éçºè
ã¯è±å¯ãªèŠèŠæ©èœãåãããŠã£ãžã§ãããäœæã§ããéçºãšåå©çšã容æã«ãªããŸããããã¯çŸåšCSSã®ã¿ã§ã¯äžå¯èœã§ãããã³JSã©ã€ãã©ãªã
ã¢ãžã¥ãŒã«ïŒ
- ãã³ãã¬ãŒããå°æ¥äœ¿çšã§ããéã¢ã¯ãã£ããªããŒã¯ã¢ããã®éšåãæ±ºå®ããŸãã
- ãã³ã¬ãŒã¿ã䜿çšãããšãCSSã䜿çšããŠãã³ãã¬ãŒãã®èŠèŠçããã³åäœã®å€æŽã管çã§ããŸãã
- ã«ã¹ã¿ã èŠçŽ ã䜿çšãããšãäœæè
ã¯ã¡ã€ã³HTMLããã¥ã¡ã³ãã§äœ¿çšã§ããç¬èªã®èŠçŽ ïŒãããã®èŠçŽ ã®ãã¬ãŒã³ããŒã·ã§ã³ãšAPIãå«ãïŒãå®çŸ©ã§ããŸãã
- é ãDOMïŒ ã·ã£ããŒDOM ïŒã¯ãDOMããªãŒã§ãã³ã¬ãŒã¿ãŒãšãŠãŒã¶ãŒèŠçŽ ã®è¡šç€ºãšåäœãäºãã«çµã¿åãããæ¹æ³ãå®çŸ©ããŸãã
ãã³ã¬ãŒã¿ãš
ã«ã¹ã¿ã èŠçŽ ãåãããŠ
ã³ã³ããŒãã³ããšåŒã³
ãŸãããã¿ãŒã³
<template>
èŠçŽ ã«ã¯ãåŸã§ã¹ã¯ãªãããŸãã¯ãã³ãã¬ãŒãã䜿çšã§ããä»ã®ã¢ãžã¥ãŒã«ã§äœ¿çšããããã®ããŒã¯ã¢ãããå«ãŸããŸãïŒããšãã°ã以äžã§èª¬æãã
<decorator>
ããã³
<element>
ïŒã
<template>
èŠçŽ ã®ã³ã³ãã³ãã¯è§£æãããŸãããéã¢ã¯ãã£ãã§ããã¹ã¯ãªããã¯å®è¡ããããç»åã¯èªã¿èŸŒãŸããŸããã
<template>
èŠçŽ ã¯è¡šç€ºãããŸããã
ã¹ã¯ãªããã§ã¯ããã®ãããªèŠçŽ ã«ã¯ãã³ãã¬ãŒãã§å®çŸ©ãããéçDOMæ§é ãå«ãç¹å¥ãª
ã³ã³ãã³ãããããã£ããããŸãã
ããšãã°ãéçºè
ã¯ãããã¥ã¡ã³ãå
ã§è€æ°åäœæãããDOMæ§é ãå®çŸ©ããå¿
èŠã«å¿ããŠãã®ã€ã³ã¹ã¿ã³ã¹ãäœæããå¿
èŠãããå ŽåããããŸãã
<template id="commentTemplate"> <div> <img src=""> <div class="comment"></div> ⊠</div> </template> var t = document.querySelector("#commentTemplate"); // img[src] . // ⊠someElement.appendChild(t.content.cloneNode());
éçDOMããŒããããã¥ã¡ã³ãã«è¿œå ãããšããã®DOMããŒãã
innerHTMLããããã£ãä»ããŠåä¿¡ããããã®ããã«ãããã¥ã¡ã³ãããã©ã€ããã«ãªããŸãã
ãã³ã¬ãŒã¿
ãã³ã¬ãŒã¿ã¯ãæ¢åã®èŠçŽ ã®è¡šç€ºã匷åãŸãã¯åå®çŸ©ãããã®ã§ãã 衚çŸã®ãã¹ãŠã®åŽé¢ãšåæ§ã«ããã³ã¬ãŒã¿ãŒã®åäœã¯CSSã䜿çšããŠå¶åŸ¡ãããŸãã ãã ããããŒã¯ã¢ããã䜿çšããŠãã¬ãŒã³ããŒã·ã§ã³ã®è¿œå ã®åŽé¢ãå®çŸ©ããæ©èœã¯ããã³ã¬ãŒã¿ã®ãŠããŒã¯ãªæ©èœã§ãã
<decorator>
èŠçŽ ã«ã¯ããã³ã¬ãŒã¿ã®ã¬ã³ããªã³ã°ã«äœ¿çšãããããŒã¯ã¢ãããå®çŸ©ãã
<template>
èŠçŽ ãå«ãŸããŸãã
<decorator id="fade-to-white"> <template> <div style="position: relative;"> <style scoped> #fog { position: absolute; left: 0; bottom: 0; right: 0; height: 5em; background: linear-gradient( bottom, white 0, rgba(255, 255, 255, 0) 100); } </style> <content></content> <div id="fog"></div> </div> </template> </decorator>
<content>
èŠçŽ ã¯ããã³ã¬ãŒã¿ïŒããæ£ç¢ºã«ã¯ãã®ã³ã³ãã³ãïŒãæ¿å
¥ããå Žæã瀺ããŸãã
ãã³ã¬ãŒã¿ã¯ãCSS
ãã³ã¬ãŒã¿ããããã£ã䜿çšããŠé©çšãããŸãã
.poem { decorator: url(#fade-to-white); font-variant: small-caps; }
äžèšã®ãã³ã¬ãŒã¿ãšCSSã¯ããã®ããŒã¯ã¢ããã匷å¶ããŸãã
<div class="poem"> Two roads diverged in a yellow wood,<br> ⊠</div>
+ãã ãããã®ã¬ã³ããªã³ã°ã¯æ¬¡ã®ããŒã¯ã¢ããã®ããã«ãªããŸãïŒç°¡æœã«ããããããŠãŒã¶ãŒãšãŒãžã§ã³ãã¹ã¿ã€ã«ã¯çç¥ãããŠããŸãïŒã
<div class="poem" style="font-variant: small-caps;"> <div style="position: relative;"> Two roads diverged in a yellow wood,<br> ⊠<div style="position: absolute; left: 0; âŠ"></div> </div> </div>
ãã³ã¬ãŒã¿ãŒã宣èšãããCSSã»ã¬ã¯ã¿ãŒãç¡å¹ã«ãªãããã«ããã¥ã¡ã³ãã倿Žãããå Žå-éåžžã
decoratorããããã£ãæã€ã»ã¬ã¯ã¿ãŒãèŠçŽ ã«é©çšãããªããªã£ãå ŽåããŸãã¯ãã³ã¬ãŒã¿ãŒãæã€ã«ãŒã«ã
style屿§ã§å€æŽãããå Žåããã³ã¬ãŒã¿ãŒã¯é©çšããããã¬ã³ããªã³ã°ããèŠçŽ ãè¿ããŸãåæç¶æ
..
CSS
ãã³ã¬ãŒã¿ããããã£ã¯ãããã¯ãŒã¯äžã®ä»»æã®ãªãœãŒã¹ãæãããšãã§ããŸããããã³ã¬ãŒã¿ã¯å®çŸ©ãçŸåšã®ããã¥ã¡ã³ãã«èªã¿èŸŒãŸããŠããéã¯é©çšãããŸããã
ãã¥ãŒã«ãã£ãŠçæãããããŒã¯ã¢ããã¯ãçŽç²ã«ãã¬ãŒã³ããŒã·ã§ã³ã®äœ¿çšã«å¶éãããŠããŸããã¹ã¯ãªããïŒçµã¿èŸŒã¿ã®ã€ãã³ããã³ãã©ãŒãå«ãïŒãå®è¡ããããšã¯ã§ãããç·šéããããšã¯ã§ããŸããã
ãã³ã¬ãŒã¿ã€ãã³ã
ãã³ã¬ãŒã¿ã¯ãã€ãã³ããã³ãã©ãã¢ã¿ããããŠãã€ã³ã¿ã©ã¯ãã£ãæ©èœãå®è£
ããããšãã§ããŸãã ãã³ã¬ãŒã¿ã¯
äžæçãªãã®ã§ããããããã³ãã¬ãŒãå
ã®ããŒãã¯ãã³ã¬ãŒã¿ãèŠçŽ ã«é©çšãŸãã¯åé€ããããã³ã«
åæ§ç¯ãããããããã³ãã¬ãŒãå
ã®ããŒãã«ã€ãã³ããã³ãã©ããã³ã°ããããããã³ãã¬ãŒãã®ç¶æ
ã«äŸåããããšã¯å¹ççã§ã¯ãããŸããã
代ããã«ããã³ã¬ãŒã¿ã¯ã€ãã³ããã³ãã©ãã€ãã³ãã³ã³ãããŒã©ã«ç»é²ããŸãã ã€ãã³ããã³ãã©ãç»é²ããããã«ããã³ãã¬ãŒãã«ã¯
<script>
èŠçŽ ãå«ãŸããŠããŸãã ã¹ã¯ãªããã¯ããã³ã¬ãŒã¿ãè§£æããããããã¥ã¡ã³ãã«æ¿å
¥ãããããå€éšããã¥ã¡ã³ãã®äžéšãšããŠããŒãããããšãã«1åå®è¡ãããŸãã
å³ ã€ãã³ããã³ãã©ãŒãç»é²ãã

ã€ãã³ãã³ã³ãããŒã©ãŒã¯ã
thisã®å€ãšããŠã¹ã¯ãªããã«æž¡ãããŸãã
<decorator id="decorator-event-demo"> <script> function h(event) { alert(event.target); } this.listen({selector: "#b", type: "click", handler: h}); </script> <template> <content></content> <button id="b">Bar</button> </template> </decorator>
lisnen颿°ãåŒã³åºããšããã¿ã³ãæŒããããšã€ãã³ããã³ãã©ãŒãèµ·åããŸãã
ã€ãã³ãã³ã³ãããŒã©ãŒã¯ããã³ã¬ãŒã¿ãŒãã€ãã³ããã³ãã©ãŒã«é©çšãããããŒãã§çºçããã€ãã³ãããªãã€ã¬ã¯ãããŸãã
å³ ã€ãã³ãåŠçãšåãããã³ã°

ã€ãã³ããªã¹ããŒãåŒã³åºããããšãã€ãã³ãã®
ã¿ãŒã²ããå€ã¯ããã³ã¬ãŒã¿ãŒãé©çšãããããŒãã§ããããã³ãã¬ãŒãã®ã³ã³ãã³ãã§ã¯ãããŸããã ããšãã°ãäžèšã§æå®ãããã³ã¬ãŒã¿ã«æ¬¡ã®ã³ã³ãã³ããããå ŽåïŒ
<span style="decorator: url(#decorator-event-demo);">Foo</span>
ã¬ã³ããªã³ã°ïŒ
ããŒ[ããŒ]
ãã¿ã³ãã¯ãªãã¯ãããšã
[object HTMLSpanElement]
ã¡ãã»ãŒãžã衚瀺ãããŸãã
ãã³ã¬ãŒã¿ã¯ãããã³ã°ãå®çŸ©ããããã
ã¿ãŒã²ããããããã£ããªãŒããŒã©ã€ãããå¿
èŠããããŸãã ããã¥ã¡ã³ãã®æ§é ã«ã¯åœ±é¿ããŸããã ãã³ã¬ãŒã¿ãé©çšãããŠããéã
ã¿ãŒã²ããããããã£ã¯é©çš
å
ã®ããŒãã§åå®çŸ©ãããŸãã
ãŸããã¹ã¯ãªããããã³ãã¬ãŒãã®ã³ã³ãã³ãã倿Žããå Žåã
<script>
èŠçŽ ã®
textContentãèšå®ããŠãã¹ã¯ãªããã®åå®è¡ãå¿
èŠãªãããã«ã倿Žã¯ç¡èŠãããŸãã
ãã³ã¬ãŒã¿ã¯ãã³ãã¬ãŒãã倿Žããããšã¯ã§ããããšã¬ã¡ã³ãäžã§ã®èªåã®è¡šç€ºã«åœ±é¿ãäžããããšã¯ã§ããŸãã;ãã³ã¬ãŒã¿ãå¥ã®ãã®ã«åå®çŸ©ããããšããã§ããŸããã
ãã³ã¬ãŒã¿ã®äŸ
ãã³ã¬ãŒã¿ã䜿çšããŠ
詳现èŠçŽ ã®åçŽãªããŒãžã§ã³ãäœæããæ¹æ³ã®äŸïŒ
details { decorator: url(#details-closed); } details[open] { decorator: url(#details-open); }
<decorator id="details-closed"> <script> this.listen({ selector: "#summary", type: "click", handler: function (event) { event.currentTarget.open = true; } }); </script> <template> <a id="summary"> > <content select="summary:first-of-type"></content> </a> </template> </decorator> <decorator id="details-open"> <script> this.listen({ selector: "#summary", type: "click", handler: function (event) { event.currentTarget.open = false; } }); </script> <template> <a id="summary"> V <content select="summary:first-of-type"></content> </a> <content></content> </template> </decorator>
ãã®ããã«ã2ã€ã®ãã³ã¬ãŒã¿ãå¿
èŠã§ããã 1ã€ã¯éãã圢åŒã§
詳现èŠçŽ ã衚ãããã1ã€ã¯éãã圢åŒã§è¡šããŸãã åãã³ã¬ãŒã¿ã¯ãããŠã¹ã¯ãªãã¯ã€ãã³ããã³ãã©ã䜿çšããŠãç¶æ
ã®å€æŽãééããŸãã
<element>
ã®
select屿§ã«ã€ããŠã¯ã以äžã§è©³ãã説æããŸãã
ã«ã¹ã¿ã ã¢ã€ãã
ã«ã¹ã¿ã èŠçŽ ã¯ãäœæè
ãå®çŸ©ã§ããæ°ããã¿ã€ãã®DOMèŠçŽ ã§ãã
ã«ã¹ã¿ã èŠçŽ ã¯ããã³ã¬ãŒã¿ãéããŠè¡šç€ºã®ã¿ã€ããæ±ºå®ã§ããŸãã ç®çã®èŠçŽ ã«é©çšãŸãã¯åé€ã§ãããã³ã¬ãŒã¿ãšã¯ç°ãªãããŠãŒã¶ãŒèŠçŽ ã®ã¿ã€ãã¯åºå®ãããŠããŸãã ãã ããã«ã¹ã¿ã èŠçŽ ã¯ããã³ã¬ãŒã¿ã®åºæ¬çãªæ§è³ªã«ããããã³ã¬ãŒã¿ã§ã¯å®çŸ©ã§ããªããŸã£ããæ°ãã衚瀺ãšåäœãå®çŸ©ã§ããŸãã
<element>
ã¯ãã«ã¹ã¿ã èŠçŽ ãå®çŸ©ããŸãã
<element extends="button" name="x-fancybutton"> ⊠</element>
extends屿§ã¯ãæ©èœãæ¡åŒµããèŠçŽ ã«ãã£ãŠå®çŸ©ãããŸãã ãŠãŒã¶ãŒèŠçŽ ã®åã€ã³ã¹ã¿ã³ã¹ã«ã¯ã
extends屿§ã§å®çŸ©ããã
tagName ããããŸãã
name屿§ã¯ããã®ããŒã¯ã¢ããã«é¢é£ä»ãããããŠãŒã¶ãŒèŠçŽ ãèå¥ããŸãã
name屿§ã®åå空éã¯ãæšæºèŠçŽ ã®ã¿ã°åã®åå空éãšåãã§ãããããã£ãŠãè¡çªããªããããã«ãx-ãã¬ãã£ãã¯ã¹ã䜿çšãããŸãã
ãã©ãŠã¶ã«ãã£ãŠHTMLèŠçŽ ã®å®çŸ©ãç°ãªããŸããããã®è§£éã¯ãã¹ãŠHTMLã®ã»ãã³ãã£ã¯ã¹ã«ãã£ãŠå°ãããŸãã
ãã¹ãŠã®ãã©ãŠã¶ããŠãŒã¶ãŒå®çŸ©èŠçŽ ããµããŒãããŠããããã§ã¯ãªããããäœæè
ã¯æ°ãããŠãŒã¶ãŒå®çŸ©èŠçŽ ã«æãè¿ãå€ãæã€HTMLèŠçŽ ãæ¡åŒµããå¿
èŠããããŸãã ããšãã°ãã€ã³ã¿ã©ã¯ãã£ãã§ãããã€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ããããšã§ã¯ãªãã¯ã«å¿çãããŠãŒã¶ãŒèŠçŽ ãå®çŸ©ããå Žåããã¿ã³ïŒ
<button>
ïŒãå±éããå¿
èŠããã
<button>
ã
å¿
èŠãªãã®ã«æå³çã«è¿ãHTMLèŠçŽ ããªãå Žåãäœæè
ã¯
<span>
ãªã©ã®ãã¥ãŒãã©ã«èŠçŽ ãå±éããå¿
èŠããã
<span>
ã
æåº
ã«ã¹ã¿ã èŠçŽ ã«ã¯ãã³ãã¬ãŒããå«ããããšãã§ããŸãïŒ
<element extends="button" name="x-fancybutton"> <template> <style scoped> ::bound-element { display: transparent; } div.fancy { ⊠} </style> <div class="fancy"> <content></content> <div id="t"></div> <div id="l"></div> <div id="b"></div> <div id="r"></div> </div> </template> </element>
ãŠãŒã¶ãŒèŠçŽ ã«ãã³ãã¬ãŒããå«ãŸããŠããå ŽåããŠãŒã¶ãŒèŠçŽ ãã¶ã€ããŒã«ãã£ãŠãã®ãã³ãã¬ãŒãã®ã³ããŒãèŠçŽ ã®ã·ã£ããŠDOMã«æ¿å
¥ãããŸãã
ã·ã£ããŠDOMã«ã€ããŠã¯åŸè¿°ããŸãã
ããŒã¯ã¢ããã§ã«ã¹ã¿ã èŠçŽ ã䜿çšãã
ãªããªã ãŠãŒã¶ãŒèŠçŽ ã¯æ¢åã®HTMLã¿ã°ïŒdivããã¿ã³ããªãã·ã§ã³ãªã©ïŒã䜿çšããããããŠãŒã¶ãŒèŠçŽ ããã€äœ¿çšããããæ±ºå®ãã屿§ãå¿
èŠã§ãã ãã®å±æ§ã¯ã§
ãã ããã®å€ã¯ãŠãŒã¶ãŒèŠçŽ ã®ååã§ãã äŸïŒ
<element extends="button" name="x-fancybutton"> ⊠</element> <button is="x-fancybutton" onclick="showTimeClicked(event);"> Show time </button>
ã¹ã¯ãªããã§ã«ã¹ã¿ã èŠçŽ ã䜿çšãã
æšæºã®
document.createElementã¡ãœããã䜿çšããŠãã¹ã¯ãªããããã«ã¹ã¿ã èŠçŽ ãäœæã§ããŸãã
var b = document.createElement("x-fancybutton"); alert(b.outerHTML);
ãŸãã
<element>
ã®
constructor屿§ãèšå®ããŠã
ãŠã£ã³ããŠãªããžã§ã¯ãã«ãšã¯ã¹ããŒãããèŠçŽ ã³ã³ã¹ãã©ã¯ã¿ãŒã®ååãæç€ºçã«æå®ã§ããŸãã ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããŠãã«ã¹ã¿ã èŠçŽ ãäœæã§ããŸãã
<element extends="button" name="x-fancybutton" constructor="FancyButton"> ⊠</element>
...
var b = new FancyButton(); document.body.appendChild(b); </code></pre>
ãŠãŒã¶ãŒèŠçŽ ã¯ã
<element>
å
ã®
<script>
èŠçŽ ã§
ãããã¿ã€ãã«è¿œå ããããšã«ãããAPIã¡ãœããã宣èšã§ããŸãã
<element extends="button" name="x-fancybutton" constructor="FancyButton"> ⊠<script> FancyButton.prototype.razzle = function () { ⊠}; FancyButton.prototype.dazzle = function () { ⊠}; </script> </element> ⊠<script> var b = new FancyButton(); b.textContent = "Show time"; document.body.appendChild(b); b.addEventListener("click", function (event) { event.target.dazzle(); }); b.razzle(); </script>
åçŽãªå£åãæäŸããããã«ã
<script>
èŠçŽ å
ã®
ããã¯ã
HTMLElementElementåã®èŠªèŠçŽ ãæã
ãŸã ïŒ
<element extends="table" name="x-chart" constructor="Chart"> <script> if (this === window) </script> </element>
æè¡çã«ã¯ã
<script>
èŠçŽ å
ã®
<script>
ã
<element>
ãŸãã¯
<decorator>
ã«ãã¹ããããŠããå Žåããã®åŒã³åºããšåãããã«å®è¡ãããŸãã
(function() {
ãŠã£ã³ããŠãªããžã§ã¯ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã®ååãäžæãªç¶æ³ã§ã¯ãã«ã¹ã¿ã ã³ã³ããŒãã³ãã®
äœæè
ã¯
HTMLElementElementã® generatedConstructorããããã£ã䜿çšã§ã
ãŸã ã
<element extends="table" name="x-chart"> <script> </script> </element>
æ¢åã®DOMèŠçŽ ã«
is屿§ãæå®ããŠã«ã¹ã¿ã èŠçŽ ãäœæããããšã¯ã§ããŸããã æ¬¡ã®ã³ãŒããå®è¡ããŠãäœãèµ·ãããŸããã
var div = document.createElement("div"); div.setAttribute("is", "foo"); alert(div.is);
ã¢ã€ãã ã®æŽæ°
ã«ã¹ã¿ã é
ç®å®£èšãããŒãããããšãis屿§ãã«ã¹ã¿ã é
ç®ã®ååã«èšå®ãããåé
ç®ãã«ã¹ã¿ã é
ç®ã«æŽæ°ãããŸãã æŽæ°ã¯ãã¢ã€ãã ãåé€ããŠã«ã¹ã¿ã ã¢ã€ãã ã«çœ®ãæããã®ãšåãã§ããå¿
èŠããããŸãã
åèŠçŽ ã眮ãæãããããšãåé€ãããèŠçŽ ã§ããããªã³ã°ããã£ã³ã»ã«ãã§ããªãã€ãã³ããçºçããŸãã ãŠãŒã¶ãŒèŠçŽ ãããŒãããããŸã§ããã¥ã¡ã³ãã®æ®ãã®éšåãšã®å¯Ÿè©±ãé
ããããã¹ã¯ãªããã¯ãç¹å¥ãªã€ãã³ãããµãã¹ã¯ã©ã€ãã§ããŸãïŒ
function showTimeClicked(event) {
å®ååãããŠããªãã³ã³ãã³ãã®è¡šç€ºãé¿ãããäœæè
ã¯ãCSSã䜿çšããŠãã«ã¹ã¿ã ã¢ã€ãã ãèªã¿èŸŒãŸãããŸã§ã眮æãããŠããªãéåžžã®ã¢ã€ãã ã®è¡šç€ºã倿Žã§ããŸãã
ã©ã€ããµã€ã¯ã«æ¹æ³
ãŠãŒã¶ãŒèŠçŽ ã¯ã4ã€ã®ã©ã€ããµã€ã¯ã«ã¡ãœããã«ãµãã¹ã¯ã©ã€ãã§ããŸãã
- created-ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãã
<template>
èŠçŽ ããShadowRootã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã <template>
ããªãå Žåã ShadowRoot㯠nullã«èšå®ãããŸã ã - attributeChanged-èŠçŽ ã®å±æ§ã倿Žããããã³ã«åŒã³åºãããŸãã åŒæ°ïŒååãå€ãå€ãæ°ããå€ã
- æ¿å
¥-ãŠãŒã¶ãŒã³ã³ããŒãã³ããDOMããªãŒã«æ¿å
¥ãããåŸã«åŒã³åºãããŸãã ãã®ãã³ãã©ãŒã§ã¯ããŠãŒã¶ãŒã³ã³ããŒãã³ãã®ãªãœãŒã¹ãèªã¿èŸŒãããã¿ã€ããŒãéå§ã§ããŸãã
- removed-ãŠãŒã¶ãŒèŠçŽ ãDOMããªãŒããåé€ãããåŸã«åŒã³åºãããŸãã ããã§ã¯ããŠãŒã¶ãŒèŠçŽ ãDOMããªãŒã«ãªããšãã«äžèŠãªã¿ã€ããŒã忢ã§ããŸãã
ãã³ãã©ãŒã¯ã
ãããèŠçŽ ãæããŠããç¶æ
ã§åŒã³åºãããŸãã
æ¿å
¥ããã³åé€ããããã³ãã©ãŒã¯ããŠãŒã¶ãŒå®çŸ©ã®èŠçŽ ãæ¿å
¥ããã³åé€ããããã³ã«æ°ååŒã³åºãããšãã§ããŸãã
HTMLElementElement.lifecycleã¡ãœãããåŒã³åºãããšã«ããããããã®ãã³ãã©ãŒããµãã¹ã¯ã©ã€ãã§ã
ãŸã ã
<element extends="time" name="x-clock"> <script> </script> </element>
ã«ã¹ã¿ã ã¢ã€ãã æ¡åŒµ
HTMLèŠçŽ ã«å ããŠã
<element>
extends屿§ã§ãŠãŒã¶ãŒèŠçŽ ã®ååãæå®ããããšã«ããããŠãŒã¶ãŒèŠçŽ ã
æ¡åŒµã§ããŸãã
<element extends="x-clock" name="x-grandfatherclock"> ⊠</element>
ãšã©ãŒåŠç
ã«ã¹ã¿ã èŠçŽ ãã¬ã³ããªã³ã°ãããšãã«ãšã©ãŒãåŠçããããã®ãªãã·ã§ã³ãããã€ããããŸãã
- èŠçŽ ã®tagNameã¯ããŠãŒã¶ãŒèŠçŽ ã®extends屿§ã®å€ãšäžèŽããŸãããããšãã°ã
<div is="x-fancybutton">
ã§ããã <element name="x-fancybutton" extends="button">
ã§ãã ãã®å Žåã is屿§ã¯è§£æäžã«ç Žæ£ãããŸãã - is屿§ã®å€ã¯æ¢åã®ã¢ã€ãã ãšäžèŽããŸããã ãã®ç¶æ³ã¯ããŠãŒã¶ãŒå®çŸ©èŠçŽ ã®å®çŸ©ããŸã ããŒããããŠããªãå ŽåãšèŠãªãããå®çŸ©ãããŒãããããšããã«èŠçŽ ãæŽæ°ãããŸãã
- extends屿§å€ãæ¢åã®èŠçŽ ãšäžèŽããŸããã ãã®å Žåãã«ã¹ã¿ã 屿§ã®å®çŸ©ã®åŠçã¯ã extends屿§ã§æå®ãããèŠçŽ ãããŒãããããŸã§ä¿æãããŸãã
- is屿§ã®å€ã¯x-ã§å§ãŸã£ãŠããŸããã ãã®å Žåã is屿§ã¯ç¡èŠãããŸãã
- name屿§ã®å€ã¯x-ã§å§ãŸã£ãŠããŸããã ãã®å ŽåããŠãŒã¶ãŒèŠçŽ ã®å®çŸ©ã¯ç¡å¹ãšèŠãªãããç¡èŠãããŸãã
ãã©ã³ã¹ã¬ãŒã¿ãŒããïŒæ¬¡ã®éšåã§ã¯ãWebã³ã³ããŒãã³ãã§ã®ã·ã£ããŠDOMã®äœ¿çšãå€éšãŠãŒã¶ãŒèŠçŽ ãšãã³ã¬ãŒã¿ãŒãããã³Webã³ã³ããŒãã³ãã®åé¢ãå¶éãã«ãã»ã«åã«ã€ããŠèŠãŠãããŸãã