【发布时间】:2011-03-17 07:22:54
【问题描述】:
使用display 属性,从样式的角度来看,HTML 元素可以互换。但是,fieldset 和 legend 似乎并非如此。
是否可以将其他 HTML 元素设置为类似于 fieldset 和 legend 的样式?
【问题讨论】:
使用display 属性,从样式的角度来看,HTML 元素可以互换。但是,fieldset 和 legend 似乎并非如此。
是否可以将其他 HTML 元素设置为类似于 fieldset 和 legend 的样式?
【问题讨论】:
所以我修复了代码,使它看起来有点(它真的看起来像图例标签)像图例标签。
<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>
【讨论】:
这很好用,但是如果背景是图像,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>
【讨论】:
前面的答案不正确,如果你想看看为什么试试这个:
<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 标记呈现方式的一部分。
澄清:我不知道有什么方法可以定位块或内联元素,使其跨越其包含块元素的可见边框,然后导致容器元素的边框被破坏在它的盒子后面。这就是 <legend> 对其包含 <fieldset> 元素的边框所做的事情。
【讨论】:
fieldset/legend 创建的确切效果,或者该效果是否是硬编码的只有fieldset/legend。因为它确实似乎是硬编码的,所以我接受这个答案。
当然,例如:一个带有边框的 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>
【讨论】: