CSS Grid ist ein fantastisches Tool zum Erstellen von Responsive Layouts mit minimalem Code und beseitigt häufig die Notwendigkeit von Medienabfragen. Ich fühle mich wohl für verschiedene Layouts und priorisieren Sie sauberes HTML. Eine kürzlich durchgeführte UI -Herausforderung stellte jedoch ein einzigartiges Problem dar: Erweiterung einer Gitterzelle auf die volle Breite, wenn eine Schaltfläche geklickt wurde, während die ursprüngliche Gitterstruktur und Reaktionsfähigkeit beibehalten wurde.
Die Anforderung war, dass die erweiterte Zelle:
Die überraschend elegante Lösung verwendet nur wenige Zeilen von CSS -Gitter. Dieser Artikel beschreibt drei einfache CSS -Gittertechniken, um dies ohne JavaScript zu erreichen.
Hier ist ein vereinfachtes Beispiel für die UI -Aufgabe: Unsere Bibliothek für die Storybook Component bietet ein Produktkartennetz. Jede Karte benötigte eine "Schnellansicht" -Taste, um eine größere, vollständige Karte mit detaillierten Produktinformationen anzuzeigen. Diese Erweiterung musste:
Anfangs nahm ich an, dass JavaScript für die Neupositionierung von Karten notwendig sein würde. Online -Suche nach "Schnellansicht" -Implementierungen ergab hauptsächlich modale oder Overlay -Lösungen. Modale sind für fokussierte Inhalte üblich, aber ich wollte eine Lösung, die nahtlos in das Netz integriert wurde.
Die Lösung kam aus der Kombination mehrerer leistungsstarker CSS -Gitterfunktionen.
Mein vorhandenes Netzsystem hat diese Technik bereits verwendet:
.Netz { Anzeige: Grid; Lücke: 1Rem; Grid-Template-Säulen: Wiederholen (automatisch, 20REM); }
grid-template-columns: repeat(auto-fit, 20rem);
Erstellt Spalten (20REM hier), die sich automatisch an den verfügbaren Raum anpassen und nach Bedarf an neue Zeilen einwickeln. Sara Soueidans Erklärung von auto-fit
vs. auto-fill
ist ausgezeichnet. Der Einfachheit halber habe ich feste Spaltenbreiten verwendet.
Um der erweiterten Karte aufzunehmen:
.Fullwidth { Grid -Säule: 1 / -1; }
Da der Trick Nr. 1 ein explizites Netz erzeugt, grid-column: 1 / -1;
erstreckt sich über die gesamte Breite (von Spalte 1 bis zur letzten).
Dadurch bleibt jedoch Lücken über der Vollbreite-Karte.
Wenn Sie diese Lücken füllen, wird ein Faux-Masonry-Ansatz verwendet:
.Netz { Grid-Auto-Flow: dichter; }
grid-auto-flow: dense;
Optimiert die automatische Plazement und fülle Lücken früher im Netz. Dies funktioniert effektiv, wenn:
minmax()
für flexible Breiten).align-items: stretch
lässt implizit Zellen die Zeilenhöhe füllen).Die ursprüngliche DOM -Reihenfolge ist erhalten und für die Zugänglichkeit von entscheidender Bedeutung. MDN liefert eine umfassende Erklärung des CSS-Gitter-Auto-Placements.
Diese drei Techniken erzeugen ein einfaches, effizientes Layout mit minimalem CSS, ohne Medienabfragen und ohne JavaScript für Layoutberechnungen.
JavaScript ist nach wie vor erforderlich, jedoch nur für die Funktionalität: Klick -Ereignisse, Fokussierung und Anzeige der injizierten Karte. Im Prototyp sind die Karten mit voller Breite fest codiert. JavaScript wechselt ihre Sichtbarkeit.
In einer Produktionsumgebung würde die Karte wahrscheinlich dynamisch abgerufen und eingefügt. Um das Aufblähen des DOM zu vermeiden, sollte der injizierte Inhalt als fortschreitende Verbesserung angesehen werden. Wenn JavaScript fehlschlägt, werden Benutzer auf die Seite Produktdetails umgeleitet.
Priorisierung der semantischen HTML, ARIA -Attribute und der Tastaturnavigation:
<ul> für semantische Klarheit.</ul>
<li> Elemente mit richtigen Überschriften.</li>
<li> Die DOM -Reihenfolge ist für die natürliche Registerkartenreihenfolge erhalten.</li>
<li> Focus Management sorgt für eine ordnungsgemäße Tastaturnavigation. (Weitere Verbesserungen können explizite Beschriftungen für die injizierte Karte, <kbd>die ESC</kbd> -Schlüsselbindung für das Schließen und das Scrollen für Ansichtsfenster umfassen, um die Sichtbarkeit sicherzustellen.)</li>
Dieser Ansatz bietet eine saubere Alternative zu Modals und zeigt zusätzliche Inhalte, ohne die Seite zu verdecken. Es kann für verschiedene Szenarien wie Bildunterschriften oder Helfertext nützlich sein, was möglicherweise ersetzt / / ersetzt <details>/<summary></summary></details>
in einigen Fällen. Ich bin gespannt auf Ihre Gedanken und alternativen Ansätze.
Das obige ist der detaillierte Inhalt vonErweiterbare Abschnitte innerhalb eines CSS -Gitters. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!