Update November 2020: Ich denke, die beste mögliche Technik dafür ist Methode 4 in diesem Artikel. Die <div> (oder welches Wrapper-Element auch immer) bleibt semantisch und barrierefrei, während sie über die gesamte Fläche "klickbar" ist. Sie bricht die Textauswahl nicht und respektiert andere "verschachtelte" interaktive Elemente.
Das ist vollkommen gültiges HTML
<a href="http://example.com">
<div>
anything
</div>
</a>
Und denken Sie daran, dass Sie Links display: block; machen können, sodass der gesamte rechteckige Bereich "klickbar" wird. Aber wenn darin eine Menge Inhalt steckt, ist das absolut schrecklich für die Barrierefreiheit, da der gesamte Inhalt als interaktiver Link gelesen wird.
Wenn Sie unbedingt JavaScript verwenden müssen, können Sie einen Link innerhalb des Divs finden und zu seinem href gehen, wenn das Div angeklickt wird. Dies geschieht mit jQuery
$(".myBox").click(function() {
window.location = $(this).find("a").attr("href");
return false;
});
Sucht nach einem Link in einem Div mit der Klasse "myBox". Leitet zum Wert dieses Links um, wenn irgendwo im Div geklickt wird.
Referenz-HTML
<div class="myBox">
blah blah blah.
<a href="http://google.com">link</a>
</div>
Oder Sie könnten ein data-* Attribut auf dem <div data-location="http://place.com"> setzen und so etwas tun:
window.location = $(".myBox").data("location");
funktioniert sehr gut. Danke.
Ich habe ein Jquery-Plugin dafür erstellt. Schauen Sie hier: http://plugins.jquery.com/project/divlinker
Beste Lösung für ein klickbares Div. Vielen Dank.
übrigens @Leandro, der Link funktioniert nicht :(
Sie sind mein Held, das hat perfekt funktioniert!
Danke für das HTML5-Update! Hat mich davor bewahrt, etwas Dummes zu tun.
Chris, danke dafür. Als ich das ausprobiert habe, funktionierte es für einen Hover über leeren Raum im Div, aber nicht für den Link selbst; wenn ich auf den Link selbst klickte, gab es einen 404-Fehler. Irgendwelche Ideen?
Es macht jedes Div mit der Klasse .myBox klickbar, also wenn keins davon einen Link hat, gibt es einen 404, ist das das Problem?
Sehr, sehr gut.
Ich hatte heute ein Vorstellungsgespräch. Als ich gefragt wurde, ob es Blogs gäbe, die ich regelmäßig lese, erwähnte ich css-tricks, und der Interviewer sagte, das sei auch einer seiner Favoriten.
Das höre ich gerne!
Großartige Technik.
Was, wenn Sie andere Links innerhalb des verlinkten Divs haben möchten? Wie behalten Sie diese dann funktionsfähig?
Sie könnten eine Variable für das genaue Element erstellen, das Sie ansprechen möchten. Die Frage ist jedoch, warum Sie das tun sollten? Wenn Sie das DOM kontrollieren könnten, machen Sie es einfach dort. Dies ist eher für den Notfall gedacht, wie z. B. die Verwendung auf Drupal Core Links.
Das ist sehr nützlich für mein aktuelles Projekt
„window.location“ scheint in IE nicht zu funktionieren, wenn Sie RealURL verwenden. Irgendwelche Ideen?
Danke
Christoph
So habe ich es behoben
Ich denke, ich werde das mit Tabellen versuchen... Oder gibt es einen einfacheren Weg?
hat auf dieser Tabelle funktioniert.
wow ... sehr süße Idee :- )
danke
Gute Arbeit
wirklich hilfreich
Es gibt eine reine CSS-Möglichkeit, dies zu tun. Nehmen Sie einfach ein Anker (a) Tag innerhalb des DIV, das auf die gewünschte URL verlinkt. Setzen Sie es dann auf Blockanzeige, relative Positionierung, Links und oben gleich 0, Breite und Höhe auf Vollständigkeit (oder verwenden Sie jQuery, um alle A's innerhalb von DIV's mit den gleichen Abmessungen wie das DIV abzugleichen).
Großartige Lösung! Das hat wirklich geholfen.
Großartig... das hat mir sehr geholfen!
Toller Tipp, aber es sollte eine absolute Positionierung sein, keine relative.
Setzen Sie also das Div auf relative Position, und das "a"-Tag auf
display:block; absolute; top:0; left:0; width: 300px; height:200px;Hören Sie nicht auf die Person über mir.
Sie machen Ihre GESAMTE Seite zu einem Link...
Relativ bedeutet, dass Ihr "top:0; left:0;" relativ zum DIV ist, in dem es enthalten ist, anstatt absolut, was es zum oberen/linken Rand der SEITE macht, nicht nur des DIVs.
Gern geschehen :)
Diese Methode funktioniert übrigens, wird aber je nach anderen Texten/Bildern/usw. im selben Div unterschiedlich interagieren, da es sich um eine Blockanzeige handelt. Stellen Sie also sicher, dass Sie wissen, was Sie wo wollen, bevor Sie dies einrichten.
Die absolute Positionierung ist relativ zum ersten Elternelement mit gesetzter Positionierung. In Dans Beitrag sagte er, er solle die Position des Div auf relativ und die Position des Links auf absolut setzen. Das bedeutet, dass top:0; left:0; sich auf das umschließende Div bezieht, nicht auf den Körper der Seite. Wenn die Position nicht auf dem übergeordneten Div oder einem anderen Vorfahrenelement gesetzt wäre, würde es die ganze Seite einnehmen, wie Sie bemerkten.
Davon abgesehen bin ich mir nicht sicher, ob es besser ist, absolute oder relative Positionierung für die Links zu verwenden, oder ob es überhaupt einen signifikanten Unterschied gibt.
Michaels Antwort ist nicht ganz korrekt, und Malcolm hat gut erklärt, warum.
Ich frage mich auch, ob absolute/relative Positionierung hier überhaupt notwendig ist. Ich habe ganze Divs erfolgreich klickbar gemacht, ohne die Positionierung der Links zu verändern. Hmmm, ich muss das untersuchen.
Ich glaube, Dans Antwort ist korrekt, und leider erfordert das Schweben über Inhalt außerhalb des Text- und Bildflusses eine absolute Positionierung (innerhalb eines relativ positionierten Elternelements).
Michaels Kommentar scheint "absolut" mit "fest" zu verwechseln, was automatisch den Rand des Browser-Chroms für die Positionierung verwendet.
Die Unterstützung für CSS3-Positionierung ist jedoch weniger zuverlässig als das allgegenwärtige jQuery derzeit.
Ja. Ja ja ja. Herrlich. Danke, TerranRich.
Sehr schöne Lösung.
Ich stimme denjenigen zu, die sagen, dass die absolute Position "relativ" zum übergeordneten Container ist, wenn die Position des übergeordneten Containers anders als die Standardposition (statisch) ist.
Auf jeden Fall, sehr, sehr schön, danke.
Das ist großartig. Ich habe seit einiger Zeit nach einer besseren Möglichkeit gesucht, dies zu tun.
Wie kann ich sicherstellen, dass der href-Titel erscheint, wenn ich mit der Maus über das Div fahre und dass die URL in der Statusleiste des von mir verwendeten Browsers angezeigt wird?
Sehr schön, danke :D
fasf
So ist es viel schöner und man muss nicht ein ganzes Div in ein A-Tag einpacken.
Für die Benutzerfreundlichkeit (abhängig davon, wofür Sie es verwenden), denken Sie daran, in Ihrer CSS cursor:pointer hinzuzufügen. Schöner, einfacher Code, danke.
Hallo,
Ich möchte ein ganzes Div klickbar machen, aber mein Div besteht aus einem Nachrichten-Ticker und jeder davon verlinkt auf eine andere URL, funktioniert diese Lösung in diesen Situationen?
Vielen Dank,
Dearthelusion
Wie wäre es mit dem Öffnen in einem neuen Fenster?
ups, das sollte keine direkte Antwort sein =]
Ich bin neu im Scripting in jQuery. Wie setze ich das Ziel auf ein neues Fenster?
Jede Hilfe wäre sehr dankbar!
@l3v1tcl30s
Wie kombiniert man das mit Chris' Code? Ich habe alle möglichen Kombinationen versucht, wie z. B.
aber ich bekomme es nicht zum Laufen
Das funktioniert nicht
Wie Mike fragte, gibt es eine Möglichkeit,
target="_blank"zum ursprünglichen jQuery-Code von Roy hinzuzufügen?Vielen Dank im Voraus.
Das scheint mit IE 8.0 nicht zu funktionieren. Ist das richtig?
wenn das Div mehr als einen Hyperlink enthält. Welche URL liest das jQuery?
Yeh Roy! Danke!
Schnell und leichtgewichtig, danke! Sie können auch einen Haufen Elemente in "a"-Tags einpacken, und das ist semantisches HTML5-Markup. Aber damit hatte ich Probleme in älteren Browsern. Wenn Sie diesen Weg gehen, stellen Sie sicher, dass alle Elemente innerhalb des "a" standardmäßig inline sind (wie ein Span oder P), falls erforderlich können Sie sie in CSS auf display: block ändern.
Chris' Methode scheint etwas sauberer zu sein ;)
Oh, danke! Das ist die Lösung, nach der ich gesucht habe!
Schöne Tricks, danke!
Warum nicht einfach das hier machen
Das ist wirklich einfach und funktioniert ziemlich gut.
Herr John, Ihre Idee ist sehr einfach und funktioniert gut für alle Browsertypen :)
Es scheint, dass dies ein alter Thread ist, aber hey, er war trotzdem nützlich für mich!
Und danke an die Person über mir (John), ich habe Ihre Lösung tatsächlich verwendet.
Grüße
Was wäre die beste Vorgehensweise, um dies in eine Joomla!-Website zu integrieren?
Ich habe diese Methode gefunden und wollte sie mit euch teilen, da sie genau das war, was ich für ein DIV brauchte, das mehr als einen Link enthält
Sie können dies sogar für mehr als ein Div verwenden, wenn window.location für beide gleich ist, wie so:
Coole Lösung, aber für den Fall, dass jemand nach einer Lösung googelt (wie ich es heute tat), habe ich einen Thread auf Stackoverflow für eine Lösung ohne JS gefunden
http://stackoverflow.com/questions/796087/make-a-div-into-a-link
Für diejenigen, die eine gültige HTML-Methode ohne JavaScript suchen.
Grüße!
Atemberaubend einfache Lösung.
Und durch Hinzufügen eines winzigen bisschen jQuery erhalten Sie alle Links, die Sie wollen, in einem neuen Fenster geöffnet
http://jsfiddle.net/hf75B/81/
Gute Suche Tak, vielen Dank.
Die Lösung wird noch einfacher... kein jQuery-Sizing oder so etwas nötig
div {
position: relative;
}
a {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
}
Oder durch Einfügen des Folgenden in Ihr Div-Tag
onclick=”location.href=’http://www.example.com’;” style=”cursor:pointer;
Für diejenigen, die HTML5 verwenden, können Sie jetzt jedes Block-Element in ein A-Tag einpacken
<a href=”#”>
<div>
bla bla bla
</div>
</a>
Und für den Hover-Zustand fügen Sie einfach eine Klasse zu Ihrem Div hinzu und fügen Sie dann eine CSS-Klasse .whatever:hover {} hinzu.
Das ist ein JavaScript-Trick... kein CSS-Trick.
Danke Mann, das funktioniert wie Magie
Hallo, hier ist, was ich bekommen habe, um 2 Divs mit Hintergrundbildern klickbar zu machen
Ich suche nur nach der Lösung, um es in einem neuen Fenster zu öffnen target:"_blank"
Kann mir jemand dabei helfen, da die obigen Informationen für mich nicht funktionieren
Es tut mir leid, aber jede Lösung, die JavaScript beinhaltet, ist ein kompletter Overkill. Dies kann ganz einfach mit HTML und CSS allein erreicht werden
HTML CODE
CSS CODE
Geben Sie einfach die Breite und Höhe des klickbaren Bereichs an.
Weniger Codezeilen sind immer besser.
Ich benutze JavaScript nur, wenn es notwendig ist. Denken Sie daran, dass 3% der Benutzer es in ihren Browsern deaktiviert haben.
Oder Sie können einfach das hier in Ihr Div-Tag einfügen
onclick=”location.href=’http://www.example.com’;” style=”cursor:pointer;
So wenige Zeilen wie möglich!
Hallo,
Gibt es eine Möglichkeit,
target="_blank"hinzuzufügen?Einfach hinzufügen
als neue Funktion im jQuery-Chunk funktioniert für mich nicht.
Vielen Dank im Voraus.
Das ist wirklich cool. Aber wie kann man das Ganze nicht klickbar machen.
Ich meine, die ganze li, nicht das Div klickbar.
Hier ist ein viel einfacherer Weg
Fügen Sie dies in das DIV-Tag ein, das Sie verlinken möchten
onclick=”location.href=’http://www.example.com’;” style=”cursor:pointer;
Das ist alles, was Sie tun müssen.
Danke Chris, ich habe das gerade auf der Startseite meiner Website verwendet und hinzugefügt
.myBox { cursor: hand; cursor: pointer; }
um einen Handcursor zu erzwingen, wenn man über das .fährt.
Interessanterweise, warum nicht einfach jQuery verwenden, um das Click-Event auf dem Link auszulösen?
Um den Link in einem neuen Fenster/einer neuen Registerkarte zu öffnen, verwenden Sie den folgenden Code
Halleluja, du hast mir den Tag gerettet...
Nach vielen Antworten auf vielen Websites, einschließlich Stackoverflow, hatte dieser Thread tatsächlich funktionierende Lösungen. Danke an alle.
Ich habe ein klickbares Div. Mit dem HTML5 data-Attribut deklariere ich den Link
z.B. <div class="item" data-href="LINK"></div>
In diesem Div befindet sich ein Link. Wenn ich auf den Link klicke, geht die Seite zum data-href-Link.
Aber kann man das verhindern, wenn man auf den Link im Text klickt, dass man nicht zum Link geht, der im data-href angegeben ist?
Beispiel auf jsfiddle
Das JavaScript ist ein bisschen Overkill... Eine einfachere Lösung wäre, das Div in einen "Link" mit dem Stil display:block zu wrappen
Dann stylen Sie Ihr CSS, um die Unterstreichung oder was auch immer zu entfernen... Ich hoffe, das hilft.. :)
Adam, diese Lösung funktioniert wie ein Zauber. Danke.
Adam, Jaret,
Ich denke, das ist gültiges HTML5, aber ist es gültiges HTML 4?
Adam,
funktioniert wie ein Zauber. Wunderschön einfach und effektiv. Danke fürs Weitergeben.
Es funktioniert, aber es ist sehr schlecht für SEO. Die Methode von Adam ist viel besser.
Besser, wenn Sie sich keine Sorgen um IExplorer8 und älter machen müssen, und noch besser, wenn Sie die Inline-CSS-Regel entfernen...
Sie können die Funktionalität hinzufügen, um nachfolgende Links vom ersten einzufügen, indem Sie eine else-Anweisung einfügen und dies einfügen
else{
window.location=e.attr(“href”);
}
Ich kann mich nicht erinnern, wo ich das gefunden habe, sonst würde ich die Quelle angeben, aber das hier funktioniert für mich.
div
{
position: relative;
}
Ich habe diese Methode verwendet, und sie funktioniert sehr gut.
Schön, Giancarlo,
Verhindert das leider, dass ich eine Hintergrundfarbe bei Hover ändern kann?
Ich habe alles oben gelesen. Was ist das Ergebnis, das in IE7 und höher funktioniert und eine Hintergrundfarbänderung bei Hover ermöglicht? Ich bin verwirrt. Das Original nicht?
Schöner Trick, aber wir können es vereinfachen zu diesem
jQuery
$('#click-div').click(function() { window.location = $(this).attr("data-href"); return false; });Das obige erstellt ein quadratisches klickbares Div, das einzige Ärgerliche hier ist, wenn Sie darauf klicken, sehen Sie in der Adressleiste ein
#am Ende der Adresse. Um dies zu umgehen, ersetzen Sie#imdata-href-Attribut des Divs durchjavascript:;. Getestet in FireFox 19.Großartig! Schnelle und saubere Lösung!
Hey
Ich bekomme einen Fehler, wenn ich das in meinem WordPress-Theme verwende, irgendwelche Vorschläge?
unerwartet '(', erwartet Variable (T_VARIABLE) oder '$'
In meinem Fall muss die Funktion prüfen, ob Links extern sind oder nicht. Das verwende ich. Funktioniert gut
@Liz (https://css-tricks.de/snippets/jquery/make-entire-div-clickable/#comment-454372),
DANKE DANKE DANKE DANKE DANKE!!!
OMG, ich habe Stunden (zu viele) damit verbracht, nach genau diesem perfekten Schnipsel zu suchen. Sehr geschätzt.
Das ist erstaunlich, mit einer so einfachen Technik zu großartigen Ergebnissen zu kommen.
Das ist wahrscheinlich eine einfache Frage. Angenommen, ich verwende dies, um eine Reihe von gleichnamigen Divs mit dieser Funktion umzuwandeln, und ich möchte eines davon deaktivieren, wenn ein bestimmtes Bildattribut existiert. Wie entferne ich das von einem einzelnen Div?
Danke!
ICH LIEBE CSS-TRICKSDOTCOM!!!
Sehr schön! Funktioniert wie ein Zauber!!
Aber mit target "_blank" – es funktioniert nicht
Irgendwelche Ideen?
Beste Grüße
Entschuldigung, ich glaube, Sie haben die Sache falsch verstanden.
Es ist ein kleines Symbolbild – hoffentlich kann dies beim Klicken auf einer anderen Seite geöffnet werden.
Der Klick funktioniert – fein
Um den Link im neuen Fenster zu öffnen, anstatt mit window.location = someurl, sagen Sie window.open([someurl])
Danke für diese schöne Idee und den netten Trick.
Ich habe eine Frage, ich hoffe, Sie können mir auch dabei helfen.
Ich benutze CPC-Netzwerk-Anzeigen auf meiner Website als Publisher.
normalerweise geben Ihnen diese Websites ein Skript, das innerhalb des . platziert werden soll.
Ich habe den Code so platziert:
<div class="someclass"> <script type="text/javascript" src="URL"></script></div>Jedes Mal, wenn die Seite geladen wird, wird eine neue URL für die Anzeige generiert.
Ich möchte diese URL erfassen und in einem NEUEN-LINK speichern
<a href="NEUER-LINK"> LINK </a>damit, wenn ich auf diesen NEUEN-LINK klicke, dann auf die vom CPC-Skript generierte URL geklickt wird.
Ich habe versucht, iframes zu verwenden, aber ohne Erfolg.
Vielen Dank für Ihre Unterstützung
Jahre später und immer noch hilfreich.
Danke für diese schöne Idee und den netten Trick.
Hallo
Ich habe ein klickbares Div-Tag erstellt, indem ich nur ein Stück CSS-Code und kein Javascript verwendet habe!
Hier ist die Lösung
http://jsfiddle.net/chriscoyier/y7L9D/
Sie würden brauchen
Weil jeder seinen Code postet :)
Hier ist meine Lösung
Toller Ausschnitt. Ich habe ihn nur geringfügig modifiziert, um das Öffnen in einem neuen oder demselben Tab zu unterstützen, je nach Ihrem HTML.
Danach müssen Sie nur noch die Klasse
click-boxzu Ihremdivhinzufügen und den Link mit der Klassebox-linkeinfügen. Dann können Sie Ihrtargetals_selfoder_blankfestlegen, je nachdem, wie sich dieser Link verhalten soll.Eine weitere Möglichkeit ist, style="cursor: pointer in DIV" mit onclick="location.href='#';" hinzuzufügen.
Was ist, wenn ich mehrere Divs habe? Glauben Sie, dass dieser Code funktionieren wird? Vielleicht muss jedes Div eine eindeutige ID und einen eindeutigen JS-Code haben. Können wir es nicht einfach zusammenführen?
Gibt es eine HTML5-Lösung dafür? Javascript auf riesigen Websites dauert einfach lange zum Laden, auch wenn es unten platziert ist.
<div><a href="#" taregt="_blank">
<div>
</div>
</a>
</div>
Stattdessen machen Sie ein Tag zu display:block...
Kumpel. DANKE!
Großartig und einfach. Danke, hat den Tag gerettet.
Ich könnte Chris' Eröffnungsvorschlag, Ihren Div einfach in ein Anchor-Tag zu verschachteln, nicht mehr zustimmen. Viel benutzerfreundlicher zu aktualisieren und je weniger JS für UI ich machen kann, desto besser IMHO. Ein Anchor-Tag ist dazu bestimmt, ein Link zu sein, also viel besser für Screenreader.
Ich habe zunächst so etwas geschrieben, aber es erscheint mir einfach zu hässlich.
Ihre zweite Lösung ist vielleicht hässlich, aber sie war perfekt für das, was ich für eine Website tun musste, an der ich gerade arbeite. Danke! =)
Die HTML5-Technik funktioniert leider nicht mit ModX. ModX löscht das
<a>-Tag automatisch beim Speichern.Schade.
Nach meinem Verständnis ist es nicht üblich, Divs in Anker zu setzen. Ist das jetzt akzeptabel, weil ich beide Seiten gehört habe. Die eine Seite sagt, es sei keine gute Idee, die andere sagt, es sei in Ordnung, solange sich keine interaktiven Elemente innerhalb des Divs befinden, das angeankert wird.
Einige Klarstellungen hierzu wären hilfreich, danke.
Danke dafür! Ich habe die jQuery-Methode verwendet, sie funktioniert einwandfrei :)
Danke! Ich arbeite an einem alten Projekt und kann HTML5 nicht verwenden. Ich habe die jQuery-Methode verwendet und sie hat funktioniert!
Könnte mir jemand sagen, was dieses window.location in diesem Code macht? Wie kann das nur ein einzelnes Div beeinflussen, wenn wir den Standort des Window-Objekts festlegen? Ich habe die Dokumentation überprüft und konnte es nicht herausfinden.
Entschuldigung für die Frage, jetzt habe ich meine Antwort, wenn window.location gesetzt wird, leitet es die Seite zum zugewiesenen Speicherort weiter, sodass, wenn auf das Div geklickt wird, es so funktioniert, als würde man ein Div in ein Anchor-Tag einfügen (HTML5).
Hallo!
window.locationlokalisiert den Bereich des Objekts, dem es zugewiesen ist. In diesem Fall ist es auf$(this)beschränkt, was die Klasse.myBoxist. Ich hoffe, das hilft!Warum muss das false zurückgeben?
Hallo, kurze Frage. Würden Sie mir bitte mitteilen, welche Blog-Plattform Sie verwenden und würden Sie sie empfehlen?
Ich werde meinen eigenen Blog starten (ich hoffe, bald einen
Ruf aufzubauen), aber ich habe Schwierigkeiten, mich zwischen
Squarespace/Wordpress/Wix/Tumblr und Drupal zu entscheiden. Was
schlagen Sie vor?
WordPress auf jeden Fall.
https://mediatemple.net/blog/news/css-tricks-is-a-poster-child-wordpress-site/
Aber wie bei allem gilt: Wählen Sie das richtige Werkzeug für die Aufgabe und das, womit Sie sich am wohlsten fühlen.
Hallo, ich erstelle eine Website und möchte einen klickbaren Box-Container hinzufügen.
Und ich benutze Atom. Was soll ich schreiben, um eine Box hinzuzufügen, und was soll ich im CSS-Abschnitt tun?
Aus SEO-Gründen würde ich das jQuery verwenden, das den Ziel-Link innerhalb von myBox findet, um sicherzustellen, dass die Suchmaschinen-Bots die Links finden.
Warum haben Sie false zurückgegeben?
Ein Problem kann auftreten, wenn Sie zwei Anchor-Tags in einem Div haben.
Wie könnte dies modifiziert werden, um das Standardverhalten des Browsers für Mittelklick und Strg+Klick zu handhaben? Dies öffnet normalerweise die URL in einem neuen Tab.
Ich meinte, was ist, wenn ich 2 a in diesem Div habe.
Ich habe css-tricks immer benutzt, aber ich benutze es dank dieser kleinen Details immer mehr, wie dass jemand die Voraussicht hatte, diese Aktualisierungsnotiz vom November 2020 zu diesem älteren Artikel hinzuzufügen. Sehr geschätzt!
Es hat mir geholfen, Linkfunktionalität zu Angulars material2-carousel Slide-Bildern wie vom Zaun gebrochen hinzuzufügen!
<button><div>
</div>
<button>
Das ist semantisch falsch, kann jemand das korrigieren?