使用 display
属性,HTML 元素可以从样式的角度进行互换。然而,fieldset
和 legend
似乎不适用于这个规则。
是否可能使其他 HTML 元素的外观看起来像 fieldset
和 legend
?
这个功能运行得很好,但如果背景是一张图片,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>
legend
元素在fieldset
边框上造成的那种边框破裂效果。我认为仅使用CSS是不可能实现的,这只是由于fieldset
标签的呈现方式所致。
澄清:我不知道有任何方法可以定位块或内联元素,使其跨越包含块元素的可见边框,然后导致容器元素的边框在其框后面被打破。这就是<legend>
对其包含的<fieldset>
元素边框所做的事情。<div style="border: 1px solid #000">
<h1 style="background: #fff; margin-top: -5px; margin-left: 10px; padding: 0 10px; width: 150px;">Foobar</h1>
</div>
所以我修复了代码,使它看起来有点像legend标签(实际上就像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>
fieldset
/legend
创建的确切效果,或者该效果是否仅针对fieldset
/legend
进行硬编码。由于它似乎确实是硬编码的,所以我接受了这个答案。 - Jakob