рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╢реИрдбреЛ рдбреЛрдо рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреА рдФрд░ рд╡реЗрдм рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕

[рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣] рдЪрдХреНрд░ рдХреЗ рдЕрдиреНрдп 19 рднрд╛рдЧреЛрдВ
рднрд╛рдЧ 1: рдЗрдВрдЬрди рдХрд╛ рдЕрд╡рд▓реЛрдХрди, рд░рдирдЯрд╛рдЗрдо рдореИрдХреЗрдирд┐рдЬреНрдо, рдХреЙрд▓ рд╕реНрдЯреИрдХ
рднрд╛рдЧ 2: рд╡реА 8 рдЗрдВрдЯрд░реНрдирд▓реНрд╕ рдФрд░ рдХреЛрдб рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рднрд╛рдЧ 3: рд╕реНрдореГрддрд┐ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛, рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреА рдореЗрдореЛрд░реА рд▓реАрдХ рдХрд░рдирд╛ рдФрд░ рдЙрдирд╕реЗ рдирд┐рдкрдЯрдирд╛
рднрд╛рдЧ 4: рдЗрд╡реЗрдВрдЯ рд▓реВрдк, Async, рдФрд░ рдкрд╛рдБрдЪ рддрд░реАрдХреЗ Async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рднрд╛рдЧ 5: WebSocket рдФрд░ HTTP / 2 + SSEред рдХреНрдпрд╛ рдЪреБрдирдирд╛ рд╣реИ?
рднрд╛рдЧ рем: рд╡реЗрдмрд╕рд░реНрд╡рд┐рд╕ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░
рднрд╛рдЧ 7: рд╡реЗрдм рд╢реНрд░рдорд┐рдХ рдФрд░ рдкрд╛рдБрдЪ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдп
рднрд╛рдЧ 8: рд╕реЗрд╡рд╛ рдХрд░реНрдореА
рднрд╛рдЧ 9: рд╡реЗрдм рдкреБрд╢ рд╕реВрдЪрдирд╛рдПрдБ
рднрд╛рдЧ 10: MutationObserver рдХреЗ рд╕рд╛рде DOM рдореЗрдВ рдЯреНрд░реИрдХ рдкрд░рд┐рд╡рд░реНрддрди
рднрд╛рдЧ 11: рд╡реЗрдм рдкреЗрдЬ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрди рдФрд░ рдЙрдирдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡
рднрд╛рдЧ 12: рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдмрд╕рд┐рд╕реНрдЯрдо, рдЗрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ
рднрд╛рдЧ 12: рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдмрд╕рд┐рд╕реНрдЯрдо, рдЗрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ
рднрд╛рдЧ 13: рд╕реАрдПрд╕рдПрд╕ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдПрдиреАрдореЗрд╢рди
рднрд╛рдЧ 14: рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╕рд╛рд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрдбрд╝, рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рдЗрд╕рдХрд╛ рдЕрдиреБрдХреВрд▓рди
рднрд╛рдЧ 15: рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рд╡рд┐рд░рд╛рд╕рдд, рдмреЗрдмрд▓ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд┐рдХреЗрд╢рди
рднрд╛рдЧ 16: рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рднрдВрдбрд╛рд░рдг
рднрд╛рдЧ 17: рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╢реИрдбреЛ рдбреЛрдо рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреА рдФрд░ рд╡реЗрдм рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕
рднрд╛рдЧ 18: рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдФрд░ рдкреА 2 рдкреА рд╕рдВрдЪрд╛рд░ рддрдВрддреНрд░
рднрд╛рдЧ 19: рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдХрд╕реНрдЯрдо рддрддреНрд╡

рдЖрдЬ, рд╕рдм рдХреБрдЫ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ 17 рднрд╛рдЧреЛрдВ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ, рдЬреЛ рдХрд┐рд╕реА рддрд░рд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рд╣рдо рд╡реЗрдм рдШрдЯрдХреЛрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдирдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИрдВред рд╢реИрдбреЛ рдбреЙрдо рддрдХрдиреАрдХ рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди


