クリック可能なラベル付きのチェックボックスを作成するにはどうすればよいですか?


回答:


1915

方法1:ラベルタグをラップする

チェックボックスをlabelタグで囲みます。

<label><input type="checkbox" name="checkbox" value="value">Text</label>

方法2:for属性を使用する

for属性を使用(チェックボックスに一致id):

<input type="checkbox" name="checkbox" id="checkbox_id" value="value">
<label for="checkbox_id">Text</label>

:IDはページ上で一意である必要があります!

説明

他の回答では言及されていないため、ラベルには最大1つの入力を含めることができ、for属性を省略できます。また、ラベルはその入力用であると見なされます。

w3.orgからの抜粋(私の強調):

[for属性]は、定義されているラベルを別のコントロールに明示的に関連付けます。存在する場合、この属性の値は、同じドキュメント内の他のコントロールのid属性の値と同じである必要があります。存在しない場合、定義されるラベルは要素のコンテンツに関連付けられます。

ラベルを別のコントロールに暗黙的に関連付けるには、コントロール要素がLABEL要素のコンテンツ内にある必要があります。この場合、LABELに含めることができる制御エレメントは1つだけです。ラベル自体は、関連するコントロールの前または後に配置できます。

この方法を使用すると、いくつかの利点がありforます。

  • idすべてのチェックボックスにを割り当てる必要はありません(すばらしい!)。

  • で追加の属性を使用する必要はありません<label>

  • 入力のクリック可能な領域はラベルのクリック可能な領域でもあるので、チェックボックスを制御できるクリックする場所は2つありません。<input>実際のラベルテキストがどれだけ離れていても、CSSの種類に関係なく、1つだけです。それに適用します。

CSSを使用したデモ:

label {
 border:1px solid #ccc;
 padding:10px;
 margin:0 0 10px;
 display:block; 
}

label:hover {
 background:#eee;
 cursor:pointer;
}
<label><input type="checkbox" />Option 1</label>
<label><input type="checkbox" />Option 2</label>
<label><input type="checkbox" />Option 3</label>


14
大好きですが、もう一度編集してください。これはチェックボックスにのみ有効です。他の入力をラベルでラップすることを勧めないでください。グリッドシステムが壊れ、モバイルの応答が難しくなるためです
Max

1
@Johnが残したコメントを誰かが説明できる場合は、私にはまったく意味がありませんので、お願いします。
Wesley Murch、2015

16
@Johnは、ブートストラップ専用のマークアップガイドです。フレームワークを使用していない場合、または別のフレームワークを使用している場合は、完全に問題ありません。返信いただきありがとうございます。
Wesley Murch、2015

3
@ジョン。リンクするページで、ブートストラップの例はすべてラベル付きのチェックボックスをラップしますが、あなたが示すように警告はまったく表示されません。おそらく最新のブートストラップとは関係がありません。
user2144406

2
今日私が学んだように、方法1と方法2を混在させないでください。チェックボックスをラベルで囲み、forを含める場合、ラベルをクリックしてもチェックボックスはトリガーされません。
BBlake 16

50

ラベルが入力に関連付けられていることを確認してください。

<fieldset>
  <legend>What metasyntactic variables do you like?</legend>

  <input type="checkbox" name="foo" value="bar" id="foo_bar">
  <label for="foo_bar">Bar</label>

  <input type="checkbox" name="foo" value="baz" id="foo_baz">
  <label for="foo_baz">Baz</label>
</fieldset>

1
2つのチェックボックスに同じ名前を付け、値を変えているので混乱しています。それはわざとですか?
LarsH 2013

2
@LarsH —はい、チェックボックスグループを作成する方法です。
クエンティン

ありがとう。私はw3.org/wiki/HTML/Elements/input/checkboxを見ていましたが、その点で役に立ちませんでした。
LarsH 2013

2
PHPを使用すると、$ _ POST ['foo']は常に2つの値のいずれかを常に最大にしますか?両方をチェックしても。チェックボックスグループとは何ですか?
jeromej 14年

2
@JeromeJ:phpで正しく処理するには、名前に角括弧を追加する必要があります(例:)<input type="checkbox" name="foo[]" value="bar" ...>。これにより、すべてのチェックボックス(この名前を持つ)の値を含む配列が得られます。たとえば、$_POST['foo'][0]そうである可能性がbarあり$_POST['foo'][1]ますbaz(両方がチェックされている場合)。
Levite 2015年

11

また、CSS疑似要素を使用して、チェックボックスのすべての値属性から(それぞれ)ラベルを選択して表示することもできます。
編集:これは、Webkitと点滅ベースのブラウザー(Chrome(ium)、Safari、Opera ...)でのみ機能するため、ほとんどのモバイルブラウザーで機能します。ここではFirefoxまたはIEはサポートされていません。
これは、アプリにwebkit / blinkを埋め込む場合にのみ役立ちます。

<input type="checkbox" value="My checkbox label value" />
<style>
[type=checkbox]:after {
    content: attr(value);
    margin: -3px 15px;
    vertical-align: top;
    white-space:nowrap;
    display: inline-block;
}
</style>

すべての疑似要素ラベルはクリック可能です。

デモ:http://codepen.io/mrmoje/pen/oteLl、+ それの要旨


本当です。GeckoとTridentとGeckoはこれが好きではないようです。これはWebkitとBlinkでのみ機能します。回答を更新します
mrmoje '24

3
反対投票。それは可能ですが、それは悪い方法です-多くのブラウザーでは機能せず、アクセシビリティーには良くありません。
James Billingham、

<ラベル>の間のマークアップには直接的な関連がないので、脇の互換性の問題、このソリューションは、トップの答えとしてセマンティックとしてではなく、<入力>
deadboy

「それはWebkit / Blinkで動作します」は、(stackoverflow.com/questions/2587669/…)を使用するバグのようなにおいがするので、いつでも動作を停止する可能性があります。
Xenos、2016

7
<label for="vehicle">Type of Vehicle:</label>
<input type="checkbox" id="vehicle" name="vehicle" value="Bike" />

3
<label for="myInputID">myLabel</label><input type="checkbox" id="myInputID" name="myInputID />

1
一部の読者を混乱させる可能性があるため、name属性の値をforid属性に存在する値とは異なるものに変更する必要があります。これら2つは関連していますが、関連してnameいないためです(含める必要はありますが、含める必要があります) 。
Dzhuneyt 2013

3

それも動作します:

<form>
    <label for="male"><input type="checkbox" name="male" id="male" />Male</label><br />
    <label for="female"><input type="checkbox" name="female" id="female" />Female</label>
</form>

タグ内には入力要素が1つしかないため、例ではforおよびid属性を省略できますlabel
Dzhuneyt 2013

2

これはあなたを助けるはずです:W3Schools-ラベル

<form>
  <label for="male">Male</label>
  <input type="radio" name="sex" id="male" />
  <br />
  <label for="female">Female</label>
  <input type="radio" name="sex" id="female" />
</form>


0

label要素とfor属性を使用して、チェックボックスに関連付けます。

<label for="myCheckbox">Some checkbox</label> <input type="checkbox" id="myCheckbox" />



-7

これを使って

<input type="checkbox" name="checkbox" id="checkbox_id" value="value">
<label for="checkbox_id" id="checkbox_lbl">Text</label>


$("#checkbox_lbl").click(function(){ 
    if($("#checkbox_id").is(':checked'))
        $("#checkbox_id").removAttr('checked');
    else
       $("#checkbox_id").attr('checked');
    });
});

9
これを行うためにJavaScriptを使用する必要はありません。HTMLに組み込まれています。
Lasse Bunk、2015年

4
@LasseBunk(JavaScriptだけの場合)が機能するには、jQueryライブラリ全体が必要です。誰かがAngular 2ソリューションを考え出せるかどうか見てみましょう。
ローレント、2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.