<p>
опционален. Алгоритм парсинга по стандарту автоматически неявно подставляет </p>
перед любым элементом, который в HTML4 называли «блочным» (сейчас их называют «non-phrasing flow content»). А потом парсер видит бесхозный явный закрывающий тег и исправляет эту ошибку, добавляя перед ним открывающий.<div>
. Но с большой вероятностью это не нужно, форма сама по себе контейнер, стили можно навешивать прямо на нее.