替代他們,我改變了你的標記,使用形式。 JavaScript是沒有必要的(除非你需要支持IE8以上的瀏覽器)
示例代碼:http://codepen.io/anon/pen/Ixira
每一個複選框包括它的標籤,它是透明的:所以當你點擊你實際點擊複選框的顏色。所選顏色的不同樣式通過:checked
僞類應用。
標記
<form>
<fieldset>
<ul>
<li>
<input type="checkbox" name="y" />
<label>Gray</label>
</li>
<li>
<input type="checkbox" name="r" />
<label>Red</label>
</li>
<li>
<input type="checkbox" name="g" />
<label>Green</label>
</li>
<li>
<input type="checkbox" name="b" />
<label>Blue</label>
</li>
</ul>
</fieldset>
</form>
CSS:
ul {
list-style: none;
}
li {
position: relative;
height: 40px;
width: 40px;
margin: 5px 0;
}
input {
position: absolute;
z-index: 1;
width: 100%;
height: 100%;
opacity: .01;
cursor: pointer;
}
label {
display: block;
width: 100%;
height: 100%;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
text-indent: 100%;
overflow: hidden;
}
[name="y"] + label { background: gray; }
[name="r"] + label { background: red; }
[name="g"] + label { background: green; }
[name="b"] + label { background: blue; }
input:checked + label {
border: 5px #fff double;
}
注意:您也可以得到同樣的行爲,如果你display: none
您的複選框和標籤上使用一個for
屬性(在該情況也使用標籤上的cursor: pointer
以獲得更好的可用性)—這裏的這種方法的一個例子:http://codepen.io/anon/pen/wGBvq
這是一個壞主意。爲什麼需要隱藏?無論你想要做什麼,有一個更好的解決方案,而不是使用隱藏的複選框 – DnR
嗯,我不知道..我認爲這是一個好主意。你有什麼建議嗎? –
你允許多個選定的顏色? – DnR