2015-02-20 14 views
6

sto usando un modello come questo per aggiungere le icone tramite contenuti :before o :after pseudo:Visivamente nascondere il contenuto, ma non il contenuto pseudo

<span class="icon icon__example is-content-visually-hidden">assistive text</span> 

Come posso nascondere visivamente il testo di assistenza senza nascondere .icon contenuti pseudo? Né il testo di aiuto né lo spazio che occupa dovrebbero essere visti, in modo tale che queste icone possano essere utilizzate in linea. Quando .is-content-visually-hidden viene disattivato, il testo dovrebbe essere visibile. Ho provato varie tecniche come text-indent: -9999px inutilmente.

This codepen demonstrates the problem.

risposta

12

L'approccio semplice è quello di impostare del testo interno font-size-0 e quindi reimpostare carattere pseudo-elemento alla normalità per renderlo visibile:

.is-content-visually-hidden { 
    font-size: 0; 
} 

.icon__star::before { 
    content: "*"; 
    font-size: 32px; 
} 

Demo:http://codepen.io/anon/pen/zxWQRX

approccio però più flessibile è quello di disporre il testo in un altro arco:

<i class="icon icon__star is-content-visually-hidden"> 
    <span>star</span> 
</i> 

e nascondere solo span.

+0

Proprio sopra. Ho [giocato con esso] (http://codepen.io/ryanve/pen/EaEzEz) e sembra funzionare con unità dure come 'px' e' rem' ma non con quelle dinamiche come 'em' o' calc (1em) 'o con' inherit'. Usare ems o ereditare il 'font-size' genitore sarebbe l'ideale, ma comunque questa soluzione si rompe. – ryanve

+1

Sì, sfortunatamente non è possibile utilizzare em o% o ereditare per ovvi motivi: la dimensione del carattere del genitore è 0. Quindi questo è ovviamente un errore. Effettivamente userei la soluzione in quanto è più completa. – dfsq

+0

Sono d'accordo che lo 'span 'in più è un bel modello. Stiamo cercando di utilizzare il minor numero possibile di elementi. – ryanve

2

È necessario avvolgere il testo interno in un intervallo e nasconderlo per sicurezza. Ma se non siete in grado di farlo, allora si potrebbe provare

font-size: 0 
Problemi correlati