Почему не формируется вложенное в p validate как XHTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>A webpage</title>
</head>
<body>
  <p>
  <form action="something.php" method="get">
    <input type="submit" value="Hello"/>
  </form>
</p>
</body>
</html>

Ответ 1

Посмотрите на сообщения об ошибках, которые вы получаете при попытке с помощью http://validator.w3.org

Помимо предупреждения о том, что вы не указали кодировку символов (и поэтому предполагаете UTF-8), основная ошибка заключается в том, что <p> не разрешено содержать не-встроенный контент. Вы можете полностью удалить теги <p> и </p> или переместить их внутри <form>.

Что касается "почему", это потому, что он определен в схеме, которая определяет, что есть и что недействительно XHTML. Если вы посмотрите на этот раздел определения XHTML, вы увидите, что <p> разрешено содержать только текст или 'inline' (не ' block '). Однако <form> считается как "блочный" контент не как "встроенный" контент.

Другими словами, форма может содержать абзацы, но абзац не может содержать формы.

Ответ 2

Согласно this, потому что:

Строка 8, колонка 44: тип документа не допускайте здесь элемента "форму"; отсутствует один из "объектов", "ins", "del", "map", start-tag ✉ Указанный элемент не допускается появляться в контексте, в котором вы его поместили; другие упомянутые элементы являются единственными оба разрешены там и могут содержать упомянутый элемент. Это может означать что вам нужен содержащий элемент, или возможно, что вы забыли закрыть предыдущий элемент.

Одной из возможных причин для этого сообщения является что вы попытались элемент уровня блока (например, "p" или "таблица" ) внутри встроенного элемента (например, "a", "span" или "Шрифт" ).

Строка 9, столбец 40: тип документа не допускайте ввода элемента "здесь"; отсутствует один из "p" , "h1", "h2", "h3", "h4", "h5", "h6", "div", "pre", "адрес", "набор полей", "ins", "del", старт-тег      input type="submit" value = "Hello" Указанный элемент не может появляться в контекст, в который вы его поместили; другими упомянутыми элементами являются только те, которые разрешены там и может содержать упомянутый элемент. Это может означать, что вам нужно или, возможно, что вы забыли закрыть предыдущий элемент.

Одной из возможных причин для этого сообщения является что вы попытались элемент уровня блока (например, "p" или "таблица" ) внутри встроенного элемента (например, "a", "span" или "Шрифт" ).

Ответ 3

Вы не можете поместить форму внутри абзаца. Напишите вот так:

<body>
  <form action="something.php" method="get">
  <p>
    <input type="submit" value="Hello"/>
  </p>
  </form>
</body>

Ответ 4

Попробуйте использовать W3C Markup Validator, в котором будет указано, что недопустимо для большинства (X) документов HTML и CSS.

Ответ 5

Я проверил тест с кодом HTML через validator.w3.org, и в результате вам нужно поменять метки P и FORM для он должен пройти как действительный HTML W3C.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>A webpage</title>
</head>
<body>
  <form action="something.php" method="get">
    <p>
      <input type="submit" value="Hello"/>
    </p>
  </form>
</body>
</html>