Nascondi il testo usando CSS


306

Ho un tag nel mio html in questo modo:

<h1>My Website Title Here</h1>

Usando css voglio sostituire il testo con il mio logo attuale. Ho il logo lì senza problemi ridimensionando il tag e inserendo un'immagine di sfondo tramite CSS. Tuttavia, non riesco a capire come liberarmi del testo. L'ho già visto prima fondamentalmente spingendo il testo fuori dallo schermo. Il problema è che non ricordo dove l'ho visto.


3
ci sono un sacco di risposte non aggiornati qui: considerare upvoting più recente risposta stackoverflow.com/a/27769435/2586761 esporlo
PTIM

Risposte:


426

Questo è un modo:

h1 {
    text-indent: -9999px;                 /* sends the text off-screen */
    background-image: url(/the_img.png);  /* shows image */
    height: 100px;                        /* be sure to set height & width */
    width: 600px;
    white-space: nowrap;            /* because only the first line is indented */
}

h1 a {
    outline: none;  /* prevents dotted line when link is active */
}

Ecco un altro modo per nascondere il testo evitando l'enorme scatola da 9999 pixel che il browser creerà:

h1 {
    background-image: url(/the_img.png);  /* shows image */
    height: 100px;                        /* be sure to set height & width */
    width:  600px;

    /* Hide the text. */
    text-indent: 100%;
    white-space: nowrap;
    overflow: hidden;
}

5
i titoli lunghi avranno un problema con questo metodo poiché solo il testo prima del
ritorno a capo automatico

3
Se si utilizza questo metodo, è necessario aggiungere "overflow: nascosto" per evitare che la casella di selezione strana si spari a sinistra (specialmente con i collegamenti)
Willoller,

4
Se ci sono collegamenti in elementi con rientro di testo negativo, assicurati di specificare anche "outline: none", altrimenti otterrai un bordo tratteggiato che esce dalla parte sinistra dello schermo.
Nickf

9
Preferisco usare "text-indent: -9999px;" solo per assicurarsi che il testo vada davvero molto lontano dallo schermo. Un po 'di paranoia difensiva.
Andy Ford,

4
Aggiungi anche 'white-space: nowrap' solo per essere al sicuro se il tuo testo è lungo poiché solo la prima riga è rientrata.
Andrew Moore,

177

Perché non usare semplicemente:

h1 { color: transparent; }

16
Perchè no? Perché a Google non piace.
alekwisnia

32
Convalida (CSS 2.1): 'trasparente' non è un valore valido per la proprietà 'color'.
HasanG,

15
Il testo diventerà visibile se l'utente lo seleziona (STRG + A ecc.) - Sembra molto poco professionale! Saluti Christopher
Christopher Stock,

24
@ HasanGürsoy e futuri googler- "CSS3 estende il valore del colore per includere la parola chiave 'trasparente' ...."
ABMagil

11
color: transparent;funziona insieme user-select: none;, a meno che non si ignori il colore.
Stan-Z,

162

Aggiungi font-size: 0;al tuo elemento che contiene testo.

.hidden { font-size: 0; }
  font-size: 0; hides text. <span class="hidden"> You can't see me :) </span>


1
Questo è esattamente ciò di cui avevo bisogno. Volevo nascondere ciò che era in un div, ma mostrare ciò che era nelle campate del bambino (per nascondere la punteggiatura tra di loro).
mskfisher,

2
Questo sembra il metodo più logico (leggi: Almeno bizzarro) - tuttavia, mi chiedo quanto sia supportato in vari browser? (Posso confermare che funziona su Firefox.)
Brian Lacy,

1
Mostra ancora un testo molto piccolo in un numero maggiore di browser rispetto a IE7, questa non è una soluzione cross-browser completa.
macguru2000,

8
Ho testato il trucco di {font-size: 0} in Chrome 27, Firefox 17, Safari per Windows 5.1.7, Opera 12.12, IE8, IE9, IE10 - funziona in tutti quei browser. Questo trucco è meglio se non riesci a impostare l'immagine di sfondo sull'elemento stesso (ad es. Perché stai usando un'immagine sprite compatta e l'icona richiesta non ha abbastanza spazio vuoto attorno ad essa) e devi usare lo pseudo-selettore , ad es. elemento: after per visualizzare l'immagine di sfondo.
beluga,

1
Questo cambia anche le dimensioni del div, quindi non lo consiglio.
Stephan Bijzitter,

30

Il modo più cross-browser amichevole è scrivere l'HTML come

<h1><span>Website Title</span></h1>

quindi utilizza CSS per nascondere l'intervallo e sostituire l'immagine

h1 {background:url(/nicetitle.png);}
h1 span {display:none;}

Se puoi usare CSS2, allora ci sono alcuni modi migliori di usare la contentproprietà, ma sfortunatamente il web non è ancora al 100%.


Ma assicurati di impostare anche l'attributo di larghezza e altezza su quello dell'immagine e assicurati che "padding" e "margin" siano impostati perché i browser hanno idee diverse su quanto padding / margin deve avere un tag H1.

