Очевидно, <fieldset>
элементы должны генерировать контексты форматирования блока для их содержимого :
Ожидается, что элемент fieldset
создаст новый контекст форматирования блока.
Вот почему плавающие элементы не всплывают из них. Я думаю, это связано с природой наборов полей как визуальных групп управления формой. Могут быть и другие причины, но мне кажется, что это наиболее правдоподобно.
Кажется, нет способа отменить это, но я не удивлюсь; вы не можете уничтожить контекст форматирования блока после его создания.
Кстати, <fieldset>
s не clear плавает (если вы не дадите им стиль clear
чего-то отличного от none
). Когда элемент очищает числа с плавающей точкой (или говорят, что у них есть разрешение), он очищает только те предшествующие числа с плавающей точкой, которые касаются его в том же контексте форматирования. Родительский элемент также не очищает плавающие дочерние элементы, но он может установить контекст форматирования для них. Это поведение, наблюдаемое с <fieldset>
, и это также то, что происходит, когда вы устанавливаете overflow
что-то отличное от visible
на родительском элементе.
Из spec (выделено мое):
Это свойство указывает, какие стороны ящика (ов) элемента могут не быть смежными с более ранним плавающим ящиком. Свойство 'clear' не учитывает поплавки внутри самого элемента или в других контекстах форматирования блока .
Кроме того, как упоминалось в комментариях, для этого элемента браузерами не определен стиль очистки, поэтому стиль очистки по умолчанию уже будет значением по умолчанию none
. Это показано в этой демонстрации , в которой определено, что только один из наборов полей, следующих за плавающим блоком, имеет очищающие свойства и действительно является очищающим плавающее число.