Text mit CSS ausblenden

306

Ich habe ein Tag in meinem HTML wie folgt:

<h1>My Website Title Here</h1>

Mit CSS möchte ich den Text durch mein eigentliches Logo ersetzen. Ich habe das Logo dort kein Problem durch Ändern der Größe des Tags und Einfügen eines Hintergrundbildes über CSS. Ich kann jedoch nicht herausfinden, wie ich den Text loswerden kann. Ich habe es schon einmal gesehen, indem ich den Text vom Bildschirm gestoßen habe. Das Problem ist, ich kann mich nicht erinnern, wo ich es gesehen habe.

Micah
quelle
3
Hier gibt es viele veraltete Antworten: Erwägen Sie, die neuere Antwort stackoverflow.com/a/27769435/2586761 zu verbessern , um sie verfügbar zu machen
ptim

Antworten:

426

Dies ist eine Möglichkeit:

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 */
}

Hier ist eine andere Möglichkeit , den Text auszublenden und gleichzeitig die riesige 9999-Pixel-Box zu vermeiden, die der Browser erstellt:

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;
}
Nicholaides
quelle
5
Lange Titel haben ein Problem mit dieser Methode, da nur der Text vor dem Zeilenumbruch eingerückt wird und die W3C-Spezifikation keine Situation für einen negativen Einzug angibt, sodass dies zu unvorhersehbaren Ergebnissen führen kann
Chris Farmiloe
3
Wenn Sie diese Methode verwenden, sollten Sie "Überlauf: versteckt" hinzufügen, um zu verhindern, dass ein seltsames Auswahlfeld nach links abschießt (insbesondere mit Links)
Willoller
4
Wenn Sie Verknüpfungen in Elementen mit dem negativen Texteinzug haben, stellen Sie sicher, dass Sie auch "Gliederung: Keine" angeben. Andernfalls wird links vom Bildschirm ein gepunkteter Rand angezeigt.
Nickf
9
Ich bevorzuge 'text-indent: -9999px;' Nur um sicherzustellen, dass der Text wirklich weit vom Bildschirm entfernt ist. Ein bisschen defensive Paranoia.
Andy Ford
4
Fügen Sie außerdem "Leerzeichen: Nowrap" hinzu, um auf der sicheren Seite zu sein, wenn Ihr Text lang ist und nur die erste Zeile eingerückt ist.
Andrew Moore
177

Warum nicht einfach verwenden:

h1 { color: transparent; }
Nesono
quelle
16
Warum nicht? Weil Google es nicht mag.
Alekwisnia
32
Validierung (CSS 2.1): 'transparent' ist kein gültiger Wert für die Eigenschaft 'color'.
HasanG
15
Der Text wird sichtbar, wenn der Benutzer ihn auswählt (STRG + A usw.) - Dies sieht sehr unprofessionell aus! Grüße Christopher
Christopher Stock
24
@ HasanGürsoy und zukünftige Googler- "CSS3 erweitert den Farbwert um das Schlüsselwort 'transparent' ...."
ABMagil
11
color: transparent;funktioniert mit user-select: none;, es sei denn, Sie überschreiben die Farbe.
Stan-Z
162

Fügen font-size: 0;Sie einfach zu Ihrem Element hinzu, das Text enthält.

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

