ただし、フォームを整理するために作成されたものであり、一般的なデザインに使用することは、一般的なデザインにテーブルを使用することに勝るものはありません
これは間違っています。レイアウトにテーブルを使用する際の主な問題は、ほとんどのレイアウトが表形式のデータにマップされないことです。2 つ目の問題は、表形式のデータにマップされないものはどれも表形式のデータではなく、そうでないものもあるということです。つまり、マークアップのセマンティクスはページのセマンティクスと一致しません。さらに、実用的には、テーブルのレイアウト メカニズムは通常、カスタム スタイル設定やテキストのみのブラウジングを困難または不可能にします。
ここで、fieldset には明らかにフォーム フィールドをグループ化する意図があります。そして、その外観のために要素を選択することは、ほとんどの場合、それが悪い選択であることを示しています. ただし、この特定の例では、リストを含むフィールドセットと凡例にはほとんど欠点がないと主張します (実際、私が考えることができるのは、フィールドセットを単純にフォームのシグナルとして解釈し、ユーザーの列挙時間を無駄にするスケーパーだけです)。その内容は異なりますが、実際にこれを行うものは何も知りません)。これの主な理由は、フォーム要素が入力を含むという機能的および意味的な目的を果たしているのに対し、fieldset は初期の頃から特殊で再現不可能な視覚効果を持っていたためです。さらに、フィールドセットの視覚要素が何らかの形で機能している場合、
必要に応じて使用することをお勧めします。私はそうしませんが、セマンティックな考慮事項のためではありません。私は特殊効果に頼らず、一般的に機能よりも形式を避けたいと思っています。
とにかく、噛むべきものがあります:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head><title>test</title><style type="text/css">
.fake_fieldset {
border: 2px groove ButtonFace;
border-top-width: 0;
margin-left: 2px;
margin-right: 2px;
padding: .35em .625em .75em;
margin-top: 1em;
position: relative;
}
.fake_legend {
margin-top: -1em;
}
.fake_legend.test1::before {
position: absolute;
top: 0;
left: -1px;
border-top: 2px groove ButtonFace;
content: " ";
width: 0.5em;
}
.fake_legend.test1::after {
position: absolute;
top: 0;
right: -1px;
border-top: 2px groove ButtonFace;
content: " ";
width: 80%;
}
.fake_fieldset.test2 {
padding: 0;
padding-top: 1px; /* no collapsed margin */
}
.fake_fieldset.test2 .fake_fieldset.container {
margin: 0;
border: 0;
}
.fake_legend.test2 {
display: table;
width: 100%;
}
.fake_legend.test2 span {
display: table-cell;
}
.fake_legend.test2 span:first-child {
width: 0.5em;
}
.fake_legend.test2 span:first-child + span {
width: 0; /* cells stretch */
}
.fake_legend.test2 span:first-child,
.fake_legend.test2 span:last-child {
/* the rest of this code is left as an exercise for the reader */
}
</style></head><body>
<fieldset><legend>foo</legend>bar</fieldset>
<div class="fake_fieldset test1"><div class="fake_legend test1">foo</div>bar</div>
<div class="fake_fieldset test2"><div class="fake_legend test2"><span></span><span>foo</span><span></span></div><div class="fake_fieldset container">bar</div></div>
</body></html>