Wir haben bereits Techniken behandelt, wenn Sie ein Element in voller Breite innerhalb einer Spalte mit begrenzter Breite wünschen, z. B. ein Bild von Rand zu Rand innerhalb einer schmaleren Textspalte. Es gibt jede Menge Techniken.
Vielleicht meine Lieblings-Utility-Klasse
.full-width {
width: 100vw;
position: relative;
left: 50%;
right: 50%;
margin-left: -50vw;
margin-right: -50vw;
}
Das funktioniert, solange die Spalte zentriert ist und es Ihnen nichts ausmacht, overflow-x auf der Spalte (oder dem Body) zu verstecken, da dies andernfalls einen horizontalen Überlauf auslösen kann.
Es gab in letzter Zeit einige Diskussionen über andere Ideen...
Josh Comeau hat darüber gebloggt, dass man ein Drei-Spalten-Grid einrichten und den Inhalt hauptsächlich in der mittleren Spalte platzieren könnte, aber dann die Möglichkeit hätte, daraus auszubrechen
.wrapper {
display: grid;
grid-template-columns:
1fr
min(65ch, 100%)
1fr;
}
.wrapper > * {
grid-column: 2;
}
.full-bleed {
width: 100%;
grid-column: 1 / -1;
}
Ich finde das clever. Ich würde es wahrscheinlich benutzen. Aber ich gebe zu, es gibt ein paar Dinge, die mir komisch vorkommen. Zum Beispiel...
- Jetzt ist alles innerhalb des Containers ein Grid-Element. Keine große Sache, aber die Elemente verhalten sich leicht unterschiedlich. Keine Randkollaps zum Beispiel.
- Man muss das Standardverhalten, das man möchte, auf jedes einzelne Element anwenden. Anstatt dass sich Elemente natürlich übereinander stapeln, muss man sie auswählen und ihnen sagen, wohin sie gehen sollen, und sie sich selbst stapeln lassen. Fühlt sich ein wenig weniger nach dem natürlichen Lauf des Webs an. Dann braucht man immer noch eine Utility-Klasse, um das Full-Bleed-Verhalten zu erzielen.
Was mir an der Idee gefällt, ist, dass sie einem ein buchstäbliches Grid zum Arbeiten gibt. Zum Beispiel könnte der linke Abstandshalter halb so breit sein wie der rechte, und das ist völlig in Ordnung. Es wird dieser Raum vorbereitet, um potenziell genutzt zu werden, so wie Ethan in seinem Artikel über eingeschränkte Grids darüber sprach.
Kilian Valkhof reagierte auf den Artikel mit dieser Idee
body > *:not(img):not(video) {
position: relative;
max-width: 40rem;
margin: auto;
}
Auch sehr clever. Dies schränkt die Breite von allem ein (in welchem Container auch immer, und das müsste nicht der Body sein) *außer* den Elementen, die ausbrechen sollen (was auch eine Utility-Klasse sein könnte, und nicht unbedingt Bilder und Videos).
Auch hier, für mich, dieses Gefühl, dass ich jedes einzelne Element auswählen und ihm grundlegende Informationen über das Layout geben muss, fühlt sich etwas seltsam an. Nicht "nicht benutzen"-seltsam, nur etwas, das ich nicht gewohnt bin zu tun. Historisch gesehen bin ich eher damit vertraut, einen Container zu dimensionieren und zu positionieren und den Inhalt dieses Containers sich ohne weitere Anweisungen selbst anordnen zu lassen.
Wissen Sie, was mir am besten gefällt? Dass wir so viele leistungsstarke Layout-Tools in CSS haben und wir über die Vor- und Nachteile sprechen, genau das zu erreichen, was wir wollen.
Ein schmuckes Container-sprengendes Nugget, das ich vor ein paar Tagen entdeckt habe
Ich musste einen vollbreiten Rahmen für einen nicht vollbreiten Container erstellen. Außerdem gab es ein Element innerhalb dieses Containers mit fester Positionierung, was die Verwendung von overflow: hidden auf dem Container-Container verhinderte. Ich habe festgestellt, dass anstatt border zum Erstellen des Rahmens zu verwenden (was uns eine horizontale Scrollleiste geben würde), wenn ich outline verwenden würde, die horizontale Scrollleiste nicht erscheinen würde!
Das fühlt sich generell wie eine nützliche Kritik (Warnung) an, auch wenn es weit davon entfernt ist, "nicht benutzen" zu sagen.
Das hat mich an etwas erinnert, das ich hinzufügen möchte. Es fühlt sich sehr ähnlich an, wie ich zunehmend den lobotomisierten Eulen-Selektor verwende, bei dem ich ihn wirklich nur für direkte Nachkommen bestimmter Container möchte.
Manchmal wird das nur auf eine Menge von Klassen angewendet
Manchmal mache ich es als Utility-Klasse
Ich frage mich, ob diese Techniken eine Aufnahme in die kleine Nische "wenn man wirklich einen universellen Elementselektor will" verdienen.
Das Problem, dass alles ein Grid-Kind ist, ist jedoch ein größeres Problem. Unter anderem keine Floats.
Sehr interessante Ideen! Die erste Methode hat den zusätzlichen Vorteil, dass man nicht full bleed gehen muss. Man könnte auch ein Bild haben, das
80vwbreit ist mit einem linken Rand von-40vw. (man müsste das in einer Media Query einfügen, sonst wäre das Bild auf Bildschirmen, die nicht breiter als der Container sind, tatsächlich schmaler als der Inhalt).Ich bin kürzlich zu demselben Ansatz gelangt. Der Nachteil für mich ist, dass es Elemente mit inline-Rändern geben kann (wie Listen), die kaputt gehen, und man muss Ausnahmen hinzufügen.
Musste auch einen Hack für die Float-Utility-Klassen hinzufügen
Das erste Beispiel könnte von der Verwendung von % anstelle von vw profitieren, da vws die Breite der Scrollleiste einschließen, %s jedoch nicht. % löst daher keine Scrollbalken durch horizontalen Überlauf aus.
Interessante Technik. Ich benutze dazu tendenziell etwas Ähnliches wie die letzte Technik, aber mit einer Utility-Klasse auf einem zusätzlichen Elternelement. Es schränkt im Grunde das ein, was man einschränken möchte (= wahrscheinlich den Großteil Ihres Layouts) und lässt alles andere auf dem Standard (width: auto), sodass es den Container füllt.
Das Beispiel in diesem Artikel berücksichtigt nicht die Scrollleiste unter Windows. Um dieses Problem zu umgehen, lesen Sie bitte diesen Kommentar https://stackoverflow.com/a/66615422/15389306