valk
quelle
1
Genau das brauchte ich. Ich wollte verbergen, was in einem Div war, aber zeigen, was in den Kinderfeldern war (um die Interpunktion zwischen ihnen zu verbergen).
mskfisher
2
Dies scheint die logischste (sprich: am wenigsten bizarre) Methode zu sein. Ich frage mich jedoch, wie gut sie in verschiedenen Browsern unterstützt wird. (Ich kann bestätigen, dass es in Firefox funktioniert.)
Brian Lacy
1
Der Text wird in mehr Browsern als nur in IE7 immer noch sehr klein angezeigt. Dies ist keine vollständige browserübergreifende Lösung.
Macguru2000
8
Ich habe den Trick {font-size: 0} in Chrome 27, Firefox 17, Safari für Windows 5.1.7, Opera 12.12, IE8, IE9, IE10 getestet - er funktioniert in all diesen Browsern. Dieser Trick ist am besten geeignet, wenn Sie das Hintergrundbild nicht für das Element selbst festlegen können (z. B. weil Sie ein dicht gepacktes Sprite-Bild verwenden und das erforderliche Symbol nicht genügend leere Auffüllungen enthält) und den Pseudo-Selektor verwenden müssen , zB Element: Nachher, um das Hintergrundbild anzuzeigen.
Beluga
1
Dies ändert auch die Größe des Div, daher empfehle ich dies nicht.
Stephan Bijzitter
30

Die browserübergreifendste Methode ist das Schreiben von HTML als

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

Verwenden Sie dann CSS, um die Spanne auszublenden und das Bild zu ersetzen

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

Wenn Sie CSS2 verwenden können, gibt es einige bessere Möglichkeiten, die contentEigenschaft zu verwenden, aber leider ist das Web noch nicht zu 100% vorhanden.

Chris Farmiloe
quelle
Stellen Sie jedoch auch das Attribut width und height auf das des Bildes ein - und stellen Sie sicher, dass "padding" und "margin" festgelegt sind, da Browser unterschiedliche Vorstellungen darüber haben, wie viel padding / margin ein H1-Tag haben muss.
Der Nachteil hierbei ist, dass der Titel nicht sichtbar ist, wenn Bilder deaktiviert sind oder wenn ein CSS-fähiger Bot angezeigt wird.
Willoller
13
Der wichtige Text in der Anzeige wird wahrscheinlich von Suchmaschinen-Bots und Screenreadern übersehen. Verwenden Sie stattdessen Text-Einzug.
Dylanfm
1
Dies wird nichts bewirken, OP könnte genauso gut den Text im Titel entfernen. Bildschirmleser machen nichts mit Anzeige keine ..
Idris Dopico Peña
23

Ausblenden von Text unter Berücksichtigung der Barrierefreiheit:

Neben den anderen Antworten finden Sie hier einen weiteren nützlichen Ansatz zum Ausblenden von Text.

Diese Methode verbirgt den Text effektiv, lässt ihn jedoch für Bildschirmleser sichtbar. Dies ist eine Option, die Sie in Betracht ziehen sollten, wenn die Barrierefreiheit ein Problem darstellt.

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

Es sei darauf hingewiesen, dass diese Klasse derzeit in Bootstrap 3 verwendet wird .


Wenn Sie über Barrierefreiheit lesen möchten:

Josh Crozier
quelle
Dies funktioniert gut, wenn ein Element nur als Bildschirmleser hinzugefügt wird. Es funktioniert jedoch nicht mit der ursprünglichen Frage, bei der ein Bild durch ein in CSS angegebenes Hintergrundbild angezeigt werden soll.
Vossad01
@ vossad01 - Wenn Sie kein weiteres Element hinzufügen können und an einem einzelnen Element hängen bleiben (wie in dem von Ihnen erwähnten Fall), besteht eine gute Problemumgehung darin, ein Pseudoelement zu verwenden . Außerdem habe ich dies gepostet Antwort 6 Jahre nach der ersten Frage, und meine Antwort sollte ein breiteres Publikum ansprechen, da diese Frage beliebt zu sein scheint.
Josh Crozier
14

In Mezzoblue finden Sie eine schöne Zusammenfassung der einzelnen Techniken mit Stärken und Schwächen sowie Beispiel für HTML und CSS.

darasd
quelle
10

So viele komplizierte Lösungen.

Am einfachsten ist es einfach zu benutzen:

color:rgba(0,0,0,0)
Seebrücke
quelle
Großartig! Dies funktioniert für jede Hintergrundfarbe. Vielen Dank.
Sandeep Amarnath
8