Lo svantaggio qui è se le immagini sono disattivate o se viene visualizzato un bot compatibile con CSS, il titolo non sarà visibile.
Willoller,

13
Il testo importante all'interno del display nessuno probabilmente mancherà ai robot dei motori di ricerca e agli screen reader. Usa invece il rientro del testo.
dylanfm,

1
Questo non farà nulla, OP potrebbe anche rimuovere il testo nel titolo. Gli screen reader non fanno nulla con nessuno schermo ..
Idris Dopico Peña

23

Nascondere il testo tenendo presente l'accessibilità:

Oltre alle altre risposte, ecco un altro approccio utile per nascondere il testo.

Questo metodo nasconde efficacemente il testo, ma gli consente di rimanere visibile per gli screen reader. Questa è un'opzione da considerare se l'accessibilità è un problema.

.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0,0,0,0);
    border: 0;
}

Vale la pena sottolineare che questa classe è attualmente utilizzata in Bootstrap 3 .


Se sei interessato a leggere sull'accessibilità:



Questo funziona bene per l'aggiunta di un elemento è solo screen reader; tuttavia, non funziona con la domanda originale in cui un'immagine deve essere visualizzata da un'immagine di sfondo specificata in css.
vossad01

@ vossad01 - Se non riesci ad aggiungere un altro elemento e sei bloccato con un singolo elemento (come nel caso che hai menzionato), una buona soluzione sarebbe quella di utilizzare uno pseudo-elemento ... Inoltre, ho pubblicato questo risposta 6 anni dopo la domanda iniziale, e la mia risposta era destinata a un pubblico più ampio poiché questa domanda sembra essere popolare.
Josh Crozier,


14

Vedi mezzoblue per un bel riassunto di ogni tecnica, con punti di forza e di debolezza, oltre ad esempio html e css.


10

Tante soluzioni complicate.

Il più semplice è semplicemente usare:

color:rgba(0,0,0,0)

Grande! Funziona con qualsiasi colore di sfondo. Grazie.
Sandeep Amarnath,

8

puoi semplicemente nascondere il testo aggiungendo questo attributo:

font size: 0 !important;

Vale anche la pena verificare se la !importantclausola è effettivamente necessaria nel tuo caso. Nel mio caso ha funzionato bene anche senza di essa.
Eerik Sven Puudist,

6

Non utilizzare { display:none; }Rende inaccessibile il contenuto. Vuoi che gli screen reader vedano i tuoi contenuti e li modifichino visivamente sostituendo il testo con un'immagine (come un logo). Usando text-indent: -999px;o un metodo simile, il testo è ancora lì - solo non visivamente lì. Usa display:nonee il testo è sparito.


5
<style>
body {
     visibility:hidden
}
body .moz-signature p{
    visibility:visible
}
</style>

Quanto sopra funziona bene anche negli ultimi Thunderbird.


Nota che l'uso di questo metodo rende il testo non leggibile per la maggior parte degli screen reader - vedi stackoverflow.com/questions/1755656/…
Jordan Lev

5

puoi usare la background-imageproprietà css e z-indexassicurarti che l'immagine rimanga davanti al testo.


Esempio? Non vedo come si z-indexapplica al background-image.
Martynas Jusevičius,

5

Perché non usi:

<li><a href="#">bla</a></li>

a {
    opacity: 0.0;
    font-size: 1px;
}

li {
    background-image: url('test.jpg');
}

Se non hai alcun elemento span o div, funziona perfettamente per i link.


4

La risposta è creare un intervallo con la proprietà

{display:none;}

Puoi trovare un esempio in questo sito


1
Alcuni dei voti negativi hanno probabilmente a che fare con problemi di accessibilità - un punto valido. Ma nel mio caso, sto estraendo un menu da un servizio di menu di ristorante in un sito Web tramite il loro servizio web. Il proprietario del ristorante non vuole che i prezzi vengano visualizzati (ma lo stesso servizio viene utilizzato per stampare i menu attuali). È una situazione in cui non si vogliono affatto i prezzi sul sito. È bene conoscere tutti i possibili approcci.
Marvo,

4

Questa è in realtà un'area matura per la discussione, con molte tecniche sottili disponibili. È importante selezionare / sviluppare una tecnica che soddisfi le tue esigenze, tra cui: screen reader, combinazioni di immagini / css / scripting on / off, seo, ecc.

Ecco alcune buone risorse per iniziare lungo la strada delle tecniche di sostituzione delle immagini standardista:

http://faq.css-standards.org/Image_Replacement

http://www.alistapart.com/articles/fir

http://veerle.duoh.com/blog/links/#l-10


3

Utilizzare il tag condizione per browser diversi e utilizzando css è necessario posizionare height:0pxe width:0pxanche posizionare font-size:0px.


3

Se il punto è semplicemente rendere invisibile il testo all'interno dell'elemento, impostare l'attributo color su 0 opacity usando un valore rgba come color:rgba(0,0,0,0);clean e simple.


3

Non ricordo dove l'ho raccolto, ma lo uso da anni con successo.

  =hide-text()
    font: 0/0 a
    text-shadow: none
    color: transparent

