Веб-компоненты, семантическая разметка и структура документа

Допустим, мы создаем приложение под названием foo. Наше приложение будет использовать веб-компонент app-foo, который создает теневой корень, содержащий следующую разметку:

<app-foo>
    #shadow-root
       <main>
           ...
       </main>
</app-foo>

Конечно, пользователя не волнует, что находится внутри теневого корня веб-компонентов, которые они используют, поэтому он просто пишет свой документ так, как считает нужным, и использует app-foo везде, где ему это нужно. Это означает, что документ может содержать элемент main, как и app-foo.

Возможно, вам известно, что спецификации html (см. html. spec.whatwg.org) сообщает нам, что

В документе не должно быть более одного элемента main, для которого не указан атрибут hidden.

Что на самом деле означает документ? В некотором смысле теневые корни считаются их собственным инкапсулированным документом, где такие правила применяются к каждому отдельному документу или теневому корню (поскольку они совместно используют _ 8_ API) или эти правила применяются к плоскому документу?

TL; DR; будет ли недопустимым в соответствии со спецификациями HTML использовать элемент main внутри теневого корня веб-компонента, учитывая, что страница, на которой он используется, также содержит main?


person vrugtehagel    schedule 14.02.2021    source источник
comment
Был ли mijn antwoord verhelderend?   -  person Danny '365CSI' Engelman    schedule 27.02.2021


Ответы (1)


Что на самом деле означает документ?

Главный document

Считаются ли теневые корни в некотором роде своим собственным инкапсулированным документом, где такие правила применяются к каждому отдельному документу или теневому корню (поскольку они совместно используют API DocumentOrShadowRoot), или эти правила применяются к сплющенному документу?

Нет плоского документа, в этом смысле shadowRoots больше похожи на содержимое в IFrames.

будет ли недопустимым в соответствии со спецификациями HTML использовать основной элемент внутри теневого корня веб-компонента, учитывая, что страница, на которой он используется, также содержит основной элемент?

Все дело в семантике

Вы цитируете:

???? ???????????????????????????????? ???????????????? ???????????? ???????????????? ???????????????? ???????????????? ???????????? ???????????????? ???????????????????????????? ???????????????? ???????????????? ???????????? ???????????????? ???????????? ???????????????????????? ???????????????????????????????????? ????????????????????????????????????.

Он говорит должен иметь это не НЕ СКАЗАТЬ не может быть

Информативная цитата из <main> документации MDN:

‹????????????????› ????????????????????'???? ???????????????????????????????????????? ???????? ???????????? ????????????????????????????????'???? ????????????????????????????; ◄ ???????????????? ????????, ???????????????????????? ???????????????????????????????? ???????????????? ???????? ‹????????????????›, ???????????????????????????????? ???????????????? ???????? ‹????2›, ???????????? ????????????????, ‹????????????????› ????????????????????'???? ???????????????????????? ???????????? ????????????'???? ???????????????????????????? ???????? ???????????? ???????????????????????????????????? ???????? ???????????? ????????????????. ????????'???? ???????????????????????????????? ????????????????????????????????????????????.

Таким образом

<main> предназначен для вспомогательных технологий, таких как программы чтения с экрана.

А затем мы подходим к тому, что некоторые считают недостатком веб-компонентов.

Если программы чтения с экрана не написаны для погружения в OPEN shadowRoots, они будут обрабатывать только document DOM. И, конечно же, CLOSED shadowRoots недоступен.

Как далеко зайти с a11y - решать автору компонента.

Еще многое предстоит почитать:

person Danny '365CSI' Engelman    schedule 14.02.2021