Sie können Ihren Text einfach ausblenden, indem Sie dieses Attribut hinzufügen:

font size: 0 !important;
Omid Ahmadyani
quelle
Es lohnt sich auch zu prüfen, ob die !importantKlausel in Ihrem Fall tatsächlich benötigt wird. In meinem Fall hat es auch ohne gut funktioniert.
Eerik Sven Puudist
6

Nicht verwenden { display:none; }Es macht den Inhalt unzugänglich. Sie möchten, dass Screenreader Ihre Inhalte sehen und visuell gestalten, indem Sie den Text durch ein Bild (wie ein Logo) ersetzen. Mit text-indent: -999px;einer ähnlichen Methode ist der Text immer noch vorhanden - nur nicht visuell. Verwenden Sie display:none, und der Text ist weg.

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

Das obige funktioniert auch im neuesten Thunderbird gut.

Kamalesh
quelle
Beachten Sie, dass die Verwendung dieser Methode den Text für die meisten Bildschirmleser nicht lesbar macht - siehe stackoverflow.com/questions/1755656/…
Jordan Lev
5

Sie können die CSS- background-imageEigenschaft verwenden und z-indexsicherstellen, dass das Bild vor dem Text bleibt.

Jobo
quelle
Beispiel? Ich sehe nicht, wie das z-indexgilt background-image.
Martynas Jusevičius
5

Warum benutzt du nicht:

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

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

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

Wenn Sie kein span- oder div-Element haben, funktioniert es perfekt für Links.

Hans
quelle
4

Die Antwort besteht darin, eine Spanne mit der Eigenschaft zu erstellen

{display:none;}

Ein Beispiel finden Sie auf dieser Seite

Andrei Krotkov
quelle
1
Einige der Abstimmungen haben wahrscheinlich mit Zugänglichkeitsbedenken zu tun - ein gültiger Punkt. In meinem Fall ziehe ich jedoch ein Menü von einem Restaurantmenüservice über dessen Webdienst auf eine Website. Der Restaurantbesitzer möchte nicht, dass die Preise angezeigt werden (aber derselbe Service wird zum Drucken der tatsächlichen Menüs verwendet.) Dies ist eine Situation, in der die Preise auf der Website überhaupt nicht angezeigt werden sollen. Es ist gut, alle möglichen Ansätze zu kennen.
Marvo
4

Dies ist tatsächlich ein Bereich, der zur Diskussion reif ist und in dem viele subtile Techniken zur Verfügung stehen. Es ist wichtig, dass Sie eine Technik auswählen / entwickeln, die Ihren Anforderungen entspricht, einschließlich: Bildschirmleseprogramme, Bilder / CSS / Scripting-Ein / Aus-Kombinationen, SEO usw.

Im Folgenden finden Sie einige gute Ressourcen für den Einstieg in die Standardista-Bildersetzungstechniken:

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

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

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

Willoller
quelle
3

Verwenden Sie das Bedingungs-Tag für einen anderen Browser und verwenden Sie CSS, das Sie platzieren müssen, height:0pxund width:0pxSie müssen auch platzieren font-size:0px.

Kedar
quelle
3

Wenn es nur darum geht, den Text innerhalb des Elements unsichtbar zu machen, setzen Sie das Farbattribut mit einem rgba-Wert wie color:rgba(0,0,0,0);sauber und einfach auf 0 Deckkraft .

Cafe Coder
quelle
3

Ich erinnere mich nicht, wo ich das aufgenommen habe, aber ich benutze es seit Ewigkeiten erfolgreich.

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

Mein Mixin ist in Sass, aber Sie können es verwenden, wie Sie es für richtig halten. Im Allgemeinen behalte ich eine .hiddenKlasse irgendwo in meinem Projekt, um sie an Elemente anzuhängen, um Doppelarbeit zu vermeiden.