рд╡реЗрдм рдШрдЯрдХ рдПрдкреАрдЖрдИ рдХрд╛ рдПрдХ рдкрд░рд┐рд╡рд╛рд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирдП рдбреЛрдо рддрддреНрд╡реЛрдВ рдХреЛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдРрд╕реЗ рддрддреНрд╡реЛрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрд╛рдХреА рдХреЛрдб рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╡реЗрдм рдШрдЯрдХреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд╛рд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рд╣реИрдВ:

  • рд╢реИрдбреЛ рдбреЛрдо (рд╢реИрдбреЛ рдбреЛрдо)
  • HTML рдЯреЗрдореНрдкрд▓реЗрдЯ (HTML рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕)
  • рдХрд╕реНрдЯрдо рддрддреНрд╡
  • HTML рдЖрдпрд╛рдд (HTML рдЖрдпрд╛рдд)

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╢реИрдбреЛ рдбреЛрдо рддрдХрдиреАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдШрдЯрдХ-рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЖрдо рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВ:

  • DOM рдЖрдЗрд╕реЛрд▓реЗрд╢рди: рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдПрдХ рдкреГрдердХ DOM рдЯреНрд░реА рд╣реЛрддрд╛ рд╣реИ (рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ document.querySelector() рдХрдорд╛рдВрдб рдШрдЯрдХ рдХреЗ рд╢реИрдбреЛ DOM рдореЗрдВ рдиреЛрдб рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реАрдПрд╕рдПрд╕ рдЪрдпрдирдХрд░реНрддрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреЛрдо рдШрдЯрдХ рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реИрдВ, рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдирд╛рдо рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╣реА рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдирд╛рдореЛрдВ рдореЗрдВ рд╡рд░реНрдЧ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  • рд╕реАрдПрд╕рдПрд╕ рдЕрд▓рдЧрд╛рд╡: рдЫрд╛рдпрд╛ рдбреЛрдо рдХреЗ рдЕрдВрджрд░ рд╡рд░реНрдгрд┐рдд рд╕реАрдПрд╕рдПрд╕ рдирд┐рдпрдо рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реАрдорд┐рдд рд╣реИрдВред рдпреЗ рд╢реИрд▓рд┐рдпрд╛рдБ рддрддреНрд╡ рдирд╣реАрдВ рдЫреЛрдбрд╝рддреА рд╣реИрдВ, рд╡реЗ рдЕрдиреНрдп рдкреГрд╖реНрда рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИрдВред
  • рд░рдЪрдирд╛: рдорд╛рд░реНрдХрдЕрдк-рдЖрдзрд╛рд░рд┐рдд рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛ред

рд╢реИрдбреЛ рдбреЛрдо рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреА


рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА DOM рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд API рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдпрджрд┐ рдирд╣реАрдВ - рдЖрдк рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕ рд╕рд╛рдорд╛рдиред

рд╢реИрдбреЛ рдбреЛрдо рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд DOM рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рджреЛ рдЕрдВрддрд░реЛрдВ рдХреЗ рд╕рд╛рде:

  • рдкрд╣рд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╢реИрдбреЛ рдбреЛрдо рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рд╢реЗрд╖ рдкреЗрдЬ рдкрд░ рд╢реИрдбреЛ рдбреЛрдо рдХреЗ рд╕рдВрдмрдВрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
  • рджреВрд╕рд░рд╛ рдкреЗрдЬ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╢реИрдбреЛ рдбреЛрдо рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред

DOM рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, DOM рдиреЛрдбреНрд╕ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдкреЗрдЬ рдХреЗ рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред рд╢реИрдбреЛ рдбреЛрдо рддрдХрдиреАрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдЕрд▓рдЧ рдбреЛрдо рдЯреНрд░реА рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рддрддреНрд╡ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЙрд╕рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рд▓ рддрддреНрд╡реЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдкреГрдердХ рдЙрдк-рдкреНрд░рдХрд╛рд░ рдХреЛ рдЫрд╛рдпрд╛ рд╡реГрдХреНрд╖ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд┐рд╕ рддрддреНрд╡ рд╕реЗ рдРрд╕рд╛ рдкреЗрдбрд╝ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ рдЙрд╕реЗ рд╢реИрдбреЛ рд╣реЛрд╕реНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдЬреЛ DOM DOM рдХреЗ рд╕рд╛рде рдЫрд╛рдпрд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣ рдЙрд╕ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рд╕рдВрд▓рдЧреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ <style> рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдгрд┐рдд рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╢реИрдбреЛ рдбреЛрдо рддрдХрдиреАрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдПрд╕рдПрд╕ рдЕрд▓рдЧрд╛рд╡ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рд╢реИрдбреЛ рдбреЛрдо рдмрдирд╛рдирд╛


рдЫрд╛рдпрд╛ рдЬрдбрд╝ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ рдЬреЛ рдореЗрдЬрдмрд╛рди рддрддреНрд╡ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИред рдПрдХ рддрддреНрд╡ рдПрдХ рдЫрд╛рдпрд╛ DOM рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдЫрд╛рдпрд╛ рд░реВрдЯ рддрддреНрд╡ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реИрдбреЛ DOM рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлреЙрд░реНрдо element.attachShadow() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 var header = document.createElement('header'); var shadowRoot = header.attachShadow({mode: 'open'}); shadowRoot.appendChild(document.createElement('<p> Shadow DOM </p>'); 

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╢реИрдбреЛ рдбреЛрдо рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рдореЗрдВ рдЙрди рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЬрд┐рдирд╕реЗ DOM рд╢реИрдбреЛ рд╕рдмрдЯреНрд░реАрдЬрд╝ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╢реИрдбреЛ рдбреЛрдо рдореЗрдВ рд░рдЪрдирд╛


рд░рдЪрдирд╛ рд╢реИрдбреЛ рдбреЛрдо рдХреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдпрд╣ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ HTML рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╡рд┐рднрд┐рдиреНрди рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ (рдПрд▓рд┐рдореЗрдВрдЯреНрд╕) рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдкреЗрдЬ рдмрдирд╛рддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ-рджреВрд╕рд░реЗ рдореЗрдВ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреЗ рдРрд╕реЗ рддрддреНрд╡ рд╣реИрдВ рдЬреИрд╕реЗ <div> , <header> , <form> , рдФрд░ рдЕрдиреНрдп рдЬреЛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╡реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред

рд░рдЪрдирд╛ рддрддреНрд╡реЛрдВ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ <select> , <form> , <video> , рдЕрдиреНрдп HTML рддрддреНрд╡реЛрдВ рдХреЛ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдРрд╕реЗ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╡рд┐рд╢реЗрд╖ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, <select> рдПрд▓рд┐рдореЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдРрд╕реА рд╕реВрдЪреА рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ <option> рддрддреНрд╡реЛрдВ рдХреЛ рд░реЗрдВрдбрд░ <option> рд▓рд┐рдП рд╣реИред

рддрддреНрд╡реЛрдВ рдХреА рд░рдЪрдирд╛ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд╢реИрдбреЛ рдбреЛрдо рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рд╣рд▓реНрдХреА рдбреЛрдо


рд▓рд╛рдЗрдЯ рдбреЛрдо рдЖрдкрдХреЗ рдШрдЯрдХ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рд░реНрдХрдЕрдк рд╣реИред рдпрд╣ DOM рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рд╢реИрдбреЛ DOM рдХреЗ рдмрд╛рд╣рд░ рд╣реИ рдФрд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХрд╛ рдПрдХ рдмрдЪреНрдЪрд╛ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ <better-button> рдирд╛рдордХ рдПрдХ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдорд╛рдирдХ HTML <button> рддрддреНрд╡ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕ рдирдП рддрддреНрд╡ рдореЗрдВ рдПрдХ рдЫрд╡рд┐ рдФрд░ рдХреБрдЫ рдкрд╛рда рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 <extended-button> <!--  img  span -  Light DOM  extended-button --> <img align="center" src="boot.png" slot="image"> <span>Launch</span> </extended-button> 

<extended-button> рддрддреНрд╡ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдПрдХ рдХрд╕реНрдЯрдо рдШрдЯрдХ рд╣реИ, рдФрд░ рдЗрд╕ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ HTML рдХреЛрдб рдЗрд╕рдХреА рд▓рд╛рдЗрдЯ рдбреЛрдо рд╣реИ - рдЗрд╕ рдШрдЯрдХ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рдЬреЛрдбрд╝рд╛ рд╣реИред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЫрд╛рдпрд╛ DOM <extended-button> рдШрдЯрдХ рд╣реИред рдпрд╣ рдПрдХ рдШрдЯрдХ рдХрд╛ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рд╣реИ рдЬреЛ рд╕реАрдПрд╕рдПрд╕ рдХреА рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рд╕реЗ рдЕрд▓рдЧ, рдЗрд╕рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдШрдЯрдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИред

рдЪрдкрдЯрд╛ рдбреЛрдо


рдЪрдкрдЯрд╛ рдбреЛрдо рдкреЗрдбрд╝ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдШрдЯрдХ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓рд╛рдЗрдЯ рдбреЛрдо рдФрд░ рд╢реИрдбреЛ рдбреЛрдо рдХреЛ рдорд┐рд▓рд╛рдХрд░ред рдпрд╣ рдРрд╕рд╛ DOM рдЯреНрд░реА рд╣реИ рдЬрд┐рд╕реЗ рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓реНрд╕ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдкреЗрдЬ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 <extended-button> #shadow-root <style>тАж</style> <slot name="image">   <img align="center" src="boot.png" slot="image"> </slot> <span id="container">   <slot>     <span>Launch</span>   </slot> </span> </extended-button> 

рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕


рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рд╡реЗрдм рдкреЗрдЬреЛрдВ рдХреЗ HTML рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдмрд╛рд░-рдмрд╛рд░ рдПрдХ рд╣реА рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рдПрдЪрдЯреАрдПрдордПрд▓ рдЯреИрдЧ рдХреЗ рдЙрджреНрднрд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж <template> , рдЬреЛ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рд╣реИред рдпрд╣ рддрддреНрд╡ рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА DOM рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 <template id="my-paragraph"> <p> Paragraph content. </p> </template> 

рдпрджрд┐ рдЖрдк рдЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдкреГрд╖реНрда рдХреЗ HTML рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд <p> рдЯреИрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░реАрди рдкрд░ рддрдм рддрдХ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧреА, рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ DOM рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реА рди рд╣реЛред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 var template = document.getElementById('my-paragraph'); var templateContent = template.content; document.body.appendChild(templateContent); 

рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рд╛рдзрди рд╣реИрдВ, рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдорд╛рдирдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдЕрдЪреНрдЫреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди рдХрд╛ рдЖрдирдВрдж рд▓реЗрддрд╛ рд╣реИред


рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП HTML рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди

рдЯреЗрдореНрдкрд▓реЗрдЯ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЙрдирдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╕реНрдЯрдо рддрддреНрд╡ рдПрдХ рдЕрд▓рдЧ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИ, рдФрд░ рдЕрдм, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ customElement рдмреНрд░рд╛рдЙрдЬрд╝рд░ customElement рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ HTML рдЯреИрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрди рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рдЧрдП рддрддреНрд╡ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреИрд╕реЗ рджрд┐рдЦреЗрдВрдЧреЗред

рдПрдХ рд╡реЗрдм рдШрдЯрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдЙрд╕рдХреА рдЫрд╛рдпрд╛ DOM рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдирдП рддрддреНрд╡ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ <my-paragraph> :

 customElements.define('my-paragraph', class extends HTMLElement {  constructor() {    super();    let template = document.getElementById('my-paragraph');    let templateContent = template.content;    const shadowRoot = this.attachShadow({mode: 'open'}).appendChild(templateContent.cloneNode(true)); } }); 

рдзреНрдпрд╛рди рджреЗрдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЫрд╛рдпрд╛ рд░реВрдЯ рдореЗрдВ Node.cloneNode () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдПрдХ рдХреНрд▓реЛрди рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рд╣рдо рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╢реИрдбреЛ рдбреЛрдо рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо <рд╕реНрдЯрд╛рдЗрд▓> рдПрд▓реАрдореЗрдВрдЯ рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдХреБрдЫ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рддрдм рдпреВрдЬрд░ рдПрд▓рд┐рдореЗрдВрдЯ рдореЗрдВ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдкреВрд░реА рдпреЛрдЬрдирд╛ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреА рдпрджрд┐ рдЖрдк рд╢реИрдбреЛ рдбреЛрдо рдХреЗ рдмрдЬрд╛рдп рдирд┐рдпрдорд┐рдд DOM рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╢реИрд▓реА рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 <template id="my-paragraph"> <style>   p {     color: white;     background-color: #666;     padding: 5px;   } </style> <p>Paragraph content. </p> </template> 

рдЕрдм рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рдкрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 <my-paragraph></my-paragraph> 

рд╕реНрд▓реЙрдЯреНрд╕


HTML рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдХрдИ рдХрдорд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдореБрдЦреНрдп рд╕реНрдЯреИрдЯрд┐рдХ рдорд╛рд░реНрдХрдЕрдк рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЙрдирдХреА рдорджрдж рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╡реЗ рдорд╛рдирдХ HTML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ <slot> рдЯреИрдЧ рдЖрддрд╛ рд╣реИред

рд╕реНрд▓реЙрдЯреНрд╕ рдХреЛ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ HTML рдХреЛрдб рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрд▓реЙрдЯреНрд╕ рдЬреЛрдбрд╝рдХрд░ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЗрд╕ рдмрд╛рдд рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд <slot> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ:

 <template id="my-paragraph"> <p>   <slot name="my-text">Default text</slot> </p> </template> 

рдпрджрд┐ рддрддреНрд╡ рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдкрд░ рд╕реНрд▓реЙрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдпрд╛ рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрд▓реЙрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ <my-paragraph> рддрддреНрд╡ рдореЗрдВ рдХреЗрд╡рд▓ Default text рдХреА рдорд╛рдирдХ рд╕рд╛рдордЧреНрд░реА рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреАред

рд╕реНрд▓реЙрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ <my-paragraph> рддрддреНрд╡ рдореЗрдВ slot рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде HTML рдХреЛрдб рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рдЙрд╕ рд╕реНрд▓реЙрдЯ рдХреЗ рдирд╛рдо рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 <my-paragraph> <span slot="my-text">Let's have some different text!</span> </my-paragraph> 

рдЖрдЗрдЯрдо рд╣реИ рдХрд┐ рд╕реНрд▓реЙрдЯ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ Slotable рддрддреНрд╡ред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдордиреЗ рд╕реНрд▓реЙрдЯ рдореЗрдВ <span> рддрддреНрд╡ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдпрд╣ рддрдерд╛рдХрдерд┐рдд рд╕реНрд▓реЙрдЯреЗрдб рддрддреНрд╡ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ slot рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореВрд▓реНрдп my-text рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, my-text , рд╡рд╣реА рдореВрд▓реНрдп рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕реНрд▓реЙрдЯ рдХреЗ name рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрдкрд░реЛрдХреНрдд рдорд╛рд░реНрдХрдЕрдк рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд┐рдореНрди рдЪрдкрдЯрд╛ рдбреЛрдо рдЯреНрд░реА рдмрдирд╛рдПрдЧрд╛:

 <my-paragraph> #shadow-root <p>   <slot name="my-text">     <span slot="my-text">Let's have some different text!</span>   </slot> </p> </my-paragraph> 

рддрддреНрд╡ #shadow-root ред рдпрд╣ рд╢реИрдбреЛ рдбреЛрдо рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИред

stylization


рд╢реИрдбреЛ рдбреЛрдо рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдЯрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡реЗ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдЧреБрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реБрдХ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдШрдЯрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

In рдШрдЯрдХреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╢реИрд▓рд┐рдпрд╛рдБ


рд╕реАрдПрд╕рдПрд╕ рдЕрд▓рдЧрд╛рд╡ рд╢реИрдбреЛ рдбреЛрдо рддрдХрдиреАрдХ рдХреА рд╕рдмрд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЕрд░реНрдерд╛рддреН, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

  • рдкреГрд╖реНрда рдХреЗ рд╕реАрдПрд╕рдПрд╕ рдЪрдпрдирдХрд░реНрддрд╛ рдЬрд┐рд╕ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдХ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИ рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  • рдШрдЯрдХ рдХреЗ рднреАрддрд░ рд╡рд░реНрдгрд┐рдд рд╢реИрд▓рд┐рдпрд╛рдБ рдкреГрд╖реНрда рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред рд╡реЗ рдореЗрдЬрдмрд╛рди рддрддреНрд╡ рдореЗрдВ рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реИрдВред

рдЫрд╛рдпрд╛ рдбреЛрдо рдХреЗ рдЕрдВрджрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реАрдПрд╕рдПрд╕ рдЪрдпрдирдХрд░реНрддрд╛ рдШрдЯрдХ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЕрд▓рдЧ-рдЕрд▓рдЧ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдФрд░ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ рдФрд░ рдирд╛рдо рд╕рдВрдШрд░реНрд╖ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рд░рд▓ рд╕реАрдПрд╕рдПрд╕ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдорддрд▓рдм рдЙрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рднреА рд╣реИ рдЬрд┐рдирдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

#shadow-root рддрддреНрд╡ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рдЬреЛ рдХреБрдЫ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:

 #shadow-root <style> #container {   background: white; } #container-items {   display: inline-flex; } </style> <div id="container"></div> <div id="container-items"></div> 

рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╢реИрд▓рд┐рдпрд╛рдБ рд╕реНрдерд╛рдиреАрдп #shadow-root ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк #shadow-root рдореЗрдВ рдмрд╛рд╣рд░реА рд╕реНрдЯрд╛рдЗрд▓ рд╢реАрдЯ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП <link> рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реА рд╢реИрд▓рд┐рдпрд╛рдБ рд╕реНрдерд╛рдиреАрдп рднреА рд╣реЛрдВрдЧреАред

тЦНPseudoclass: рдореЗрдЬрдмрд╛рди


:host рдЫрджреНрдо :host рдЖрдкрдХреЛ рдПрдХ рддрддреНрд╡ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЫрд╛рдпрд╛ DOM рдЯреНрд░реА рдФрд░ рдЗрд╕ рддрддреНрд╡ рдХреА рд╢реИрд▓реА рд╣реИ:

 <style> :host {   display: block; /*       display: inline */ } </style> 

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ :host рдЫрджреНрдо :host , рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдореВрд▓ рдкреГрд╖реНрда рдХреЗ рдирд┐рдпрдореЛрдВ рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдЫрджреНрдо рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рддрддреНрд╡ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрд╛рд╣рд░ рд╕реЗ рдЗрд╕рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрд╕реНрдЯ рдШрдЯрдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЫрджреНрдо :host рдХреЗрд╡рд▓ рдореВрд▓ рддрддреНрд╡ рдХреА рдЫрд╛рдпрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реИ, рд╕реЗ рдкрд░реЗ рдПрдХ рдЫрд╛рдпрд╛ рдбреЛрдо рдкреЗрдбрд╝ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЫрджреНрдо рд╡рд░реНрдЧ рдХрд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк :: :host(<selector>) , рдЖрдкрдХреЛ рд╣реЛрд╕реНрдЯ рддрддреНрд╡ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ <selector> рддрддреНрд╡ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдШрдЯрдХреЛрдВ рдХреЛ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдпрд╛ рдШрдЯрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдореЗрдЬрдмрд╛рди рдШрдЯрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдВрддрд░рд┐рдХ рдиреЛрдбреНрд╕ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

 <style> :host {   opacity: 0.4; } :host(:hover) {   opacity: 1; } :host([disabled]) { /*      -  disabled. */   background: grey;   pointer-events: none;   opacity: 0.4; } :host(.pink) > #tabs {   color: pink; /*     #tabs   -  class="pink". */ } </style> 

-рдЯрд╛рдЗрдкрд┐рдХреНрд╕ рдФрд░ рдПрдХ рдЫрджреНрдо рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рддрддреНрд╡: рдореЗрдЬрдмрд╛рди-рд╕рдВрджрд░реНрдн (<рдЪрдпрдирдХрд░реНрддрд╛>)


:host-context(<selector>) рдЫрджреНрдо- :host-context(<selector>) рдореЗрдЬрдмрд╛рди рддрддреНрд╡ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдкреВрд░реНрд╡рдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ <selector> рддрддреНрд╡ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдереАрдо рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдХреНрд╕рд░ рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ <html> рдпрд╛ <body> рдЯреИрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХреНрд▓рд╛рд╕ рдЕрд╕рд╛рдЗрди рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 <body class="lightheme"> <custom-container> тАж </custom-container> </body> 

:host-context(.lightheme) рдЫрджреНрдо- :host-context(.lightheme) <fancy-tabs> рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рддрддреНрд╡ .lightteme рд╡рдВрд╢рдЬ рд╣реИ:

 :host-context(.lightheme) { color: black; background: white; } 

:host-context() рдереАрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП :host-context() рдирд┐рд░реНрдорд╛рдг рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

тЦН рдмрд╛рд╣рд░ рд╕реЗ рдШрдЯрдХ рдХреЗ рдореЗрдЬрдмрд╛рди рддрддреНрд╡ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдирд╛


рдШрдЯрдХ рдХреЗ рд╣реЛрд╕реНрдЯ рддрддреНрд╡ рдХреЛ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреЗ рдЯреИрдЧ рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 custom-container { color: red; } 

рдмрд╛рд╣рд░реА рд╢реИрд▓реА рдЫрд╛рдпрд╛ рдбреЛрдо рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢реИрд▓рд┐рдпреЛрдВ рдкрд░ рдкреВрд░реНрд╡рддрд╛ рд▓реЗрддреА рд╣реИрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрдпрдирдХрд░реНрддрд╛ рдмрдирд╛рддрд╛ рд╣реИ:

 custom-container { width: 500px; } 

рдпрд╣ рдШрдЯрдХ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рдпрдо рдХреЛ рд╣реА рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдЧрд╛:

 :host { width: 300px; } 

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХреЗрд╡рд▓ рдШрдЯрдХ рдХреЛ рд╣реА рд╕реНрдЯрд╛рдЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рдШрдЯрдХ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХреИрд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░реЗрдВ? рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдЧреБрдг рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕реНрдЯрд╛рдЗрд▓ рд╣реБрдХ рд▓рдЧрд╛рдирд╛


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдШрдЯрдХ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдШрдЯрдХ рдХрд╛ рд▓реЗрдЦрдХ рдЙрдиреНрд╣реЗрдВ рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯрд╛рдЗрд▓ рд╣реБрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг <slot> рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрдВрддреНрд░ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╢реИрд▓рд┐рдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 <!-- main page --> <style> custom-container {   margin-bottom: 60px;    - custom-container-bg: black; } </style> <custom-container background>тАж</custom-container> 

рдпрд╣рд╛рдБ рдЫрд╛рдпрд╛ рдбреЛрдо рдкреЗрдбрд╝ рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИ:

 :host([background]) { background: var( - custom-container-bg, #CECECE); border-radius: 10px; padding: 10px; } 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдШрдЯрдХ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд▓реЗ рд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдерд╛ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред рдЕрдиреНрдпрдерд╛, рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ #CECECE рд╣реЛрдЧрд╛ред

рдШрдЯрдХ рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реАрдПрд╕рдПрд╕ рдЧреБрдг рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЗ рдЦреБрд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЗрд╕ рднрд╛рдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рд╕реНрд▓реЙрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдкреАрдЖрдИ


рд╢реИрдбреЛ DOM API рд╕реНрд▓реЙрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

тЦНEvent рдЦрд╛рдВрдЪрд╛ рдмрджрд▓рдирд╛


рд╕реНрд▓реЙрдЯ рдмрджрд▓рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдиреЛрдбреНрд╕ рдХреЛ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рд╕реНрд▓реЙрдЯ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд╛рдЗрдЯ рдбреЛрдо рдореЗрдВ рдЪрд╛рдЗрд▓реНрдб рдиреЛрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдпрд╛ рд╣рдЯрд╛рддрд╛ рд╣реИ:

 var slot = this.shadowRoot.querySelector('#some_slot'); slot.addEventListener('slotchange', function(e) { console.log('Light DOM change'); }); 

рд▓рд╛рдЗрдЯ рдбреЛрдо рдореЗрдВ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рддрддреНрд╡ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ MutationObserver рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдФрд░ рдкрдврд╝реЗрдВред

тЦН рд╡рд┐рдзрд┐ рдирд┐рдпрдд рдкрдж ()


рдпрджрд┐ рдЖрдк рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрд▓реЙрдЯ рдХреЗ рд╕рд╛рде рдХреМрди рд╕реЗ рддрддреНрд╡ рдЬреБрдбрд╝реЗ рд╣реИрдВ, рддреЛ assignedNodes() рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИред slot.assignedNodes() рдХреЙрд▓ рдХрд░рдирд╛ред slot.assignedNodes() рдЧрдпрд╛ slot.assignedNodes() рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдХрд┐ рд╕реНрд▓реЙрдЯ рджреНрд╡рд╛рд░рд╛ рдХреМрди рд╕реЗ рддрддреНрд╡ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред {flatten: true} рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рд╕реНрд▓реЙрдЯ рдХреА рдорд╛рдирдХ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдиреЛрдбреНрд╕ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рдереЗ)ред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 <slot name='slot1'><p>Default content</p></slot> 

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╕реНрд▓реЙрдЯ <my-container> рдШрдЯрдХ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред

рдЖрдЗрдП рдЗрд╕ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рдФрд░ рдЬрдм assignedNodes() рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕реНрд▓реЙрдЯ рдореЗрдВ рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

 <my-container> <span slot="slot1"> container text </span> </my-container> 

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, assignedNodes() рдХреЙрд▓ рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛ [ container text ] ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдорд╛рди рдиреЛрдбреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред

рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд╕реНрд▓реЙрдЯ рдирд╣реАрдВ рднрд░рддреЗ рд╣реИрдВ:

 <my-container> </my-container> 

assignedNodes() рдХреЙрд▓ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рд▓реМрдЯрд╛рдПрдЧрд╛ - [] ред

рдЕрдЧрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдкрд╛рд╕ {flatten: true} , рдПрдХ рд╣реА рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЙрд╕рдХрд╛ рдлреЛрди рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рджреЗ рджреЗрдВрдЧреЗ, рдЬрдмрдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ: [ Default content ]

[ Default content ]

[ Default content ] ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрд▓реЙрдЯ рдХреЗ рдЕрдВрджрд░ рдПрдХ рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк assignedNodes() рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗ рдХрд┐ рдЖрдкрдХрд╛ рддрддреНрд╡ рдХрд┐рд╕ рдШрдЯрдХ рд╕реНрд▓реЙрдЯ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╡реЗрдВрдЯ рдореЙрдбрд▓


рдЖрдЗрдП рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдШрдЯрдирд╛ рдЬреЛ рдЫрд╛рдпрд╛ рдореЗрдВ рдкреЙрдк рд╣реЛрддреА рд╣реИ DOM рдЯреНрд░реА рдкреЙрдк рдЕрдк рд╣реЛрддреА рд╣реИред рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╢реИрдбреЛ DOM рддрдХрдиреАрдХ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬрдм рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдШрдЯрдХ рд╕реЗ рд╣реА рдЖрддрд╛ рд╣реИ, рди рдХрд┐ рдЗрд╕рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрддреНрд╡ рд╕реЗ, рдЬреЛ рдЫрд╛рдпрд╛ DOM рд╡реГрдХреНрд╖ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдЗрд╕ рдШрдЯрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

рдпрд╣рд╛рдВ рдЙрди рдШрдЯрдирд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ рдЬреЛ рдбреЛрдо рд╢реИрдбреЛ рдЯреНрд░реА рд╕реЗ рдкрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ (рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреБрдЫ рдШрдЯрдирд╛рдУрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ):

  • рдлреЛрдХрд╕ рдЗрд╡реЗрдВрдЯреНрд╕: blur , focus , focusout , focusout ред
  • рдорд╛рдЙрд╕ рдШрдЯрдирд╛рдПрдБ: click , dblclick , mousedown , mouseenter , mousemove рдФрд░ рдЕрдиреНрдпред
  • рдкрд╣рд┐рдпрд╛ рдШрдЯрдирд╛рдПрдБ: wheel ред
  • рдЗрдирдкреБрдЯ рдШрдЯрдирд╛рдПрдБ: beforeinput , input ред
  • рдХреАрдмреЛрд░реНрдб рдЗрд╡реЗрдВрдЯреНрд╕: keyup , рдХреА- keyup ред
  • рд░рдЪрдирд╛ рдХреА рдШрдЯрдирд╛рдПрдВ: compositionstart , compositionupdate , compositionend , compositionend ред
  • рдбреНрд░реИрдЧ рдЗрд╡реЗрдВрдЯреНрд╕: dragend , drag , dragend , drop рдЖрджрд┐ред

рдХрд╕реНрдЯрдо рдИрд╡реЗрдВрдЯ


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдИрд╡реЗрдВрдЯ DOM рд╢реИрдбреЛ рдЯреНрд░реА рдирд╣реАрдВ рдЫреЛрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдИрд╡реЗрдВрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╢реИрдбреЛ DOM рдХреЛ рдЫреЛрдбрд╝ рджреЗ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ bubbles: true рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ bubbles: true рдФрд░ composed: true ред рдпрд╣рд╛рдВ рдПрдХ рд╕рдорд╛рди рдШрдЯрдирд╛ рдХреА рдЪреБрдиреМрддреА рджреА рдЧрдИ рд╣реИ:

 var container = this.shadowRoot.querySelector('#container'); container.dispatchEvent(new Event('containerchanged', {bubbles: true, composed: true})); 

рд╢реИрдбреЛ рдбреЛрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди


рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╢реИрдбреЛ рдбреЛрдо рддрдХрдиреАрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЖрдк attachShadow рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 const supportsShadowDOMV1 = !!HTMLElement.prototype.attachShadow; 

рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдкрд░ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред


рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд╢реИрдбреЛ рдбреЛрдо рддрдХрдиреАрдХ рдХрд╛ рд╕рдорд░реНрдерди

рдкрд░рд┐рдгрд╛рдо


рдЫрд╛рдпрд╛ DOM рдЯреНрд░реА рдирд┐рдпрдорд┐рдд DOM рдЯреНрд░реА рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, SessionStack рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдпрд╣ DOM рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛ рдкреГрд╖реНрда рдХреЗ рд╕рд╛рде рд╣реБрдИ рдереА, рдЙрд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЕрд░реНрдерд╛рддреН, MutationObserver рдЙрдкрдпреЛрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЫрд╛рдпрд╛ рдбреЛрдо рдкреЗрдбрд╝ рдирд╣реАрдВ рдХреА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ MutationObserver рд╡реИрд╢реНрд╡рд┐рдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреА рдЬрд░реВрд░рдд рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХ рд╣реИ рдХрд┐ рдЫрд╛рдпрд╛ рдбреЛрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП,ред

рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реИрдбреЛ рдбреЛрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдФрд░ рд╡рд┐рддрд░рд┐рдд рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк рд╢реИрдбреЛ рдбреЛрдо рддрдХрдиреАрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?

Source: https://habr.com/ru/post/hi415881/


All Articles