Строгий doctype - форма и входной элемент

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

6
задан zaius 6 June 2010 в 00:10
поделиться

1 ответ

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

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

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

" или "

") внутри встроенного элемента (например, «», «» или «»).

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

Если вы перейдете по ссылке «% 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">

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

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

2
ответ дан 17 December 2019 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: