HOME > 開発者向けBLOG > Webデザイン >  checkedセレクタでチェックボックスを表現

Technology Note 開発者向けBLOG

Webデザイン

checkedセレクタでチェックボックスを表現

こんにちは、ゼノフィ渡部です。

checkedセレクタで、画像を使用せずにチェックボックスを表現する方法ご紹介いたします。

ポイントは20行目の「opacity: 0;」と26行目の「input[type=”checkbox”]:checked + label」です。

「opacity: 0;」を使用している理由は、「dispay: none;」ではスマートフォンのアンドロイド携帯では表示されてしまいますので、「opacity: 0;」でチェックボックスを消してます。26行目の「input[type=”checkbox”]:checked + label」の「:checked」はラジオボタンあるいはチェックボックスがチェックされた状態のときにE要素にスタイルを適用するものです。ここではチェックボックスに適用し、「+」の隣接セレクタでラベル要素に対して背景色を指定しています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
ul.checkbox li {
  position: relative;
  float: left;
  margin: 0 10px 0 0;
}
 
ul.checkbox label {
  display: block;
  padding: 10px;
  border: 1px solid #CCC;
  border-radius: 5px; /* 角丸に */
  text-align: center;
}
 
ul.checkbox input[type="checkbox"] {
  position: absolute;
  width: 100%;
  height: 100%;
  cursor: pointer;  
  opacity: 0; /* チェックボックスを消去 */
  tap-highlight-color: rgba(0, 0, 0, 0); /* 将来用 */
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0); /* タップ時のハイライト表示をオフ */
}
 
/* クリックした後の表示 */
ul.checkbox input[type="checkbox"]:checked + label {
  background: gradient(linear, left top, left bottom, color-stop(0%,rgba(254,255,232,1)), color-stop(100%,rgba(214,219,191,1))); /* 将来用 */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(254,255,232,1)), color-stop(100%,rgba(214,219,191,1))); /* Chrome、Safari用 */
}

犬、猫、兎、鳥のそれぞれのチェックボックスのnameとid、ラベル要素のforを同一にします。こうすることにより、複数選択やクリック時などに選択状態を維持することができます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<ul class="checkbox clearfix">
    <li>
        <input type="checkbox" name="dog" id="dog" />
        <label for="dog"></label>
    </li>
    <li>
        <input type="checkbox" name="cat" id="cat" />
        <label for="cat"></label>
    </li>
    <li>
        <input type="checkbox" name="rabbit" id="rabbit" />
        <label for="rabbit"></label>
    </li>
    <li>
        <input type="checkbox" name="bird" id="bird" />
        <label for="bird"></label>
    </li>
</ul>

表示確認はPCではGoogle Chrome14.0、Safari5.1.1、スマートフォンではAndroid2.2、iOS4.1で確認しています。

サンプル

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
ul,li {
  margin: 0;
  padding: 0;
}
 
ul {
  list-style: none;
}
 
ul.checkbox li {
  position: relative;
  float: left;
  margin: 0 10px 0 0;
}
 
ul.checkbox label {
  display: block;
  padding: 10px;
  border: 1px solid #CCC;
  border-radius: 5px; /* 角丸に */
  text-align: center;
}
 
ul.checkbox input[type="checkbox"] {
  position: absolute;
  width: 100%;
  height: 100%;
  cursor: pointer;  
  opacity: 0; /* チェックボックスを消去 */
  tap-highlight-color: rgba(0, 0, 0, 0); /* 将来用 */
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0); /* タップ時のハイライト表示をオフ */
}
 
/* クリックした後の表示 */
ul.checkbox input[type="checkbox"]:checked + label {
  background: gradient(linear, left top, left bottom, color-stop(0%,rgba(254,255,232,1)), color-stop(100%,rgba(214,219,191,1))); /* 将来用 */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(254,255,232,1)), color-stop(100%,rgba(214,219,191,1))); /* Chrome、Safari用 */
}

HTML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<ul class="checkbox clearfix">
    <li>
        <input type="checkbox" name="dog" id="dog" />
        <label for="dog"></label>
    </li>
    <li>
        <input type="checkbox" name="cat" id="cat" />
        <label for="cat"></label>
    </li>
    <li>
        <input type="checkbox" name="rabbit" id="rabbit" />
        <label for="rabbit"></label>
    </li>
    <li>
        <input type="checkbox" name="bird" id="bird" />
        <label for="bird"></label>
    </li>
</ul>

PAGETOP