Wie verstecke ich Ankertext, ohne den Anker auszublenden?

76

Angenommen, ich habe das folgende Markup:

<li><a href="somehwere">Link text</a></li>

Wenn ich ein Hintergrundbild auf einem Tag habe, wie würde ich den Linktext nur mit CSS ausblenden? Schriftgröße: 0 scheint auf dem a-Tag gut zu funktionieren, abgesehen von der kleinen ie7-Show.

Vielen Dank

  • Vielen Dank für Ihre Hilfe. Bisher habe ich die Zeilenhöhe verwendet: 0; und Schriftgröße: 0; und Texteinzug: -999px; aber es zeigt immer noch einige Blobs in Safari, irgendwelche Ideen?
geoffs3310
quelle

Antworten:

193

Versuchen

 a{
    line-height: 0; 
    font-size: 0;
    color: transparent; 
 }


Das color: transparent;behandelt ein Problem mit Webkit-Browsern, die immer noch 1 Pixel des Textes anzeigen.

Loktar
quelle
1
Ich habe festgestellt, dass dies in Chrome 15.0.874.120 nicht funktioniert. Müssen auch Farbe hinzufügen: transparent;
gebrochener Indexfinger
@brokenindexfinger komisch ... aber Farbe hinzufügen: transparent funktioniert dann? Wenn ja, können Sie meine Antwort bearbeiten und hinzufügen, oder ich kann.
Loktar
1
Hallo Loktar, dies sind die Informationen, die ich in meinem Blog zu implementieren versucht habe und die ich endlich erhalten habe. Vielen Dank für Ihre Hilfe.
umarali1981
1
Danke für diese Info. Diese Informationen haben dazu beigetragen, die Barrierefreiheit in dem Projekt einzurichten, an dem ich arbeite
Loren Shaw,
1
Verdammt gute Lösung. Das Einrücken von Text kann schwierig sein, insbesondere wenn es sich um mehrere ineinander gewickelte Elemente handelt und mehrere Positionen auf diesen Elementen festgelegt sind. Gute Antwort.
agon024
19

Wenn Sie den Text in einen Bereich einschließen und die visibility:hidden;Sichtbarkeit ausblenden, wird das Element ausgeblendet, es nimmt jedoch immer noch denselben Platz auf der Seite ein (umgekehrt: Keine entfernt es auch von der Seite).

verschrottete Cola
quelle
Danke scrappedcola, das ist eine großartige Lösung!
Klewis
Dies ist die richtige Lösung, aber ich habe display: none verwendet, um auch alle Größen zu entfernen.
christopher_h
16
a { text-indent:-9999px; }

Neigt dazu, aus meiner Erfahrung heraus gut zu funktionieren.

Hux
quelle
Ah nett, daran habe ich nicht einmal gedacht, ich benutze das die ganze Zeit für Header mit Bildern.
Loktar
8
Möglicherweise erhalten Sie einen Leistungseinbruch von Google, weil Sie den Browser anweisen, für jedes Element, das ebenfalls angewendet wird, ein Feld mit einer Breite von 9999 Pixel zu zeichnen. Persönlich ist es besser, eine Anzeige anzuwenden: keine, Sichtbarkeit: versteckt, Schriftgröße: 0 oder etwas in diesem Sinne, um die "Möglichkeit" zu vermeiden, dass Google Ihr über erweitertes Layoutschema nicht einhält. Ich codiere auch so, aber ich habe aufgehört. source - stackoverflow.com/questions/8971152/…
klewis
1
Dies bricht auch outlineauf Firefox. Das Umrissrechteck beginnt links vom Browser-Ansichtsfenster.
Mariusz Pawelski
6

Minitipp:

Ich hatte folgendes Szenario:

<a href="/page/">My link text
:after
</a>

Ich habe den Text mit der Schriftgröße 0 ausgeblendet, damit ich ein FontAwesome-Symbol dafür verwenden kann. Dies funktionierte unter Chrome 36, Firefox 31 und IE9 +.

Ich würde Farbe nicht empfehlen: transparent, da der Text noch vorhanden und auswählbar ist. Mit der Zeilenhöhe: 0px konnte ich: after nicht verwenden. Vielleicht, weil mein Element ein Inline-Block war.

Sichtbarkeit: versteckt : Ich durfte: after nicht verwenden.

Texteinzug: -9999px; : Auch das Element: after wurde verschoben

com2ghz
quelle
1
Ja, ich hatte auch ein Problem mit Pseudo-Elementen und das hat sich darum gekümmert. Danke!
Ari Gold
4
text-indent :-9999px 

Funktioniert einwandfrei.

Ajey
quelle
3

Eine andere Option ist das Ausblenden basierend auf der Bootstraps-Klasse "sr-only". Wenn Sie den Text in einen Bereich mit der Klasse "sr-only" einschließen, wird der Text nicht angezeigt, aber Bildschirmleser haben weiterhin Zugriff darauf. Sie hätten also:

<li><a href="somehwere"><span class="sr-only">Link text</span></a></li>

Wenn Sie kein Bootstrap verwenden, behalten Sie das oben Gesagte bei, fügen Sie aber auch das folgende CSS hinzu, um die "sr-only" -Klasse zu definieren:

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

Ich habe die beste Antwort von Loktar befolgt und es hat sehr gut funktioniert. Das einzige Problem, das ich hatte, war mit Chrome (meine aktuelle Version ist 27.0.1453.94 m). Das Problem, das ich hatte, war, dass Chrome anscheinend weiß, dass der Text im Link nicht sichtbar ist, und dass der Link etwas niedriger ist, als er sein sollte (so etwas wie Rand oben, aber es ist nicht möglich, ihn zu ändern ). Dies geschieht auf alle Arten, auf die wir den Text unsichtbar machen: - Zeilenhöhe: 0; - Schriftgröße: 0; - Texteinzug: -9999px;

Ich konnte dieses Problem beheben, indem ich die vertikale Ausrichtung des Links wie folgt anpasste:

vertical-align: 25px;

Ich hoffe das ist hilfreich

Simo
quelle
1

Sie müssen nur font-size: 0;zu Ihrem Element hinzufügen , das Text enthält. Das funktioniert gut.

Prajila VP
quelle
1

Sie können ein Bild in :: vor dem Pseudoelement einfügen und die gleichen Abmessungen wie für das Bild festlegen + Überlauf hinzufügen: versteckt, wie:

li a::before{
  content:url('img');
  width:20px;
  height:10px
}

a {
  overflow:hidden;
  width:20px;
  height:10px
}
elementChaosu
quelle
-1

Ich konnte dieses Problem beheben, indem ich die Schriftgröße auf 0 stellte .

Sangeetha Dharmishtan
quelle
-6

Wie wäre es mit display: none;

Das verbirgt alles.

Webmaster des Universums
quelle