Saf semantik HTML / CSS çözümü
Bu, kendi başınıza uygulamak kolaydır, önceden yapılmış bir çözüme gerek yoktur. Ayrıca CSS ile çok kolay görünmediğiniz için size çok şey öğretecek.
Yapman gereken bu:
Onay kutularınızın farklı id
özelliklere sahip olması gerekir . Bu, etiketin -attribute özelliğini <label>
kullanarak a bağlamanızı sağlar for
.
Misal:
<input type="checkbox" id="myCheckbox1" />
<label for="myCheckbox1"><img src="http://someurl" /></label>
Etiketin onay kutusuna eklenmesi tarayıcı davranışını tetikler: Birisi etiketi (veya içindeki resmi) her tıkladığında onay kutusu açılır.
Ardından, örneğin display: none;
üzerine başvurarak onay kutusunu gizlersiniz .
Şimdi tek yapmanız gereken, label::before
sözde öğeniz için istediğiniz stili ayarlamaktır (görsel onay kutusu değiştirme öğeleri olarak kullanılacak):
label::before {
background-image: url(../path/to/unchecked.png);
}
Son zor bir adımda, :checked
onay kutusu işaretlendiğinde görüntüyü değiştirmek için CSS'nin sahte seçicisini kullanırsınız:
:checked + label::before {
background-image: url(../path/to/checked.png);
}
+
( Komşu kardeş seçicisi ) emin yalnızca doğrudan biçimlendirme gizli onay kutusunu takip ettiğini etiketleri değiştirmek yapar.
Her iki görüntüyü bir harita haritasına koyarak background-position
ve görüntüyü değiştirmek yerine yalnızca bir değişiklik uygulayarak bunu optimize edebilirsiniz .
Tabii doğru etiketi konumlandırmak ve uygulamak gerekir display: block;
ve doğru ayarlamak width
ve height
.
Düzenle:
Codepen örnek ve ben bu talimatlara sonra oluşturulan hangi pasajı aynı tekniği kullanmak, ancak bunun yerine işaret kutusu görüntüleri kullanmak yerine, onay kutusu değiştirmeler CSS ile tamamen yapılır oluşturarak, ::before
sahip bir kez kontrol, o etikettecontent: "✓";
. Bazı yuvarlak kenarlıklar ve tatlı geçişler ekleyin ve sonuç gerçekten sevimli!
İşte tekniği gösteren ve onay kutusu için resim gerektirmeyen çalışan bir kod kalemi:
http://codepen.io/anon/pen/wadwpx
Parçacıktaki kod aynı:
ul {
list-style-type: none;
}
li {
display: inline-block;
}
input[type="checkbox"][id^="cb"] {
display: none;
}
label {
border: 1px solid #fff;
padding: 10px;
display: block;
position: relative;
margin: 10px;
cursor: pointer;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
label::before {
background-color: white;
color: white;
content: " ";
display: block;
border-radius: 50%;
border: 1px solid grey;
position: absolute;
top: -5px;
left: -5px;
width: 25px;
height: 25px;
text-align: center;
line-height: 28px;
transition-duration: 0.4s;
transform: scale(0);
}
label img {
height: 100px;
width: 100px;
transition-duration: 0.2s;
transform-origin: 50% 50%;
}
:checked+label {
border-color: #ddd;
}
:checked+label::before {
content: "✓";
background-color: grey;
transform: scale(1);
}
:checked+label img {
transform: scale(0.9);
box-shadow: 0 0 5px #333;
z-index: -1;
}
<ul>
<li><input type="checkbox" id="cb1" />
<label for="cb1"><img src="https://picsum.photos/seed/1/100" /></label>
</li>
<li><input type="checkbox" id="cb2" />
<label for="cb2"><img src="https://picsum.photos/seed/2/100" /></label>
</li>
<li><input type="checkbox" id="cb3" />
<label for="cb3"><img src="https://picsum.photos/seed/3/100" /></label>
</li>
<li><input type="checkbox" id="cb4" />
<label for="cb4"><img src="https://picsum.photos/seed/4/100" /></label>
</li>
</ul>