Es ist frisch gemacht
quelle
Ich glaube, ich habe irgendwo gelesen, dass diese Version bevorzugt wird, weil ein negativer Texteinzug dazu führt, dass der Browser eine 10000px (oder welches Beispiel auch immer Sie verwenden) lange Box rendert. Wenn Sie die Schriftart wie in diesem Beispiel ändern, erstellt der Browser keine große Box, die er zu rendern versucht.
Gambo
2
h1 {
    text-indent: -3000px; 
    line-height: 3000px;
    background-image: url(/LOGO.png);
    height: 100px; width:  600px;  /* height and width are a must */

}
vencedor
quelle
3
Warum gibt es eine Zeilenhöhe?
SandRock
2

Versuchen Sie diesen Code, um Text zu kürzen und auszublenden

.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>

oder um die Verwendung in Ihrer CSS-Klasse zu verbergen .hidetxt { visibility: hidden; }

omar kerr
quelle
2

Repalce-Inhalte mit dem CSS

 h1{  font-size: 0px;}
 h1:after {
    content: "new content";
    font-size: 15px;
  }
Hossein Hajizadeh
quelle
1

Ich benutze normalerweise:

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

Wenn wir das Markup bearbeiten können, kann das Leben einfacher sein. Entfernen Sie einfach Text und seien Sie glücklich. Aber manchmal wurde das Markup durch JS-Code platziert oder wir dürfen es überhaupt nicht bearbeiten. Schade, dass CSS die einzige Waffe war, die uns zur Verfügung stand.

Wir können <span>den Text nicht umbrechen und das gesamte Tag ausblenden. Übrigens verstecken einige Browser nicht nur Elemente mit, display:nonesondern deaktivieren auch die darin enthaltenen Komponenten.

Beides font-size:0pxund color:transparentvielleicht gute Lösungen, aber einige Browser verstehen sie nicht. Wir können uns nicht auf sie verlassen.

Ich schlage vor:

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 */
}

Die Verwendung overflow:hiddenerzwingt unsere Breite und Höhe. Einige Browser (nennen sie nicht ... IE ) lesen möglicherweise Breite und Höhe als min-widthund min-height. Ich möchte verhindern, dass die Box vergrößert wird.

Francisco
quelle
1

Die Verwendung des Nullwerts für font-sizeund line-heightim Element macht den Trick für mich:

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

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

<span class="text">
    Invisible Text
</span>
HelpNeeder
quelle
1

Um Text vor HTML auszublenden, verwenden Sie die Eigenschaft text-indent in css

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

/ * Für dynamischen Text müssen Sie Leerzeichen hinzufügen, damit Ihr angewendetes CSS nicht stört. nowrap bedeutet, dass Text niemals in die nächste Zeile umgebrochen wird. Der Text wird in derselben Zeile fortgesetzt, bis ein <br>Tag gefunden wird

urmila manjarikar
quelle
1

Ich erreiche dies unter anderem mit :beforeoder :after. Ich habe diesen Ansatz mehrere Jahre lang verwendet und arbeite besonders gut mit Glyphenvektorsymbolen.

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;
    }
Pegues
quelle
0

Dies funktionierte bei mir mit span (Knockout-Validierung).

<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;
}
Karson
quelle
0

Eine Lösung, die für mich funktioniert:

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;
}
Sébastien Gicquel
quelle
-1

Die beste Antwort funktioniert für kurzen Text, aber wenn der Text umbrochen wird, wird er nur im Bild angezeigt.

Eine Möglichkeit besteht darin, Fehler mit einem JQuery-Handler abzufangen. Versuchen Sie, ein Bild zu laden. Wenn dies fehlschlägt, wird ein Fehler ausgegeben.

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

Siehe BEISPIELCODE

Shanimal
quelle
-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;
 }
Harden Rahul
quelle
3
Während dieser Code die Frage möglicherweise beantwortet, verbessert die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie dieser Code die Frage beantwortet, ihren langfristigen Wert.
Benjamin W.