Möglich, a:after/before-Pseudoelemente als Teil des Links anklickbar zu machen?

Lesezeit: 3 Minuten

Benutzer-Avatar
Katzenkul

Pseudoelemente a:after a:before erlauben Ihnen, Text hinzuzufügen, der Teil des Links zu sein scheint. Ich kann jedoch keine Möglichkeit finden, diesen Teil als Teil des Links anklickbar zu machen.

Zum Beispiel zeigt das folgende CSS die URL danach:

  a:after {
     content: " (" attr(href) ")";
  }

…aber es wird nicht anklickbar sein.

Kann das jemand umgehen, ohne den zugrunde liegenden HTML-Code zu ändern?

Bearbeiten: Ich verwende Chrome 13.0.782.107. Es stellt sich heraus, es ist ein Insekt. (Dank Sean)

  • Es sieht so aus, als hätten Sie einen Fehler in Chrome entdeckt (ich habe meine Antwort mit einer Problemumgehung aktualisiert).

    – Sean Vieira

    15. August 2011 um 18:21 Uhr

Benutzer-Avatar
Sean Vieira

Es sieht so aus, als hätten Sie einen Fehler in dem von Ihnen verwendeten Browser entdeckt.

Basierend auf spezsollte der generierte Inhalt als a behandelt werden Kind des Elements, für das es generiert wird. Ich habe eine erstellt JSFiddle um dies auszuprobieren, und der generierte Text ist für mich in den meisten Browsern verlinkt (Chrome 13 ist die einzige Ausnahme). Ich vermute, dass Sie in Chrome testen. Dies ist ein reproduzierbarer Fehler.

Die Problemumgehung besteht darin, einfach eine Hintergrundfarbe für Ihre Links anzugeben … wenn Sie diese für alle Links verwenden möchten, ein Hintergrundbild zu deklarieren (aber kein Bild anzugeben oder eine transparente .gif – oder wie gerade erwähnt, Einstellung opacity zu etwas anderem als 1) funktioniert.

  • Verwenden <a class="plain" im generierten Inhalt und Hinzufügen A.plain:before { content: "" } würde eine unendliche Rekursion vermeiden.

    – Paulmelnikow

    15. August 2011 um 17:30 Uhr

  • @noa — :after … aber gute Idee 🙂 Leider wird HTML in den generierten Inhalten nicht unterstützt (Tests hier: jsfiddle.net/zx6Wv)

    – Sean Vieira

    15. August 2011 um 17:48 Uhr

  • Sehr schön. Guter Fang! Ich nehme an, das bedeutet, dass ich einen Fehler gegen Chrome 13 einreichen sollte (es sei denn, Sie möchten).

    – Katskul

    15. August 2011 um 18:32 Uhr


  • @Catskul – gerade eins eingereicht 🙂 Trotzdem danke! (Link ist code.google.com/p/chromium/issues/detail?id=92917 wenn Sie es ergänzen möchten).

    – Sean Vieira

    15. August 2011 um 18:36 Uhr


  • Es ist endlich in Chrome 71 behoben, zu diesem Zeitpunkt Beta!

    – Martin Krung

    8. November 2018 um 12:17 Uhr


Benutzer-Avatar
Tom

Ich habe das gleiche Problem gehabt und anscheinend, wenn ich eingestellt habe

a { vertical-align: middle; }

(also auf dem Link selbst, nicht das Pseudo-Element), es funktioniert.

Ich hoffe, jemand hat eine bessere Lösung als diese, aber für den Fall, dass dies nicht der Fall ist, habe ich mir diese schreckliche / beschissene / hackige Lösung ausgedacht:

  a {
     margin-right: 40px;
  }

  a:after {
     content: " (" attr(href) ")";
     margin-left: -40px;
  }

Benutzer-Avatar
Knu

Fügen Sie dies einfach zu Ihrem CSS hinzu:

a {padding-right:Ypx} /* Y = size of your url in pixels */

Wenn die Größe der URL variiert, müssen Sie Javascript verwenden, um sie abzurufen.

Wenn Sie einen Link auf Wrapper haben, können Sie Pseudo-Elemente per Einstellung anklickbar machen pointer-events Zu keiner.

a:after {
 pointer-events: none;
}

Um eine Änderung des Dokumentbaums zu vermeiden, könnten Sie einen JavaScript-Klick-Handler für verwenden a:after.

Bearbeiten: Das funktioniert nicht, weil dem DOM keine Pseudoelemente hinzugefügt werden.

Benutzer-Avatar
Dan Kurz

Die :before und :after fügen Inhalt hinzu Vor und nach der Selektor. In CSS gibt es keinen Selektor, mit dem Sie den Inhalt eines Tags abrufen und bearbeiten können. Die einzige Möglichkeit, dies zu erreichen, wäre mit jQuery oder Javascript, um den HTML-Code tatsächlich zu bearbeiten.

  • Nicht ganz richtig … siehe w3.org/TR/CSS2/generate.html#propdef-content für die Spezifikationen, wie CSS in der Lage sein sollte, mit den Attributen von HTML-Tags zu interagieren, die als Subjekt des betreffenden Selektors definiert sind.

    – Sean Vieira

    15. August 2011 um 17:26 Uhr

  • “jQuery oder Javascript” das ist ein neuer Trend jQuery ≠ Javascript?

    – Knü

    15. August 2011 um 17:50 Uhr

1168720cookie-checkMöglich, a:after/before-Pseudoelemente als Teil des Links anklickbar zu machen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy