可以将任何 HTML 元素设置为字段集/图例吗?

Posted

技术标签:

【中文标题】可以将任何 HTML 元素设置为字段集/图例吗?【英文标题】:Can any HTML element be styled as a fieldset/legend? 【发布时间】:2011-03-17 07:22:54 【问题描述】:

使用display 属性,从样式的角度来看,html 元素可以互换。但是,fieldsetlegend 似乎并非如此。

是否可以将其他 HTML 元素设置为类似于 fieldsetlegend 的样式?

【问题讨论】:

【参考方案1】:

所以我修复了代码,使它看起来有点(它真的看起来像图例标签)像图例标签。

    <div style="border: 2px groove #ccc">
    <h1 style="font-weight:normal; background: #fff; margin-top: -11px; margin-left: 10px; padding: 0 10px 0 0; width: 40px; height:20px; font-size:1em;">Foobar</h1>
</div>
  <fieldset><legend>Foobar</legend></fieldset>

【讨论】:

【参考方案2】:

这很好用,但是如果背景是图像,ie6 会表现得有点奇怪,条件注释无法解决任何问题。在 IE6-8、FF3.6、Safari 5、Chrome 5 中测试

.fieldset 
    position: relative;
    border: 1px solid #000;
    margin: 20px;
    padding: 20px;
    text-align: left;


.fieldset .legend 
    background: #fff;
    height: 1px;
    position: absolute;
    top: -1px;
    padding: 0 20px;
    color: #000;
    overflow: visible;


.fieldset .legend span 
    top: -0.5em;
    position: relative;
    vertical-align: middle;
    display: inline-block;
    overflow: visible;



   <div class="fieldset">
      <div class="legend">
         <span>This is the title</span>
      </div>
      Test
   </div>

【讨论】:

【参考方案3】:

前面的答案不正确,如果你想看看为什么试试这个:

<body style="background-color: #f00">
  <div style="border: 1px solid #000">
      <h1 style="background: #fff; margin-top: -5px; margin-left: 10px; padding: 0 10px; width: 150px;">Foobar</h1>
  </div>
  <fieldset><legend>Foobar</legend></fieldset>
</body>

AFAIK 没有办法使legend 元素在fieldset 的边界上产生边界中断效果。我不相信单独使用 CSS 是可能的,它只是 fieldset 标记呈现方式的一部分。

澄清:我不知道有什么方法可以定位块或内联元素,使其跨越其包含块元素的可见边框,然后导致容器元素的边框被破坏在它的盒子后面。这就是 &lt;legend&gt; 对其包含 &lt;fieldset&gt; 元素的边框所做的事情。

【讨论】:

我的回答没有错,只是需要一定的条件才能工作。你会发现这种“诡计”通常就是这种情况;几乎没有一刀切的解决方案。 好吧,他的问题是“如何将元素设置为字段集/图例对?”当您查看我提供的文档时,您是否看到两个相同的块? 我真正想知道的是是否有办法(使用 CSS 标准)来获得 fieldset/legend 创建的确切效果,或者该效果是否是硬编码的只有fieldset/legend。因为它确实似乎是硬编码的,所以我接受这个答案。 HTML5 spec defined the rendering of these elements 明确出现,可能与 UA 已经在做的事情相匹配。另见:Is the <fieldset> + <legend> top border “erasing” behavior defined by any standard (HTML or CSS)?【参考方案4】:

当然,例如:一个带有边框的 DIV 元素和一个背景颜色设置为与 DIV 的边框重叠的子标题元素看起来就像一个字段集和图例。

非常基本的例子:

<div style="border: 1px solid #000">
    <h1 style="background: #fff; margin-top: -5px; margin-left: 10px; padding: 0 10px; width: 150px;">Foobar</h1>
</div>

【讨论】:

只有当背景是纯色而不是图像时才能看起来正确。 是的。除非可以将背景图像也应用于子标题元素并将其与背景匹配。然而,这需要元素处于固定位置才能工作。

以上是关于可以将任何 HTML 元素设置为字段集/图例吗?的主要内容,如果未能解决你的问题,请参考以下文章

从图例元素中删除字段集边框和框阴影

字段集和图例的自定义边框

为嵌套字段集中的第一个图例元素设置样式

CSS/HTML 字段集与图例并排

android中的图例和字段集

花哨的字段集图例