2010-12-16 13 views
42

ページには、左側のセルのチェックボックスと右側のセルの説明で構成される表があります。 「説明」には、h4ヘッダーとプレーンテキストが含まれます。その説明全体(<td></td>のすべてのもの)をラベルにしたいと思います。内部のHTMLタグ<label>

だから、それぞれの行は次のようになります。しかしこれは動作しません

<tr><td><input type="checkbox" name="entiries[]" value="i1" id="i1"></td> 
<td><label for="i1"> 
<h4>Some stuff</h4>more stuff.. 
<h4>Some stuff</h4>more stuff.. 
</label> 
</td></tr> 

、テキストがラベルのように行動しないと、クリック可能ではありません。 Firefox 3.6を使ってテストしています。 <h4>タグを削除すると作業が始まりますが、フォーマットが複雑になります。 <label>が正しく機能しないようにする<h*>タグについて何かありますか?

答えて

40

ブロックレベルの要素(h4)は、インライン要素内では使用できず、未定義の動作が発生します。代わりにspan要素を使用できます。

+2

ブロックレベルの要素は 'span'でも許されません。 – Kornel

+0

それは実際問題を解決します。 display:spanのスタイルを設定すると、見出しと同じように見えるようになります(そのスパンのCSSエントリはh4 + display:blockと同じです)。ラベル機能も機能します。 – SaltyNuts

+6

私は彼が "ラベルの代わりに"ではなく "h4sの代わりに"を意味すると思う – Quentin

27

inline elements(他のラベル要素を除く)のみがラベル要素内に表示されます。

<!ELEMENT LABEL - - (%inline;)* -(LABEL) -- form field label text --> 

からhttp://www.w3.org/TR/html4/interact/forms.html#h-17.9.1

とにかくそこに見出しをつけても意味がありません。

+2

+1。見出しはラベルに意味をなさない。 – You

+4

どうしたらいいのか、何が意味をなさないのか話してはいけません。私のプロジェクトの文脈がどういうわけか、あなたはそれを判断する理由が分かりません。 – SaltyNuts

+8

あなたやあなたのプロジェクトの判断ではなく、タグのセマンティクスに関するものです。意味的には、 'label'要素は1つのコントロールの見出しに似ています。だから既に見出しです。別の見出しを入れることは冗長です。さらに、「H *」の見出しは多くのものを指し示すことができますが、ラベルでは、ラベルが既に指し示しているものと同じものを指し示すことしか許されません。それは、画像のキャプションとして見出しを使用するようなものです。それは意味論的に意味をなさない。しかし、見た目については、視覚的に 'H *'タグに似ている 'span'タグを使用すると意味があります。 – brentonstrine

14

HTMLの<label>要素はインラインレベルの要素であり、ブロックレベル要素を含むことはできません。

これはおそらくあなたの問題の原因です。あるいは、あなたのラベルを<h4>の中に入れることができます:

<tr><td><input type="checkbox" name="entiries[]" value="i1" id="i1"></td> 
<td>< 
<h4><label for="i1">Some stuff</label></h4>more stuff.. 
<h4><label for="i1">Some stuff</label></h4>more stuff.. 
</label> 
</td></tr> 
+6

あなたは、特定のチェックボックスに複数のラベルを付けることはできません。ありがとう! – SaltyNuts