Действительно ли возможно достигнуть <fieldset> - как эффект, не используя <fieldset> тег?

Я лично как

тег из-за того, как это тянет поле и помещает наверху его, по границе. Как это.

example image of what I'm trying to achieve

Однако fieldset элемент был сделан организовать формы, и использование его для общего дизайна не лучше, чем использование таблиц для общего дизайна. Так, мой вопрос состоит... в том, как я могу достигнуть того же результата с помощью другого тега? Граница должна быть стерта под (или независимо от того, что другой тег будет использоваться), и так как могло быть "сложное" фоновое изображение тела, я не могу позволить себе просто установить background-color из легенды для соответствия той элемента под.

Я хотел бы, чтобы это работало без JavaScript, но CSS3 и основанные на XML форматы (такие как SVG или XHTML) прекрасны.

50
задан ahsteele 15 October 2012 в 05:26
поделиться

4 ответа

Нет, на самом деле это невозможно. С этим борются даже сами производители браузеров.

Конечно, я все равно не мог устоять перед попыткой. И я потратил на это так много времени, что Anonymous придумал «решение», довольно похожее на мое в среднем (его test1 ). Но мне не нужна "легенда" фиксированной ширины.

Этот код, очевидно, является чем-то вроде взлома, и я не знаю, насколько хорошо он будет работать на сложных сайтах. Я также согласен с Anonymous в том, что использование набора полей для группировки не так плохо, как использование таблиц для макета. Наборы полей были разработаны для группировки элементов, хотя в HTML они действительно должны использоваться только для группировки элементов управления формой.

 .fieldset {граница: 2px канавка с резьбой; граница-верх: нет; заполнение: 0.5em; маржа: 1em 2px; } .fieldset> h1 {font: 1em нормальный; маржа: -1em -0.5em 0; } .fieldset> h1> диапазон {float: left; } .fieldset> h1: before {border-top: 2px Groove Treedface; содержание: ' '; плыть налево; маржа: 0.5em 2px 0 -1px; ширина: 0,75 мм; } .fieldset> h1: после {border-top: 2px Groove Treedface; содержание: ' '; дисплей: блок; высота: 1,5 мм; слева: 2 пикселя; маржа: 0 1px 0 0; переполнение: скрыто; положение: относительное; верх: 0.5em; } 
 
Легенда Fieldset

Legend

Fieldset

В качестве примечания вы также можете взглянуть на элементы HTML5 figure и figcaption . Кажется, это лучшие элементы для использования в вашем примере.

Это касается только семантической части проблемы, поскольку я не думаю, что эти элементы отображаются так же, как набор полей / легенда. Не говоря уже о том, что текущие браузеры, вероятно, еще не поддерживают эти элементы.

20
ответ дан 7 November 2019 в 11:03
поделиться

Ссылка на демонстрационный jsBin

 .fieldset {border: 1px solid #ddd; маржа сверху: 1em; ширина: 500 пикселей; } .fieldset h1 {размер шрифта: 12 пикселей; выравнивание текста: центр; } .fieldset h1 span {display: inline; граница: 1px solid #ddd; фон: #fff; отступ: 5 пикселей 10 пикселей; положение: относительное; верх: -1,3 эм; } 
 

Title

Content

45
ответ дан 7 November 2019 в 11:03
поделиться

Полагаю, вы уже знаете ответ.

У вас есть 2 варианта, вы предоставляете свою собственную границу (это много ненужной работы) или позиционируете элемент с окклюдами границы (проблема в том, что вы можете иметь только сплошной цвет фона, но, может быть, это и нормально).

Насколько я знаю, вы ничего не можете сделать, чтобы сделать эту тренировку красивой в каждом браузере. Хотя мне нравится ваш стиль, это правильный подход, но, возможно, это не та проблема, которую вы сможете решить удовлетворительным образом.

Мое общее мнение по этим темам заключается в том, что вы не должны пытаться делать с сетью вещи, которые требуют A) чрезмерных усилий или B) решения по разметке, что не совсем очевидно для начала. В Сети есть ограничения, и вы бы хорошо справились с ними, вместо того, чтобы пытаться обойти эти ограничения.

Итак, я вынужден спросить, в чем проблема с ?

0
ответ дан 7 November 2019 в 11:03
поделиться

Однако это было сделано для организации форм,и использовать его для общего дизайна не лучше, чем использовать таблицы для общего дизайна

Это ошибка. Основная проблема с использованием таблиц для макета заключается в том, что макеты почти не сопоставляются с табличными данными. Вторая проблема заключается в том, что ни один из тех, которые не отображаются на табличные данные, не являются табличными данными, а некоторые из них - нет. То есть семантика разметки не будет соответствовать семантике страницы. Кроме того, с практической точки зрения, механизм компоновки таблиц обычно делает создание пользовательских стилей и просмотр только текста болезненным или невозможным.

Итак, fieldset явно предназначен для группировки полей формы. И выбор элемента по внешнему виду почти всегда означает, что это плохой выбор. Однако для этого конкретного примера я бы сказал, что набор полей + легенда, содержащая список, почти не имеет недостатков (на самом деле, единственный, о котором я могу думать, это скейпер, который наивно интерпретирует набор полей как сигнализацию формы, а затем тратит время пользователя на перечисление его содержимое отличается; но я не знаю ничего, что бы это делало на самом деле). Основная причина этого заключается в том, что элемент формы служит функциональной и семантической цели, заключающейся в хранении входных данных, в то время как fieldset обладает с самого начала особыми, невоспроизводимыми визуальными эффектами. Кроме того, если визуальные элементы в наборе полей каким-либо образом функциональны, семантически набор полей снова содержит набор интерактивных виджетов, что и было исходной точкой.

Мой совет - используйте его, если хотите. Я бы не стал, но не из семантических соображений: я предпочитаю не полагаться на специальные эффекты и предпочитаю форму функции в целом.

В любом случае, вот что стоит подумать:

    test   < / head>  
foo bar
foo
bar
foo
бар
6
ответ дан 7 November 2019 в 11:03
поделиться