Il mio mixin è in serbo, ma puoi usarlo come preferisci. Per buona misura in genere tengo una .hiddenclasse da qualche parte nel mio progetto da allegare agli elementi per evitare duplicazioni.


Penso di aver letto da qualche parte che questa versione è da preferire perché un rientro di testo negativo farà sì che il browser visualizzi una casella lunga da 10000 px (o qualunque esempio tu usi). La modifica del carattere come in questo esempio non farà sì che il browser crei una casella di grandi dimensioni che tenta di eseguire il rendering.
Gambo,

2
h1 {
    text-indent: -3000px; 
    line-height: 3000px;
    background-image: url(/LOGO.png);
    height: 100px; width:  600px;  /* height and width are a must */

}

3
Perché c'è un'altezza di linea?
SandRock,

2

Prova questo codice per abbreviare e nascondere il testo

.hidetxt{

  width: 346px;
  display: table-caption;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: no-drop;
  
}

.hidetxt:hover { 

  visibility: hidden;
  
}
<div class="hidetxt">
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when</p>
</div>

o per nascondere l'uso nella tua classe css .hidetxt { visibility: hidden; }


2

riqualificare il contenuto con il CSS

 h1{  font-size: 0px;}
 h1:after {
    content: "new content";
    font-size: 15px;
  }

1

Di solito uso:

span.hide
{
  position:fixed;
  right:-5000px;
}

1

Se riusciamo a modificare il markup, la vita può essere più semplice, basta rimuovere il testo ed essere felici. Ma a volte il markup è stato inserito dal codice JS o semplicemente non ci è permesso modificarlo affatto, peccato che il CSS sia diventato l'unica arma a nostra disposizione.

Non è possibile posizionare un <span>testo a capo e nascondere l'intero tag. A proposito, alcuni browser non nascondono solo gli elementi, display:nonema disabilitano anche i componenti all'interno.

Sia font-size:0pxe color:transparentpuò essere buone soluzioni, ma alcuni browser non li capire. Non possiamo contare su di loro.

Suggerisco:

h1 {
  background-image: url(/LOGO.png);  /* Our image */
  text-indent: -3000px;  /* Send text out of viewable area */
  height: 100px; width: 600px;  /* height and width are a must, agree */
  overflow:hidden;  /* make sure our size is respected */
}

L'uso overflow:hiddenrafforza la nostra larghezza e altezza. Alcuni browser (non li chiameranno ... IE ) potrebbero leggere larghezza e altezza come min-widthe min-height. Voglio impedire che la casella venga ingrandita.


1

Usare il valore zero per font-sizee line-heightnell'elemento fa il trucco per me:

<style>
    .text {
        display: block;
        width: 200px;
        height: 200px;

        font-size: 0;
        line-height: 0;
    }
</style>

<span class="text">
    Invisible Text
</span>

1

Per nascondere il testo da HTML, usa la proprietà text-indent in CSS

.classname {
 text-indent: -9999px;
 white-space: nowrap; 
}

/ * per il testo dinamico è necessario aggiungere spazi bianchi, in modo che i CSS applicati non disturbino. nowrap significa che il testo non passerà mai alla riga successiva, il testo continua sulla stessa riga fino a quando non <br>viene rilevato un tag


1

Uno dei modi in cui ottengo questo è usare :beforeo :after. Ho usato questo approccio per diversi anni, e funziona particolarmente bene con le icone vettoriali glifi.

h1 {
    position: relative;
    text-indent: -9999px;                 /* sends the text off-screen */
    }
h1:before {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 1;
    display: block;
    width: 600px;
    height: 100px;
    content: ' ';
    background: transparent url(/the_img.png) 0 0 no-repeat;
    }

0

Questo ha funzionato per me con span (validazione knockout).

<span class="validationMessage">This field is required.</span>

.validationMessage {
    background-image: url('images/exclamation.png');
    background-repeat: no-repeat;
    margin-left: 5px;
    width: 16px;
    height: 16px;
    vertical-align: top;

    /* Hide the text. */
    display: inline-block;
    overflow: hidden;
    font-size: 0px;
}

0

Una soluzione che funziona per me:

HTML

<div class="website_title"><span>My Website Title Here</span></div>

CSS

.website_title {
    background-image: url('../images/home.png');
    background-repeat: no-repeat;
    height: 18px;
    width: 16px;
}

.website_title span {
    visibility: hidden;
}

-1

La risposta migliore funziona per il testo breve, ma se il testo si avvolge appare solo nell'immagine.

Un modo per farlo è catturare errori con un gestore jquery. Prova a caricare un'immagine, se non riesce genera un errore.

$('#logo img').error(function(){
    $('#logo').html('<h1>My Website Title Here</h1>');
});

Vedi CODICE CAMPIONE


-1
h1{
   background:url("../images/logo.png") no-repeat;
   height:180px;
   width:200px;
   display:inline-block;
   font-size:0px !important;
   text-intent:-9999999px !important;
   color:transparent !important;
 }

3
Mentre questo codice può rispondere alla domanda, fornendo un contesto aggiuntivo riguardo al perché e / o al modo in cui questo codice risponde alla domanda migliora il suo valore a lungo termine.
Benjamin W.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.