2019 itibarıyla cevap:
Yalnızca bir CSS kullanarak gerçek bir tıklama etkinliğini simüle etmenin en iyi yolu (aslında tek yol *) (yalnızca bir öğenin üzerine gelmek veya bir öğeyi aktif hale getirmek değil, mouseUp'ın olmadığı yerlerde ) onay kutusu kesmek kullanmaktır. Etiketin özelliği aracılığıyla label
bir <input type="checkbox">
öğeye a ekleyerek çalışır for=""
.
Bu özellik geniş tarayıcı desteğine sahiptir ( :checked
sözde sınıf IE9 + 'dır).
Bir aynı değeri uygula <input>
'ın kimlik özelliği ve beraberindeki <label>
' ın for=""
özniteliği ve birlikte tıklamasında etiket yeniden stiline tarayıcı söyleyebilir :checked
sözde sınıfı, aslında sayesinde bir etiket tıklayarak kontrol edeceğini ve işaretini kaldırın "ilişkili" <input type="checkbox">
.
* Sen yoluyla bir "seçilmiş" olayı simüle edebilirsiniz :active
veya :focus
(normalde var bir düğme için örneğin IE7 + içinde sözde sınıfı 50px
, sen ise onun genişliğini değiştirebilirsiniz geniş active
: #btnControl:active { width: 75px; }
), ancak bu doğru değildir olayları "tıklama". Öğenin seçildiği süre boyunca (örneğin Tab, klavyenizle bing yaparak) "canlı" olurlar; bu, gerçek bir tıklama etkinliğinden biraz farklıdır ve bu da - genellikle - bir eylem başlatır mouseUp
.
Onay kutusu kesmek için temel demo (sorduğunuz şey için temel kod yapısı):
label {
display: block;
background: lightgrey;
width: 100px;
height: 100px;
}
#demo:checked + label {
background: blue;
color: white;
}
<input type="checkbox" id="demo"/>
<label for="demo">I'm a square. Click me.</label>
Burada, işaretlememdeki girişten hemen sonra etiketi konumlandırdım. Bu, yalnızca onay kutumu hemen takip eden etiketi seçmek için bitişik kardeş seçiciyi ( +anahtar) kullanabilmem için geçerlidir #demo
. Yana :checked
sözde sınıfı onay kutusunun için geçerlidir, #demo:checked + label
onay kutusu işaretlendiğinde geçerli olur.
Tıklamadaki bir görüntüyü yeniden boyutlandırma demosu, sorduğunuz şey budur:
#btnControl {
display: none;
}
#btnControl:checked + label > img {
width: 70px;
height: 74px;
}
<input type="checkbox" id="btnControl"/>
<label class="btn" for="btnControl"><img src="http://placekitten.com/200/140" id="btnLeft" /></label>
Bununla birlikte , bazı kötü haberler var. Bir etiket aynı anda yalnızca bir form denetimiyle ilişkilendirilebildiğinden , <label></label>
etiketlerin içine bir düğmeyi bırakıp bir gün diyemeyeceğiniz anlamına gelir . Ancak, biz olabilir etiket görünmesi ve nasıl bir HTML düğme görünümünü ve çalışma oldukça yakın davranmaya bazı CSS kullanabilirsiniz.
İstediğiniz şeyin üstünde ve ötesinde bir düğme tıklama efektini taklit etmek için demo:
#btnControl {
display: none;
}
.btn {
width: 60px;
height: 20px;
background: silver;
border-radius: 5px;
padding: 1px 3px;
box-shadow: 1px 1px 1px #000;
display: block;
text-align: center;
background-image: linear-gradient(to bottom, #f4f5f5, #dfdddd);
font-family: arial;
font-size: 12px;
line-height:20px;
}
.btn:hover {
background-image: linear-gradient(to bottom, #c3e3fa, #a5defb);
}
.btn:active {
margin-left: 1px 1px 0;
box-shadow: -1px -1px 1px #000;
outline: 1px solid black;
-moz-outline-radius: 5px;
background-image: linear-gradient(to top, #f4f5f5, #dfdddd);
}
#btnControl:checked + label {
width: 70px;
height: 74px;
line-height: 74px;
}
<input type="checkbox" id="btnControl"/>
<label class="btn" for="btnControl">Click me!</label>
Bu demoda yer alan CSS'nin çoğu yalnızca etiket öğesini biçimlendirmek içindir. Aslında bir düğmeye ihtiyacınız yoksa ve herhangi bir eski öğe yeterli olursa, bu demodaki yukarıdaki tüm demolara benzer neredeyse tüm stilleri kaldırabilirsiniz.
Ayrıca orada önceden eklenmiş bir mülküm olduğunu fark edeceksiniz -moz-outline-radius
. Bir süre önce, Mozilla bu muhteşem spesifik olmayan özelliği Firefox'a ekledi, ancak WebKit'teki insanlar maalesef eklemeyeceklerine karar verdiler . Bu yüzden bu CSS hattının Firefox kullanan insanlar için sadece aşamalı bir gelişme olduğunu düşünün.
:active
fare kapalıyken çalışır. Ne yapmaya çalıştığınıza bağlı olarak, CSS4 sözde sınıfını kullanarak çalışmasını sağlayabilirsiniz:target
.