Все теги HTML классифицированы по категориям, которые описывают их природу. Эта классификация может быть связана с семантикой, поведением, взаимодействием и многими другими аспектами.
Оба тега p
и label
классифицируются в категории тегов "содержимого потока". Но есть одно небольшое различие между ними: тег label
также классифицируется в категории, называемой «фразовое содержимое».
Что все это значит на практике? Рендеринг по умолчанию в браузере будет соответствовать указанной классификации тегов и будет обрабатывать тег p
как элемент блока, а тег label
по умолчанию будет рассматриваться как встроенный элемент. Вы можете изменить это, переписав правило CSS по умолчанию: просто скажите браузеру, что вы хотите, чтобы ваш label
отображался как элемент блока.
label {
display: block;
}
Это необходимо сделать, потому что элементы, которые находятся в строке (display: inline), не могут иметь такие свойства, как height
, line-height
, margin-top
, margin-bottom
(они будут игнорироваться).
Если вы хотите, чтобы встроенный элемент имел свойство высоты, но при этом сохранял его в своем встроенном поведении (без причины LINE BREAK), вы можете объявить его как:
label{
display:inline-block;
}
Всегда полезно прочитать документацию HTML. Вот хороший график, показывающий категории , он может сэкономить вам много времени, особенно при работе с этими маленькими причудами.