2016-09-16 1 views
3

Вернувшись в IE6 дней, я использовал моделирование групповых ящиков стиля Windows (см. Пример) в HTML, создав div с рамкой и позиционируя span с текстом над границей с сплошным цветом фона для «стирания», рамка рамки. Было тривиально позиционировать текст группы в верхней или нижней части окна.Является ли <fieldset> + <legend> поведением «стирания» верхней границы, определенным любым стандартом (HTML или CSS)?

enter image description here

Этот метод работает хорошо, за исключением тех случаев, когда фон не был сплошной цвет. Я понимаю, что теги <fieldset> и <legend> обеспечивают то же самое поведение, которое я описываю, за исключением непрозрачных фонов : поддерживается , но текст может переходить только через полевой набор.

fieldset и legend комбо, кажется, работает волшебно таким образом, что независимо от legend штрихи будут удалены из fieldset границы (никогда не нарисованной на самом деле). Зачем это происходит? Я нашел examples from W3, которые иллюстрируют поведение, но я не могу найти ничего в спецификации HTML4/5, которая инструктирует UA «рассчитать ширину легенды и не нарисовать границу там». Является ли это поведение определенным в любом месте, или поставщики браузеров единогласно решили, что он должен сделать этот путь?

Если поведение не определено ... Я хочу заменить старый код IE6 на что-то современное, но я не уверен, что я должен использовать fieldset (даже если не форма) или какую-то особенность CSS Я не осознавая стирание границ так же, как и fieldset. Что стандарты предлагают либо зависеть от fieldset или эмулировать его надежно?

ответ

4

Положение легенды является стандартным. HTML5 rendering говорит

fieldset элемента rendered legend, если таковые имеются, как ожидается, быть вынесено над верхней границы края fieldset элемента как поле «блок» (перезаписывает любой явное значение «Дисплей»).

В нем явно не указано, что граница за легендой стирается, но в противном случае легенда будет иметь сквозное оформление. Таким образом, браузеры стирают границу.

+0

По крайней мере, спецификация говорит, что надпись должна быть нанесена поверх верхней границы - не над ней, внутри нее, необязательно и т. Д. Это должно быть достаточно хорошо, чтобы зависеть от нее, чтобы отразить то, как это сделал мой предыдущий код. Благодаря! – jimp