Строгий тип документа - форма и элемент ввода - PullRequest
6 голосов
/ 06 июня 2010

Кто-нибудь знает причину строгого доктрипа, не позволяющего входным элементам быть прямыми потомками элемента формы. Я нахожу это раздражающим, что я должен обернуть кнопку отправки, которая является элементом уровня блока, внутри другого элемента уровня блока, например, fieldset или div. Однако я нигде не могу найти ответ, почему это так.

1 Ответ

2 голосов
/ 06 июня 2010

Таким образом, если вы попытаетесь поместить ввод непосредственно в форму без элемента контейнера и выполнить проверку в строгом соответствии с xhtml 1.0, вы получите это предупреждение:

тип документа не допускает элемент «вход» здесь; отсутствует один из «р», «h1», «h2», «h3», «h4», «h5», «h6», "div", "pre", "address", "fieldset", "ins", "del" start-tag ✉ упомянутый элемент не допускается появляются в контексте, в котором вы поместил это; другой упомянутый элементы являются единственными, которые как разрешено там, так и может содержать элемент упоминается. Это может означать что вам нужен содержащий элемент, или возможно, что вы забыли закрыть предыдущий элемент.

Одна из возможных причин для этого сообщения что вы пытались поставить элемент уровня блока (например, "

" или "

И если вы посмотрите здесь на определение W3C элемента формы (http://www.w3.org/TR/html4/interact/forms.html#h-17.3), то увидите, что модель содержимого элемента определена как "% block".

<! ФОРМА ЭЛЕМЕНТА - - (% block; | SCRIPT) + - (ФОРМА) - интерактивная форма ->

Если вы перейдете по ссылке «% block» (http://www.w3.org/TR/html4/sgml/dtd.html#block), которая приведет вас к элементам, которые определены как эти типы элементов. И это:

<!ENTITY % block
     "P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT |
      BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS">

Итак, как вы можете видеть, W3C не определяет вход или кнопку как элемент уровня блока. Вы можете найти на этой странице слово «input» и определить, что это тип контента «formctrl»:

<!ENTITY % formctrl "INPUT | SELECT | TEXTAREA | LABEL | BUTTON">

И, действительно, элементы ввода по умолчанию отображают как большее количество inline-block, чем block, учитывая, что они не вызывают разрывы строки до / после них. Таким образом, существует не только встроенные элементы и элементы уровня блока.

Итак, в конце концов, форма нуждается в том, чтобы ее прямые потомки были элементами блочного уровня, а входные элементы не соответствуют требованиям. Я надеюсь, что это все прояснит.

...