Heim >Web-Frontend >CSS-Tutorial >Aufbau von Mega -Menüs mit Flexbox
Kernpunkte
Wie Sie wissen, hat Flexbox in letzter Zeit viel Aufmerksamkeit auf sich gezogen, als der Browserunterstützung zugenommen hat. Es ermöglicht Entwicklern, komplexe Benutzeroberflächen zu erstellen, ohne sich auf redundante CSS und JavaScript -Tricks zu verlassen.
Flexbox verwendet ein lineares Layoutmodell, sodass wir den Inhalt horizontal oder vertikal ohne Abstandsberechnungen layout lagerten. Das Flex -Layout reagiert auf Elemente im Container und verringert die Notwendigkeit von Medienabfragen.
In diesem Artikel werde ich dieses Layoutmodell verwenden, um ein riesiges Navigationsmenü zu erstellen, und dabei sehen Sie, wie einfach es ist, UI -Komponenten mit Flexbox zu erstellen und zu erweitern.
Ich werde die einzelnen Flexbox -Eigenschaften hier nicht detailliert diskutieren, sondern mich auf die praktische Anwendung dieser Funktionen konzentrieren. Eine grundlegende Einführung in Flexbox finden Sie in den folgenden Ressourcen:
Um herauszufinden, was ich Ihnen zum Erstellen zeigen werde, lesen Sie den Vollbildmodus mit CodePen.
Dieses Tutorial ist in drei Teile unterteilt:
Die Markierung der Navigationsleiste ist einfach. Zu Demonstrationszwecken werde ich zwei Klassen (Navigationsleiste und Menü) verwenden, um alles zu verarbeiten. CSS hier schließen alle Stile aus, die nicht mit diesem Tutorial zusammenhängen.
<code class="language-html"><nav class="navbar"> <ul class="menu"> <li> <a href="https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b">Electronics</a><i> class="fa fa-angle-down"></i> </li> </ul> </nav></code>Die
navigbar -Klasse ist für die Zentrierung unserer Navigationsleiste im verfügbaren Bereich verantwortlich. Ich werde mich jedoch auf die Menüklasse konzentrieren, in der ich Flexbox verwenden werde.
Ich möchte, dass meine Navigationsgegenstände horizontal angeordnet werden. Außerdem möchte ich, dass jeder Gegenstand gleichermaßen verteilt ist und die Bedarf eingrenzt, wenn nicht genügend Platz vorliegt.
Zunächst muss ich einen Flex -Formatierungskontext für das .menu -Element erstellen, das ich zum Implementieren verwenden werde. Jetzt werden alle direkten Kinder des .menu -Elements (d. H. Flex -Container) zu Flexprojekten. display: flex
hinzugefügt, damit sie gleichmäßig mit gleichen Breiten wachsen lassen. Hier ist der Code: flex: 1
<code class="language-html"><nav class="navbar"> <ul class="menu"> <li> <a href="https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b">Electronics</a><i> class="fa fa-angle-down"></i> </li> </ul> </nav></code>Sehen Sie sich den Code an, Sie fragen sich vielleicht, warum ich alle Flex -Projekte wiederverändere (.navbar .menu li).
display: flex
In der Demo ändert sich die Hintergrundfarbe, wenn Sie über einen Menüelement schweben. Wenn ich die
festlegt, hat nur das Li -Element die gleiche Breite, und der interne Inhalt ist nicht (d. H. Einige hervorgehobene Teile sind anklickbar, während andere nicht anklickbar sind ). display
flex
Um den Inhalt auf die gesamte Breite seines übergeordneten Elements auszudehnen, habe ich das Flex -Projekt auch in einen Flex -Behälter verwandelt. Mit dieser Einstellung kann ich jedes verschachtelte Element so breit wie sein übergeordnetes (mit
flex: 1
Alternativ kann ich dies auch erreichen, ohne das Li -Element in den Flex -Behälter zu setzen, aber ich muss drei zusätzliche Eigenschaften (
, display: inline-block
) verwenden, und ich bevorzuge es, diese Situation zu vermeiden . width: 100%
box-sizing: border-box
Diese Demo zeigt, was bisher getan wurde.
In nur fünf CSS -Flexbox -Eigenschaften ist die Navigationsleiste fertig. Wie Sie sehen können, ist dies eine ordentliche Lösung.
Im nächsten Abschnitt werde ich Ihnen einen Teil des Erstellens einer riesigen Navigation zeigen.
Erstellen Sie ein einzelnes Dropdown-Menüsegment
Container ist ein Flex -Behälter, und jedes direkte untergeordnete Element (d. H. Container__List) ist ein Flex -Projekt. Jede Container -Liste verfügt über mehrere Navigationselemente, von denen jedes von Container __listItem verpackt wird. Ich habe den Inhalt in eine DIV gewickelt und ich werde später darauf zurückkehren.
<code class="language-css">.navbar .menu { display: flex; position: relative; } .navbar .menu li { flex: 1; display: flex; text-align: center; } .navbar .menu a { flex: 1; justify-content: center; color: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bffffff; padding: 20px; }</code>
Folgendes ist CSS:
Beachten Sie, dass ich die Eigenschaft
<code class="language-html"><ul class="container"> <div class="container__list"> <div class="container__listItem"> <div>Televisions</div> </div> </div> </ul></code>auf Container __liste verwendet habe, aber ich habe sie nicht für die Navigationsleiste selbst verwendet. Wie bereits erwähnt, möchte ich nicht, dass die Navigationsleistenelemente einwickeln, wenn nicht genügend Platz vorliegt. Stattdessen schrumpfen sie gleichmäßig, wenn der verfügbare horizontale Raum abnimmt.
flex-wrap
Für Container -Liste -Projekte sind die Anforderungen jedoch genau das Gegenteil. Ich möchte, dass meine Listenelemente 25% des Raums verwenden, so dass jede Zeile bis zu vier Elemente enthält, die ich mit
flex-wrap: wrap
Ich habe auch
Was ist mit dem Inhalt, der jetzt in einem Div eingewickelt ist? Ich möchte mit einer Situation umgehen, in der Sie möglicherweise überfließen möchten. Dies ist sehr einfach, wenn sich Ihr Inhalt direkt in einem Flex -Child -Element befindet (d. H. Container__ListItem). Ich kann den Schnitttext durch einen Ellipsis ("...") durch den folgenden Code ersetzen.
<code class="language-html"><nav class="navbar"> <ul class="menu"> <li> <a href="https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b">Electronics</a><i> class="fa fa-angle-down"></i> </li> </ul> </nav></code>
In diesem Fall habe ich den Inhalt jedoch in ein Div eingerichtet, das von Container __listItem eingewickelt wird. Daher funktioniert die obige Lösung nicht. Artikel Flexbox und verkürzter Text bieten eine Lösung. Im folgenden Code ist die folgende Zeile in jedem Deklarationsblock "Update" -Kommentar die Zeile, die dieses Problem behandelt:
<code class="language-css">.navbar .menu { display: flex; position: relative; } .navbar .menu li { flex: 1; display: flex; text-align: center; } .navbar .menu a { flex: 1; justify-content: center; color: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bffffff; padding: 20px; }</code>
Zu diesem Zeitpunkt wurde der größte Teil der Arbeiten abgeschlossen. Für den Rest dieses Abschnitts füge ich einen weiteren Dropdown-Abschnitt hinzu, den ich auf drei Spaltenelemente einschränken werde.
Wie bereits erwähnt, werde ich Container __liste zweimal kopieren und für ein neues Dropdown-Menüsegment namens "Geräte" verwenden. Dies ist für Demonstrationszwecke. In einem praktischen Beispiel können Sie eine Liste über JavaScript oder in einer Backend -Sprache erstellen.
Ich werde eine Has-Multi-Klasse hinzufügen, um die Benutzeroberfläche anzupassen. Mit dieser Klasse muss ich einige Eigenschaften überschreiben.
<code class="language-html"><ul class="container"> <div class="container__list"> <div class="container__listItem"> <div>Televisions</div> </div> </div> </ul></code>
Hier habe ich flex-basis
auf 33,333%festgelegt, da ich möchte, dass drei Teile im Container angezeigt werden. Ich habe nur flex-basis
geändert, aber die beiden anderen Eigenschaften flex-grow
und flex-shrink
wurden aus dem einzelnen Abschnittscode geerbt. Dies gibt mir Flexibilität, wenn die Container -Liste weniger als drei ist. Wenn es nur zwei Listen gibt, wächst das Container -Liste -Projekt und vergeben Platz zwischen ihnen. Das heißt, jeder Artikel belegt 50% der Gesamtbreite.
Beachten Sie, dass .Container__ListItem auf flex-basis: 100%
gesetzt ist, was sicherstellt, dass nur eine Spalte in Container __liste ist. Ich kann 50% verwenden, um zwei Spalten pro Abschnitt zuzulassen.
Ich habe das Mega -Menü als mein Beispiel ausgewählt, ohne die Benutzerfreundlichkeit zu sehr zu betrachten. Bevor ich solche Funktionen verwendete, habe ich einige Ressourcen zur Verfügung gestellt, um die Vor- und Nachteile zu besprechen.
Meiner Meinung nach ist die MEGA-Menünavigation sehr nützlich, um alle Optionen anzuzeigen, und dieser Navigationsstil kann effektiv für E-Commerce-Websites verwendet werden. Ich mag die Navigation von Intel.
Man sollte beachtet werden, dass das endgültige Mega -Menü in diesem Tutorial nicht vollständig reagiert. Die Hauptmenüleiste wird auf einem kleineren Bildschirm angezeigt, aber das riesige Menü ist nicht verfügbar, nur die Links auf oberster Ebene sind verfügbar. Für die Zwecke dieses Tutorials sollte dies ausreichen. Fühlen Sie sich frei, die Demo zu kopieren und zu verbessern, wenn Sie es vorziehen.
Das riesige Dropdown-Menü Navigationssystem ist eine großartige Möglichkeit, die Leistung und Einfachheit von Flexbox zu demonstrieren, und ich hoffe, ich habe das in diesem Tutorial übermittelt. Wie Sie sehen können, wird Flexbox nicht nur zum Zentrieren von Inhalten verwendet.
Wenn Sie verschiedene Flexbox-basierte Technologien verwenden, um ein Mega-Menüsystem zu erstellen, können Sie uns in den Kommentaren wissen.
Update: Ich habe eine reaktionsschnelle mobilfreundliche Version dieser Mega-Menüs erstellt, die Sie in dieser Codepen-Demo finden können.
Es ist sehr einfach, das MEGA -Menü mit Flexbox zu reagieren. Sie können Medienabfragen verwenden, um das Layout des Menüs entsprechend der Bildschirmgröße anzupassen. Sie können beispielsweise Menüelemente vertikal auf einem kleineren Bildschirm stapeln und horizontal auf einem größeren Bildschirm anzeigen. Sie können auch die Flex-Wrap-Eigenschaft verwenden, damit Menüelemente bei Bedarf in mehrere Zeilen einwickelt werden können. Denken Sie daran, Ihr Menü auf verschiedenen Geräten zu testen, um sicherzustellen, dass es gut aussieht und in allen Bildschirmgrößen funktioniert.
Ja, Sie können mit Flexbox Mega-Menüs mit mehreren Ebenen erstellen. Sie können Flexbehälter miteinander nisten, um eine Mehrebene-Navigation zu erstellen. Jede Ebene kann mit CSS und JavaScript angezeigt oder versteckt werden. Auf diese Weise können Sie komplexe Navigationsstrukturen erstellen, die immer noch leicht zu navigieren und zu verstehen sind.
Sie können CSS -Übergänge und -Transformationen verwenden, um dem Flexbox -Mega -Menü Animationen hinzuzufügen. Zum Beispiel können Sie Übergänge verwenden, um die Öffnung und Schließung des Untermenüs reibungslos zu beleben. Sie können auch die Transformation verwenden, um die Bewegung von Menüpunkten zu belasten. Denken Sie daran, die Animations -Subtilität und -konsistenz zu behalten, um den Benutzer nicht zu verwirren oder abzulenken.
Die Verbesserung der Zugänglichkeit des Mega -Menüs Flexbox umfasst mehrere Schritte. Stellen Sie zunächst sicher, dass Ihr Menü über die Tastatur schiffbar ist. Dies bedeutet, dass der Benutzer in der Lage sein sollte, die Registerkartenschlüssel und die Pfeiltasten zu verwenden, um im Menü zu navigieren. Zweitens verwenden Sie Aria -Rollen und -attribute, um assistive Technologien zusätzliche Informationen über Menüs zu liefern. Drittens stellen Sie sicher, dass Ihr Menü genügend Kontrast hat und leicht zu lesen ist.
Ja, Sie können mit Flexbox klebrige Mega -Menüs erstellen. Sie können die CSS -Eigenschaft "Position: Sticky" verwenden, um das Menü einfügen, wenn der Benutzer scrolls. Dies stellt sicher, dass das Menü immer auf langen Seiten sichtbar und zugänglich ist.
Sie können Symbole zum Mega -Menü Flexbox mit Symbolschriften oder SVG hinzufügen. Sie können das Flex -Attribut verwenden, um die Größe und den Abstand der Symbole zu steuern. Sie können auch CSS verwenden, um die Farbe und den Schwebeffekt des Symbols zu ändern.
Sie können dem Mega -Menü Flexbox eine Suchleiste hinzufügen, indem Sie ein Flex -Element erstellen, das ein Formular mit Eingabefeldern und Schaltflächen einreicht. Sie können das Flex -Attribut verwenden, um die Größe und Position der Suchleiste zu steuern. Sie können auch CSS verwenden, um die Suchleiste so zu stylen, dass sie den Rest des Menüs entspricht.
Sie können das Mega-Menü Flexbox Dropdown-Menüs hinzufügen, indem Sie verschachtelte Flex-Container erstellen. Sie können mit CSS die Dropdown-Menüs standardmäßig ausblenden und anweisen, wenn der Benutzer über das übergeordnete Menüelement schwebt. Sie können auch JavaScript verwenden, um dem Dropdown-Menü zusätzliche Interaktivität hinzuzufügen, z. B. das Schließen, wenn der Benutzer außerhalb des Dropdown-Menüs klickt.
Sie können das Mega -Menü Flexbox ein mobiles Menü hinzufügen, indem Sie eine Schaltfläche erstellen, um das Menüanzeige zu umschalten. Sie können Medienabfragen verwenden, um den Umschalter auf dem größeren Bildschirm auszublenden und auf dem kleineren Bildschirm anzuzeigen. Sie können auch JavaScript verwenden, um die Eigenschaft "Anzeige" des Menüs zu umschalten, wenn die Schaltfläche klickt.
Optimierung der Leistung des MEGA -Menüs Flexbox umfasst mehrere Schritte. Stellen Sie zunächst sicher, dass Ihre CSS und JavaScript geschrumpft und komprimiert werden, um ihre Dateigröße zu reduzieren. Zweitens verwenden Sie CSS -Übergänge und -Transformationen zu Animation anstelle von JavaScript, da sie besser abschneiden. Drittens verwenden Sie Medienabfragen, um verschiedene Stile und Skripte entsprechend der Bildschirmgröße zu laden, wodurch die Menge des unnötigen Code -Ladens verringert wird.
Das obige ist der detaillierte Inhalt vonAufbau von Mega -Menüs mit Flexbox. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!