рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХрд╛ рдЕрднрд┐рд╡рд╛рджрдиред рдпрд╣ рд▓реЗрдЦ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рддреАрд╕рд░рд╛ рдФрд░ рдЕрдВрддрд┐рдо рд▓реЗрдЦ рд╣реИред рдкрд╣рд▓реЗ рджреЛ рд▓реЗрдЦ рдЗрд╕ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
рд╡реЗрдм рдШрдЯрдХред рднрд╛рдЧ 1: рдХрд╕реНрдЯрдо рддрддреНрд╡рд╡реЗрдм рдШрдЯрдХ рднрд╛рдЧ 2: рдЫрд╛рдпрд╛ рдбреЛрдордпрд╣ рдЖрд▓реЗрдЦ <рдЯреЗрдореНрдкрд▓реЗрдЯ> рддрддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ HTML рдЖрдпрд╛рддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдд рдХрд░реЗрдЧрд╛ред
HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рддрддреНрд╡
<рдЯреЗрдореНрдкрд▓реЗрдЯ> рддрддреНрд╡ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкреГрд╖реНрда рдкрд░ рд░реЗрдВрдбрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рдеред
рдХрд┐рд╕реА рдкреГрд╖реНрда рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╕рдордп, рдХрд┐рд╕реА рддрддреНрд╡ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреЗрд╡рд▓ рд╕рд╛рдордЧреНрд░реА рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдмрд┐рдирд╛ (рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рддрддреНрд╡ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рддрддреНрд╡ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд▓рд┐рдкрд┐рдпреЛрдВ рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЪрд┐рдкрдХрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдорд╛рдирдХреАрдХрд░рдг рдФрд░ рд╡реЗрдм рдШрдЯрдХ рдмрдирд╛рддреЗ рд╕рдордп рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рд╛рдордЧреНрд░реА <рдЯреЗрдореНрдкрд▓реЗрдЯ>
<рдЯреЗрдореНрдкрд▓реЗрдЯ> рдХреА рд╕рд╛рдордЧреНрд░реА, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрд┐рд╕реА рднреА рдиреЛрдб рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ, HTML рдФрд░ XML рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдХрд┐рд╕реА рднреА рдЕрдиреБрдкрд╛рд▓рди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк src рдФрд░ alt рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдорд╛рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ img рддрддреНрд╡ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░:
<template> <div> <img src="{{src}}" alt="{{alt}}"> </div> </template>
рд╣рд╛рд▓рд╛рдБрдХрд┐, <рдЯреЗрдореНрдкрд▓реЗрдЯ> рддрддреНрд╡ рдХреЗ рдмрд╛рд╣рд░, рдРрд╕рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рдорд╛рдкрди рдЯреИрдЧ </ div> рдХреЛ рдЫреЛрдбрд╝рдирд╛ HTML рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрдЧрд╛ рдФрд░ <рдЯреЗрдореНрдкрд▓реЗрдЯ> рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред
Html рдХреЛрдб рдореЗрдВ <рдЯреЗрдореНрдкрд▓реЗрдЯ> рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рднреА рддрддреНрд╡ рдЗрд╕рдХреЗ рдмрдЪреНрдЪреЗ рдирд╣реАрдВ рд╣реИрдВред
<рдЯреЗрдореНрдкрд▓реЗрдЯ> рддрддреНрд╡ рдмрдирд╛рддреЗ рд╕рдордп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ рдбреЙрдХреНрдпреВрдореЗрдВрдЯрдлреНрд░реЗрдЧрдореЗрдВрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рддрдерд╛рдХрдерд┐рдд рд╣реИ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рд╛рдордЧреНрд░реА рд╕реНрд╡рд╛рдореА рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬрд┐рд╕рдореЗрдВ <рдЯреЗрдореНрдкрд▓реЗрдЯ> рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдбреЙрдХреНрдпреВрдореЗрдВрдЯрдлреНрд░реЗрдЧрдореЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ .content рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣реА рд╣реИ, рдЯреЗрдореНрдкрд▓реЗрдЯ рддрддреНрд╡ рдХреА .content рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдПрдХ DocumentFragment рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЬреЛ рддрддреНрд╡ <рдЯреЗрдореНрдкрд▓реЗрдЯ> рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ HTML рдХреЛрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЧрдП рдереЗ рд╡реЗ рдЗрд╕ DocumentFragment рдХреЗ рдмрдЪреНрдЪреЗ рд╣реИрдВред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХреА рддрд░рд╣ <рдЯреЗрдореНрдкрд▓реЗрдЯ> рддрддреНрд╡, рдмрд╛рд▓ рддрддреНрд╡реЛрдВ ( appendChild () ) рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рд╛рдордЧреНрд░реА рдореЙрдбрд▓ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред
рдХреНрд▓реЛрдирд┐рдВрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рддрд░реНрдХ .cloneNode ([рдЧрд╣рд░рд╛])
рдпрд╛ .importNode (externalNode, deep) рдореЗрдВ рджреВрд╕рд░реЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрджрд┐ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рддреЛ рдЖрдЧреЗ рдирд┐рд╖реНрдкрд╛рджрди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред
рд╡реИрд╕реЗ, рд╣рд╛рдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдЙрджрд╛рд╣рд░рдг .cloneNode (), .importNode () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИред рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (for .cloneNode () - appendChild () рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж; forimportNode () - рдХреНрд▓реЛрдирд┐рдВрдЧ рдХреЗ рдмрд╛рджред
рдореБрдЭреЗ рдХреЛрдб рджрд┐рдЦрд╛рдПрдВ ┬й
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдореИрдВ рдЯреИрдм рдХреЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛ред
рдореИрдВ html рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рджреЛ <рдЯреЗрдореНрдкрд▓реЗрдЯ> рддрддреНрд╡ рдмрдирд╛рдХрд░ рдФрд░ рдЙрдирдореЗрдВ рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдХрд┐ TabNavigationItem рдФрд░ TabContentItem рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдЗрдирд░реЗрдВрдбрд░ () рд╡рд┐рдзрд┐ рдореЗрдВ рдерд╛ (рдореИрдВрдиреЗ рдХреБрдЫ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рднреА рдмрджрд▓ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ):
<template id="tab-nav"> <style> :host{ padding: 10px; background-color: rgb(81,180,186); transition: background-color 1s; text-align: center; } :host-context(.active) { background-color: rgb(93, 209, 216); } a{ text-decoration: none; color: rgb(3,32,40); } </style> <a href="#${this._target}"><slot></slot></a> </template>
рдФрд░:
<template id="tab-content"> <style> :host { display: none; padding: 20px; width: 100%; background-color: rgb(255,212,201); } :host-context(.active){ display: block; } </style> <div><slot></slot></div> </template>
рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ, рдореИрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрдЪрд╛рдКрдВрдЧрд╛ред TabNavigationItem рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣реЛрдЧрд╛:
this.template = document.getElementById('tab-nav');
TabContentItem рдХреЗ рд▓рд┐рдП:
this.template = document.getElementById('tab-content');
рдЗрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд░реЗрдВрдбрд░ () рд╡рд┐рдзрд┐ рдореЗрдВ, .innerHTML рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛:
const content = this.template.content.cloneNode(true); this.shadowRoot.appendChild(content);
рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рджреЛрдиреЛрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ HTML рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬреЛ рдмреЛрдЭрд┐рд▓ рд▓рдЧрддреЗ рд╣реИрдВ рдФрд░ рдЧреВрдВрдЬрддреЗ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рдореЗрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ:
HTML рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ
рдЖрдпрд╛рдд HTML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп HTML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреНрд╡рд╛рд░рд╛ рдмрд╛рд╣рд░реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХреА рдкреНрд░рдгрд╛рд▓реА рдорд╕реМрджрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдЫрд╡рд┐ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ:

ред
рдЖрдпрд╛рддреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, HTML рд▓рд┐рдВрдХ рдкреНрд░рдХрд╛рд░реЛрдВ (рд░рд┐рд▓реЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рди) рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред
<Link> рддрддреНрд╡ рдХреА rel рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдпрд╛рдд рд╢рдмреНрдж рд╕реНрд╡рдпрдВ рдЖрдпрд╛рддрд┐рдд рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рддрд╛ рд╣реИ (рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рдХрд╛рд░ рдкрд╛рда / html рд╣реИ)ред
<рд▓рд┐рдВрдХ> рддрддреНрд╡ рдореЗрдВ рдПрдХ рдПрд╕рд┐рдВрдХреНрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдбреНрд░рд╛рдлреНрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди HTMLLinkElement API рдореЗрдВ рдкреЗрд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ: рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдд рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдпрд╛рддрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реЛрддрд╛ рд╣реИред
рдПрдХ рд╕рдВрдкрддреНрддрд┐ рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддреА рд╣реИ: рдЬрдм <рд▓рд┐рдВрдХ> рдЖрдпрд╛рдд рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдпрд╛ <рд▓рд┐рдВрдХ> рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдирд╣реАрдВ рд╣реИред
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЕрд▓рдЧ рд╕реЗ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рд╡рд╕реНрддреБ рдХреЛ рд╣рдореЗрд╢рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдпрд╛рддреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдПрдХ рддрдерд╛рдХрдерд┐рдд рдорд╛рд╕реНрдЯрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИ, рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдЖрдпрд╛рддрд┐рдд рд╕рдВрд╕рд╛рдзрди рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА ContentSecurityPolicy рдХреЛ рд╕рднреА рдЖрдпрд╛рддреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╕рд╛рдордЧреНрд░реА рд╕реБрд░рдХреНрд╖рд╛ рд╣реЗрдбрд░ рдлрд╝реАрд▓реНрдб рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рд╣реИ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЖрдпрд╛рддрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдорд╛рд╕реНрдЯрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рдиреАрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ
рдЯреИрдм рдШрдЯрдХ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддрд╛ рд╣реВрдВред рдЗрд╕рдореЗрдВ, рдореИрдВ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдКрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдШрдЯрдХ рдорд╛рд░реНрдХрдЕрдк рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред
<template id="tab-content"> <style> :host { display: none; padding: 20px; width: 100%; background-color: rgb(255,212,201); } :host-context(.active){ display: block; } </style> <div><slot></slot></div> </template> <template id="tab-nav"> <style> :host{ padding: 10px; background-color: rgb(81,180,186); transition: background-color 1s; text-align: center; } :host-context(.active) { background-color: rgb(93, 209, 216); } a{ text-decoration: none; color: rgb(3,32,40); } </style> <a href="#${this._target}"><slot></slot></a> </template>
Index.html рдлрд╝рд╛рдЗрд▓ рдХреЗ <head> рдореЗрдВ, рдореИрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ:
<link rel="import" href="templates/tab-nav.html" id="tab-nav"> <link rel="import" href="templates/tab-content.html" id="tab-content">
рдореИрдВ <рд▓рд┐рдВрдХ> рддрддреНрд╡реЛрдВ рдореЗрдВ рдЖрдИрдбреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЙрдиреНрд╣реЗрдВ js рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЕрдм, рдЯреЗрдореНрдкрд▓реЗрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, TabNavigationItem рдФрд░ TabContentItem рд╡рд░реНрдЧреЛрдВ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдореЗрдВ, рдореБрдЭреЗ рдмрд╕ рдЗрд╕реА <рд▓рд┐рдВрдХ> рддрддреНрд╡ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдЗрд╕рдХреА рдЖрдпрд╛рдд рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдпрд╛рддрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░реВрдВрдЧрд╛:
class TabNavigationItem extends HTMLElement { constructor() { super(); this._target = null; this.attachShadow({mode: 'open'}); const templateImport = document.getElementById('tab-nav').import; this.template = templateImport.getElementById('tab-nav'); }
рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
HTML рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди: рдПрдЬ рд╕реА 16, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд╕реА 59, рдХреНрд░реЛрдо рд╕реА 49, рд╕рдлрд╛рд░реА рд╕реА 11ред
рдЗрдореНрдкреЛрд░реНрдЯ рд╕рдкреЛрд░реНрдЯ рд╕реИрдбрд░ рдХреЗ рд╕рд╛рде: рдХреНрд░реЛрдо рд╕реА 49ред
рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдЖрд▓реЗрдЦ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗрд╡рд▓ рдирд╡реАрдирддрдо рдХреНрд░реЛрдо рдореЗрдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдкреЙрд▓реАрдлрд╝рд╛рдЗрд▓реНрд╕ рд╣реИрдВ:
WebcomponentsрдкреЙрд▓рд┐рдорд░-рдкрд░рд┐рдпреЛрдЬрдирд╛рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рдЖрдпрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ:
HTML рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдиHTML5 рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдиHTML рдЖрдпрд╛рдд рдбреНрд░рд╛рдлреНрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВрдпрд╣ рд╕рдм рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж,
рддрд╛рдиреНрдпрд╛