Risposta a partire dal 2019:
Il modo migliore (in realtà l'unico modo *) per simulare un evento di clic effettivo utilizzando solo CSS (anziché passare con il mouse su un elemento o renderlo attivo, in cui non si dispone di mouseUp ) è utilizzare l'hack della casella di controllo. Funziona collegando label
a un <input type="checkbox">
elemento tramite l' for=""
attributo dell'etichetta .
Questa funzione ha un ampio supporto per il browser (la :checked
pseudo-classe è IE9 +).
Applicare lo stesso valore di un <input>
attributo 's ID e di un accompagnamento <label>
' s for=""
attributi, e si può dire al browser di ri-stile l'etichetta sul click con il :checked
pseudo-classe, grazie al fatto che cliccando un'etichetta controllerà e deselezionare la "associato" <input type="checkbox">
.
* È possibile simulare un evento "selezionato" tramite la :active
o :focus
pseudo-classe in IE7 + (ad esempio per un pulsante che di solito 50px
larga, è possibile modificare la larghezza, mentre active
: #btnControl:active { width: 75px; }
), ma quelli non sono vere "click" eventi. Sono "attivi" per tutto il tempo in cui l'elemento è selezionato (ad esempio Tabbing con la tastiera), che è un po 'diverso da un evento di clic reale, che attiva un'azione - in genere - mouseUp
.
Demo di base dell'hack della casella di controllo (la struttura del codice di base per quello che stai chiedendo):
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>
Qui ho posizionato l'etichetta subito dopo l'input nel mio markup. Questo è così che posso usare il selettore di fratelli adiacenti (il +tasto) per selezionare solo l'etichetta che segue immediatamente la mia #demo
casella di controllo. Poiché la :checked
pseudo-classe si applica alla casella di controllo, #demo:checked + label
verrà applicata solo quando la casella di controllo è selezionata.
Demo per ridimensionare un'immagine al clic, che è quello che stai chiedendo:
#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>
Detto questo, ci sono alcune cattive notizie. Poiché un'etichetta può essere associata a un solo controllo modulo alla volta , ciò significa che non è possibile rilasciare un pulsante all'interno dei <label></label>
tag e chiamarlo un giorno. Tuttavia, siamo in grado di utilizzare alcuni CSS per rendere il look dell'etichetta e si comportano abbastanza vicino al modo in cui un pulsante HTML aspetto e il comportamento.
Demo per imitare un effetto clic sul pulsante, sopra e oltre ciò che stai chiedendo:
#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>
La maggior parte dei CSS in questa demo è solo per lo stile dell'elemento etichetta. Se in realtà non hai bisogno di un pulsante e qualsiasi vecchio elemento sarà sufficiente, puoi rimuovere quasi tutti gli stili in questa demo, simile alla mia seconda demo sopra.
Noterai anche che ho una proprietà con prefisso lì dentro -moz-outline-radius
. Qualche tempo fa, Mozilla ha aggiunto questa straordinaria proprietà non specifica a Firefox, ma la gente di WebKit ha deciso di non aggiungerla , sfortunatamente. Quindi considera quella linea di CSS solo un miglioramento progressivo per le persone che usano Firefox.
:active
funziona mentre il mouse è abbassato. A seconda di cosa stai cercando di fare, potresti essere in grado di farlo funzionare utilizzando la pseudo-classe CSS4:target
.