2013-05-07 12 views
7

Sto provando a progettare un modulo senza utilizzare JavaScript o JQuery. Include una serie di checkbox. L'idea è di mostrare una certa gif dopo la casella di controllo se è deselezionata. Altrimenti, non visualizzare nulla dopo di esso. Questo è il codice che ho:forma di checkbox in forma css con tag selezionati e dopo

input[type=checkbox]::after 
{ 
    content: url(images/unchecked_after.gif); 
    position:relative; 
    left:15px; 
    z-index:100; 
} 
input[type=checkbox]:checked::after 
{ 
    content:""; 
} 

Funziona in Chrome ma non sembra funzionare in Firefox o IE. Che c'è?

+3

'input' è un elemento con un modello di contenuto vuoto e poiché gli elementi pseudo' :: after' sono resi come nodi figlio dell'elemento a cui sono applicati, c'è un conflitto. Alcuni browser consentono comunque di farlo, altri no. Usa invece il combinatore fratello adiacente per formattare un elemento che hai inserito dopo l'elemento di input. http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#adjacent-sibling-combinators – CBroe

+0

Grazie, questo lo spiega. Ma non riesco ancora a farlo funzionare. Ad esempio, se inserisco un tag "p" dopo la casella di controllo, il seguente selettore CSS non funziona: input [type = checkbox]: checked + p: dopo – user1316401

risposta

5

La soluzione cross-browser che ha funzionato per me era quella di includere un'etichetta vuota (con classe "checkbox_label") dopo l'input della casella di controllo e quindi lo stile IT anziché la casella di controllo.

input[type=checkbox] + label:after 
{ 
    content: url(images/unchecked_after.gif); 
    position:relative; 
    left:0px; 
    top:1px; 
    z-index:100; 
} 

input[type=checkbox]:checked + label:after 
{ 
    content:""; 
} 

.checkbox_label 
{ 
    height:0px; 
    width:0px; 
    display:inline-block; 
    float:left; 
    position:relative; 
    left:20px; 
    z-index:100; 
} 
+0

ehi grazie per la risposta puoi fornire qualche riferimento o cosa è + operatore chiamato ...? in questo .. contesto –

+0

[element1 + element2 selector] (http://www.w3schools.com/cssref/sel_element_pluss.asp) seleziona l'elemento2 che va subito dopo element1. – ZitRo

3

Apparentemente, l'uso degli pseudo-elementi ::before e ::after non è supportato dalle specifiche. La tua domanda ha una risposta here. Spero possa aiutare!

+0

Sto testando in Firefox 20 e IE10, che è il motivo per cui ho pensato che stavo facendo qualcosa di sbagliato ... ma cosa? – user1316401

+0

Sto provando su jsfiddle con firefox e posso riprodurre il tuo errore. Fammi vedere se riesco a trovare una soluzione. – CoderOfHonor

+0

Penso di aver trovato il problema. L'ho modificato nella mia risposta. – CoderOfHonor