2014-12-09 3 views
5

Il mio obiettivo è: verificare se l'attributo titolo non è vuoto; se non lo è, dovrebbe essere aggiunto il valore di questo attributo titolo più un trattino. D'altra parte, se l'attributo title è vuoto, allora "-" non dovrebbe essere aggiunto affatto.Verifica attributo titolo CSS se non è vuoto e aggiungi contenuto

Ecco il mio codice CSS corrente:

div:hover::before{content:attr(title):not(attr(title)="") " - ";} 

ma non funziona come previsto.

Ad esempio:

<div title="My username">some text</div> 

dovrebbe visualizzare il seguente al passaggio del mouse:

mio username - un testo

Ma se:

<div title="">some text</div> 

o (Nessun titolo sulla div):

<div>some text</div> 

poi il display al passaggio del mouse dovrebbe essere:

un testo

E 'possibile risolvere il problema?

risposta

5

Per eseguire questa operazione è possibile utilizzare selettori di attributo in combinazione con la funzione attr(). La funzione attr() semplicemente acquisisce il valore di un determinato attributo - non supporta alcuna istruzione condizionale stessa.

Si noti che io uso [title=""] e :not([title]) per tenere conto sia degli attributi del titolo vuoto sia della mancanza di un attributo titolo del tutto. È possibile omettere la parte :not() includendo [title] nella prima regola, ma non funziona in Internet E- scusate, volevo dire che non funziona in Chrome.

div:hover::before { 
 
    content: attr(title) " - "; 
 
} 
 

 
div[title=""]:hover::before, div:not([title]):hover::before { 
 
    content: none; 
 
}
<div title="My username">some text</div> 
 
<div title="">some text</div> 
 
<div>some text</div>

+1

Questo è un uso molto cool del CSS, ma penso che JavaScript è una soluzione più appropriata; perché questo va oltre lo scopo dello styling e penso che sia meglio tenerli separati. –

+0

@deraad: Non vedo come questo va oltre lo scopo dello stile. ': hover' esiste fin dagli albori del CSS, i selettori di attributi sono quasi altrettanto lunghi e il contenuto generato è stato progettato specificamente per situazioni come questa, tra le altre. Non c'è motivo per cui gli autori dovrebbero evitare di usarli insieme. Forse se l'attributo 'title' fosse cambiato in' data-username' o qualcosa di più appropriato per il markup ... – BoltClock

+1

Vero, hai ragione nel fatto che puoi usarlo in questo modo. Il mio commento si riferisce più a tenere le cose nei posti giusti, ad esempio quando un progetto cresce e hai molti eventi come clic, hover, mouseout, ecc che non puoi soddisfare solo con i CSS. può diventare disorganizzato e confuso per identificare se il comportamento dell'evento è scritto in javascript o CSS, specialmente se si lavora in una squadra. È qualcosa che ho incontrato in passato, quindi, solo la mia opinione, ovviamente, è comunque ancora valida. –