Cross-browser, saubere Lösung für drop-down-Menüs über mehrere frames?
Lassen Sie mich zunächst sagen, dass ich wirklich wie Superfish (& jQuery). Leider ist diese - offenbar? - nicht bieten cross-frame-Unterstützung out of the box.
Situation: extranet-website, bestehend aus 2 Rahmen, horizontal geteilt. Der top-Rahmen (der kleinsten) ein Menü enthält. Wenn die Maus über dieses Menü, das "drop down" - Inhalte angezeigt bekommt, die im unteren frame (über die anderen Elemente, natürlich). Hier ist ein Beispiel (und eigentlich die Lösung, die wir heute verwenden): http://javascript.cooldev.com/scripts/coolmenu/demos/frames/
Also kennt jemand einen Weg zu bauen, reinigen (Verwendung der standard-HTML - /CSS-und so wenig JS wie möglich) Lösung? Jede mögliche Hilfe würde geschätzt! 🙂
- Ich habe etwas ähnliches wie das, was Sie suchen. Hier ist die website, die ich verwendet, um mir zu helfen: Pure Css Drop-Down-Menü ' s
- Wieso braucht es zu frames? Gibt es nicht eine viel bessere Techniken, wenn nicht mit Ihnen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, die Armeen, nehmen auf dem »Graben Ihre frames« - Ding, so dass ich wird nicht. Ich nehme an, Sie haben informiert sich der rahmenlosen alternativen und kommen zu dem Schluss, dass Sie müssen frames (für was auch immer [absurd] Grund).
Ist die Kurzgeschichte: Sie können nicht ausbrechen aus einem Rahmen, wie Sie können nicht brechen ein Fenster. Alle Inhalte, die in den Rahmen /Fenster - es gibt keine Möglichkeit, Inhalte durch Bluten.
Dieser sagte, haben Sie zwei Optionen bleiben.
Entweder option saugt. Wenn Sie die Möglichkeit haben, Graben Ihre Bilder. Irgendwelche dummen serverseitigen Sprache (php, ruby, python, ...) ermöglicht das extrahieren von Häufig wieder verwendeten Komponenten (z.B. eine navigation) in separate Dateien, und verknüpfen Sie Sie in jedem anderen Dokument, das Sie haben. SSI könnte eine option sein, auch.
<frame>
tag überall, so dass ich denke, Sie sind aus dem Bild.<iframe>
s sind immer noch rund, obwohl. Sie haben vor kurzem motzt ziemlich viel (sandboxing, security-Modelle, Kommunikation, ...). Aber<frameset>
fehlen von HTML5 bedeutet nicht, er kann nicht einfach eine HTML4-frameset-Dokument! also, Nein, es ist keine Absetzung für frames.Wenn der einzige Grund, warum Sie sind mit einem Rahmen zu halten, die Menüs an den oberen Rand des Fensters, dann können Sie einfach
position: fixed
in der CSS.Gebäude ein drop-down-Menü-system, dass die Kreuze frames ist wie eine normale drop-down-Menü-system (mit der Maus über das Menü "Kopf", zeigen Sie das Menü "Körper", die Maus nicht aus dem Kopf, verstecken des Körpers; usw.), Ausnahme:
Da die Elemente nicht wirklich cross-frame-Grenzen, die beste Sie tun können, ist, den Kopf in einem Rahmen und Körper in der anderen (wie COOLjsMenu).
Koordinieren die beiden Hälften, können Sie entweder (je nach situation) über einen frame direkt ändern, die anderen frame-Elemente, oder übergeben von Nachrichten zwischen den frames, und jeder frame zu verwalten, die Ihre eigenen Elemente.
So dass die zusätzliche Komplikation ist, wie die Verwaltung der beiden Hälften:
Wenn beide Rahmen kommen aus der gleichen Ursprung, dann JavaScript von einem frame können direkt bearbeitet werden, die anderen frame-Elemente. (Da man sich mit COOLjsMenu, würde ich davon ausgehen, ist dies der Fall für Ihr extranet.)
Wenn frames kommen aus verschiedenen Ursprüngen, dann können Sie nicht manipulieren jeweils anderen Elemente, obwohl Sie noch in der Lage sein, Nachrichten zu übergeben, die zwischen frames:
Wenn Sie nur brauchen, zu unterstützen "modernen" Browsern (Firefox 3+, Chrome, Safari 4+, IE 8+, Opera 9.5+), dann können Sie
Fenster.postMessage()
.Wenn Sie Bedarf an Unterstützung von älteren Browsern (insbesondere IE 6-7), die Sie verwenden können, easyXDM (die auch verwendet
window.postMessage()
- falls verfügbar-im browser des Benutzers).In diesem Fall müssen Sie JavaScript in einzelnen Frames zu manipulieren, Ihre eigenen Elemente und die Kommunikation mit den anderen Rahmen.
Tatsächlich ein cross-frame-drop-down-Menü-system ist Links als übung für den Leser 🙂
Konnte man nur mit einem reinen CSS Menü (wie http://csswizardry.com/2011/02/creating-a-pure-css-dropdown-menu/). Ich bin mir nicht ganz sicher, warum die navigation in einem anderen frame, aber dies wird Ihnen die Funktionalität und Flexibilität zu bewegen die drop-down-Listen nach oben oder unten (durch die Einstellung der padding/margin/top-Eigenschaften in CSS) anpassen, um den unteren Rand des Rahmens.
Wäre die ideale Lösung, um NICHT die Verwendung von frames. Stattdessen sollten Sie im Idealfall Ihre im setup-Menü mit einer festen position. Die richtige CSS-Datei für Ihr Menü element wäre:
Sie müssen möglicherweise einige andere Anpassungen, wie z.B. die Einstellung der
z-index
von Ihrem Menü, um größer zu sein als der rest des Dokuments. Wenn Sie eine Feste Positionierung, die Sie vielleicht in der Lage sein, um Weg mit der Verwendung von KEIN javascript. Hier sind ein paar Beispiele von Menüs, die mit festen Positionierung:Sollten Sie beachten, dass ein frame nicht auf Inhalte zugreifen, die außerhalb von sich selbst. Es gibt keine CSS - /JavaScript, lassen Sie Ihre top-Rahmen Zugriff auf den Inhalt Ihrer unteren Rahmen. Es wäre eine Sicherheitslücke zu erlauben, dass dieses geschieht. Wenn du unbedingt frames verwenden, dann kleben Sie mit so etwas wie die aktuelle Lösung.
Hasse ich den Advocatus Diaboli spielen, aber Sie können brechen aus dem Rahmen, weil bei meiner Arbeit haben wir ein JavaScript Menü, das genau das tut. Es ist eine sehr alte Bibliothek, aber es macht es. Sie können sehen, die Grau frameborders ganz klar und das Menü ist ein ausbrechen aus der top-Rahmen und die über drei andere Bilder.
Haben wir genutzt, drop-down-Menüs mit cross-frame-Unterstützung vor, ohne zu viel von einem problem. Eine Möglichkeit, dies zu tun ist mit allwebmenus, eine mächtige javascript menu builder mit viele wirklich tolle Funktionen, und beinhaltet die cross-frame-Unterstützung out of the box: http://www.likno.com/examples.html?example=crossframe
Diese Seite erklärt, wie likno es macht: http://www.likno.com/drop-down-css-menu/compilepropertiescrossframe.htm.
Deluxe-Menü auch macht eine ähnliche Sache:
http://deluxe-menu.com/data-samples/cross-frame-horizontal-1-sample.htm
und ist billiger, wenn Sie nur wollen, es zu tun auf einer einzigen website, aber teurer für mehrere Standorte.