2012-07-16 12 views
14

Diciamo questo markup:display prima lettera solo

<div id="socialMedia"> 
    <a class="Twitter">Twitter</a> 
</div> 

quello che voglio è solo per essere visibile la prima lettera del testo (in questo caso, solo un T)

(in realtà ho vinto 't finiscono per usarlo, ma io sono curioso di questo; sicuramente può essere utile in seguito)

Quindi questo è stato il mio tentativo:

#socialMedia .Twitter{ 
    display:none; 
} 
#socialMedia .Twitter:first-letter { 
    display: block !important; 
} 

Sono stato in grado di verificare che non lo raggiungerà. La domanda è: perché? e c'è qualche soluzione?

operativa -Editazione-

Siamo alla ricerca di soluzioni in grado IE = + versione 7/8 ..

Salut

+0

BTW, è questo pseudo-elemento o pseudo-classe o? –

+0

Quello che stai facendo è come nascondere un elemento genitore e provare a mostrare uno dei suoi figli, non funzionerà perché lo stile del genitore lo sostituisce. Anche l'elemento genitore deve essere un elemento a livello di blocco perché funzioni. Come un tag 'div' o' p', o 'display: block' sul tag' a'. – sachleen

+0

colore @sachleen, forse?(trasparente VS personalizzato) –

risposta

17

Modifica: Disclaimer: questo non funziona in base ai commenti. Si prega di non utilizzare così com'è senza averlo verificato per le proprie esigenze.

Se si controlla la specifica per lo pseudo-elemento :first-letter, si noterà il seguente:

L': first-letter pseudo-elemento necessario selezionare la prima lettera della prima riga di un blocco , se non è preceduto da nessun altro contenuto (come immagini o tabelle in linea) sulla sua linea.

La parola importante qui è "blocco".

Si sta tentando di utilizzare lo pseudoelemento su un tag <a/> con classe Twitter. Per impostazione predefinita, i tag di ancoraggio sono elementi in linea (non elementi a livello di blocco).

Per la vostra data di marcatura, una soluzione al vostro problema sarebbe per lo stile l'ancora in questo modo:

.Twitter { 
    display:block; 
    visibility:hidden; 
} 

.Twitter:first-letter { 
    visibility:visible; 
}​ 

io non sono sicuro di quello che si sta andando per, ma che è abbastanza buono per fini sperimentali . Guarda qui una demo: http://jsfiddle.net/H7jhF/.

+1

Hey Grazie per aver scritto, questo non funziona per me nell'ultima versione di FF ... –

+0

Hm, è strano. La specifica su 'visibility: hidden' dice" i discendenti dell'elemento saranno visibili se hanno 'visibility: visible' "(http://www.w3.org/TR/CSS2/visufx.html#visibility). Mi guarderò un po 'intorno e vedrò se capisco il problema. Tieni presente che questa è ancora una soluzione sciocca perché la proprietà 'visibility' non elimina la casella dell'elemento. –

+0

Questo funziona in chrome, ma non IE9 per qualche motivo. Microsoft dice che è supportato, ma non sembra essere il caso. http://msdn.microsoft.com/en-us/library/hh781508(v=vs.85).aspx –

2

Quello che stai facendo è come nascondere un elemento genitore e cercando di mostrare uno dei suoi figli, non funzionerà perché lo stile del genitore lo sostituisce. Anche l'elemento genitore deve essere un elemento a livello di blocco perché funzioni. Come un tag div o p o display: block; sul tag a.

ecco qualcosa usando il colore:

HTML

<div id="socialMedia"> 
    <a class="Twitter">Twitter</a> 
</div> 

CSS

body { 
    background-color:#FFF; 
} 
.Twitter{ 
    display: block; 
    color:#FFF; 
} 
.Twitter:first-letter { 
    color:#000; 
} 
+1

Stavo per pubblicare qualcosa in questo senso. Ecco una piccola demo: http://jsfiddle.net/H7jhF/. Inoltre, per OP, controlla le specifiche quando pensi che qualcosa che dovrebbe funzionare non (in questo caso: http://www.w3.org/TR/CSS2/selector.html#first-letter) –

+0

@tjeezy ah sì, stavo guardando la visibilità ma non ha funzionato, ma non avevo ancora capito il blocco di visualizzazione. Dovresti postare una risposta in quanto è migliore della mia. – sachleen

+0

La tua risposta è stata buona, però. Oh bene, ho presentato uno pure. –

1

Perché non basta usare JavaScript e dividere la stringa in un array e utilizzare il primo elemento dell'array. O charAt()

+0

Sì, volevo sapere se è possibile con i CSS senza larghezza e roba .. –

9

provare qualcosa di simile:

.Twitter { 
 
    font-size: 0; 
 
} 
 

 
.Twitter:first-letter { 
 
    font-size: 12px; 
 
}
<div class="Twitter">Twitter</div>

Forse questa non è la soluzione migliore, ma funziona.

+0

Ho usato il jsfiddle di @ tjeezy (http://jsfiddle.net/H7jhF/89/) e l'ho modificato per usare la dimensione del font come proposto e anche per impostarlo su un blocco in linea in modo che un altro elemento possa fluire dopo di esso. In breve preferisco usare la dimensione del carattere. – Robert

2

Le risposte puramente CSS utilizzano visibilità e trucchi dei colori per nascondere le lettere rimanenti, ma sono ancora presenti e influenzano il layout. Potrebbe causare problemi di layout, ad es. se desideri far galleggiare l'elemento e mettere qualcosa al suo fianco.

Ho trovato un modo divertente per farlo senza elementi nascosti. Il trucco consiste nel ridurre quasi completamente l'intera parola e poi far esplodere solo la prima lettera. È un po 'come se OP cercasse di fare, ma funziona perché funziona su uno spettro continuo piuttosto che su display: none che spegne tutto ciò che è al suo interno. (Tipo di un analogo> situazione digitale.)

Demo

HTML:

<div>Ding Dong</div> and other stuff 

CSS:

div { 
    font-size: 0.0000016px; 
    float: left; 
} 

div::first-letter { 
    color: red; 
    font-size: 10000000em; 
} 

Risultato:

http://i.imgur.com/3WeNZ55.png

2

sparare il contenuto fuori dalla pagina e mostrare la lettera con contenuti dinamici:


.twitter{ 
    text-indent:-9999px; 
    display:block; 
    position:relative; 
} 
.twitter:before,.twitter::before{ 
    content:"T"; 
    position:absolute; 
    width:10px; 
    height:15px; 
    z-index:100; 
    text-indent:9999px; 
} 

in gioco in questo violino:
http://jsfiddle.net/jalbertbowdenii/H7jhF/67/

1

Ecco quello che faccio:

.Twitter{ 
     display:block; 
     width:1ch; 
     overflow:hidden; 
     white-space: nowrap; 
    } 
Problemi correlati