Wenn Sie zum ersten Mal lernen, wie Sie das Rasterlayout verwenden, können Sie zunächst Elemente nach Zeilennummern auf dem Raster platzieren. In diesem Fall muss überwacht werden, wo bestimmte Zeilen im Raster angezeigt werden. Beachten Sie, dass die Reihenfolge ihrer Nummern umgekehrt ist, wenn die Site für Sprachen angezeigt wird, die von rechts nach links geschrieben sind.
Basierend auf diesem Liniensystem arbeiten Techniken, die es ermöglichen, Linien und sogar Gitterbereiche zu benennen. Mithilfe dieser Techniken können Sie Objekte nach Namen und nicht nach Nummern sortieren. In diesem Artikel werde ich die
verschiedenen Arten der Benennung von Linien und Bereichen in CSS-Grid-Layouts sowie einige interessante Funktionen, die sie erstellen, genauer betrachten.
Vom Übersetzer:
Ein Artikel vor zwei Jahren (2017), der jedoch die wichtige Funktionsweise des CSS-Gitters anspricht und daher heute nützlich und relevant erscheint.
Linienbenennung
Beginnen wir mit der Benennung der Gitterlinien. Im folgenden Beispiel gibt es ein Raster mit sechs expliziten Spaltenspuren und einer expliziten Linienspur. Elemente werden mit Zeilennummern auf dem Raster platziert.
.grid { display: grid; grid-gap: 20px; grid-template-rows: 20vh ; grid-template-columns: 1fr 2fr 1fr 2fr 1fr 2fr; } .header { grid-row: 1; grid-column: 1 / -1; } .sidebar { grid-row: 2; grid-column: 1 / 3; } .content { grid-row: 2; grid-column: 3 / -1; }
Bei Bedarf können in der Titelliste Zeilennamen in eckigen Klammern angegeben werden. Es ist wichtig, sich daran zu erinnern, dass Sie die Linie benennen, nicht die Spur, die ihr folgt. Nachdem Sie die Linien benannt haben, können Sie beim Positionieren von Elementen im Raster deren Namen anstelle von Zahlen verwenden.
.grid { display: grid; grid-gap: 20px; grid-template-rows: [header-start] 20vh [header-end] ; grid-template-columns: [sidebar-start] 1fr 2fr [sidebar-end] 1fr 2fr 1fr 2fr; } .header { grid-row: header-start; grid-column: 1 / -1; } .sidebar { grid-row: 2; grid-column: sidebar-start / sidebar-end; }
Der Name kann etwas anderes als das
span
Schlüsselwort sein. Aus Gründen, die Sie später in diesem Artikel erfahren werden, ist die Benennung mit dem Suffix
-start
für führende Zeilen (es spielt keine Rolle, ob es sich um eine Zeilen- oder Spaltenzeile handelt) und
-end
für
-end
eine gute Vorgehensweise. Das Ergebnis sollte
main-start
und
main-end
oder
sidebar-start
und
sidebar-end
.
Ziemlich oft stimmen die Endlinie eines Teils des Rasters und die Startlinie des anderen Teils überein, aber dies ist kein Problem, da Linien mehrere Namen haben können. Sie können Zeilen mit mehreren Namen angeben, indem Sie sie durch ein Leerzeichen in eckigen Klammern einfügen.
.grid { display: grid; grid-gap: 20px; grid-template-rows: [header-start] 20vh [header-end] ; grid-template-columns: [full-start sidebar-start] 1fr 2fr [sidebar-end main-start] 1fr 2fr 1fr 2fr [main-end full-end]; } .header { grid-row: header-start; grid-column: full-start / full-end; } .sidebar { grid-row: 2; grid-column: sidebar-start / sidebar-end; } .content { grid-row: 2; grid-column: main-start / main-end; }
Dieses Beispiel zeigt, dass Sie nicht jede einzelne Gitterlinie benennen müssen und dass Zeilennummern, die zusätzlich zu Namen verwendet werden können, immer verfügbar sind.
Codepen 1.
Line NamingLinien mit dem gleichen Namen.
Wir haben gesehen, wie Zeilen mehrere Namen haben können, aber es gibt auch Situationen, in denen mehrere Zeilen denselben Namen haben. Dies geschieht, wenn Sie die Funktion
repeat()
verwenden und benannte Zeilen in die Titelliste aufnehmen. Im folgenden Beispiel werden sechs benannte Zeilen erstellt, die abwechselnd die Namen
col-a-start
und
col-b-start
.
.grid { display: grid; grid-gap: 20px; grid-template-columns: repeat(3, [col-a-start] 1fr [col-b-start] 2fr); }
Wenn Sie beim Positionieren eines Elements
col-a-start
angeben, wird es in der ersten Zeile platziert, die mit dem Namen
col-a-start
(im betrachteten Beispiel die erste Gitterlinie). Wenn Sie beim Positionieren eines Elements
col-b-start
angeben, wird es nach demselben Prinzip auf der zweiten Rasterlinie platziert.
Wenn Sie in nachfolgenden Zeilen positionieren müssen, fügen Sie nach dem Namen eine Zahl ein, um anzugeben, in welcher Zeile der Zeile mit demselben Namen das Objekt platziert werden soll
.box3 { grid-row: 2; grid-column: col-a-start 2 / col-b-start 3; }
Codepen 2.
Linien mit dem gleichen Namen.In der Spezifikation wird dieses Verhalten als "Erstellen eines benannten Satzes von Rasterlinien" beschrieben.
Speichern von Liniennamen beim Wiederherstellen eines adaptiven Rasters
Verwenden Sie die Zeilennummern oder deren Namen, Sie entscheiden. In der Regel können Linien in Situationen nützlich sein, in denen Sie die Gitterstruktur im Rahmen einer Medienabfrage ändern möchten. Anstatt zu verfolgen, auf welcher Linie Sie Elemente an verschiedenen Kontrollpunkten platzieren, können Sie auch mit nacheinander benannten Linien arbeiten.
Im folgenden einfachen Beispiel definiere ich Rasterspalten für einen schmalen Bildschirm und definiere sie dann mit einer Breite von 550px neu.
.grid { display: grid; grid-gap: 20px; grid-template-rows: [header-start] 20vh [header-end]; grid-template-columns: [full-start ] 10px [sidebar-start main-start] 1fr [main-end sidebar-end] 10px [full-end]; } @media (min-width: 550px) { .grid { grid-template-columns: [full-start sidebar-start] 1fr 2fr [sidebar-end main-start] 1fr 2fr 1fr 2fr [main-end full-end]; } }
Codepen 3.
Benennen von Dingen: Definieren Sie
die Position der benannten Zeilen neuBenannte Regionen
Vorher haben wir nur benannte Zeilen betrachtet, aber es gibt einen anderen Weg. Wir können Gitterbereiche benennen.
Ein Gitterbereich ist ein rechteckiger Bereich, der aus einer oder mehreren Gitterzellen besteht. Der Bereich wird durch vier Gitterlinien definiert, die die Start- und Endzeilen für Spalten und Zeilen angeben.

Wir benennen die Gitterbereiche mit der Eigenschaft
grid-template-areas
. Diese Eigenschaft beschreibt das Layout in Form einer ASCII-Tabelle und ist ein Satz von Linien, von denen jede eine separate Linienspur des Rasters beschreibt.
.grid { display: grid; grid-template-columns: repeat(3, 1fr 2fr) ; grid-template-areas: "head head head head head head" "side side main main main main" "foot foot foot foot foot foot"; }
Die Namen, die wir in den Zeilen der Eigenschaft
grid-template-areas
werden den direkten untergeordneten Elementen des Rasters mithilfe der Eigenschaft
grid-area
zugewiesen. Der Wert dieser Eigenschaft ist, wenn sie zur Benennung verwendet wird, die sogenannte
Benutzerkennung , sodass sie nicht in Anführungszeichen eingeschlossen werden muss
.header { grid-area: head; } .sidebar { grid-area: side; } .content { grid-area: main; } .footer { grid-area: foot; }
Damit der Bereich bei der Beschreibung der Gitterstruktur mit der Eigenschaft
grid-template-areas
mehr als eine Zelle abdeckt, müssen Sie den Bezeichner mehrmals entlang einer Zeile oder Spalte neu aufzeichnen. Der erstellte Bereich muss ein Rechteck sein. L- und T-förmige Bereiche sind nicht zulässig. Sie können auch nur einen rechteckigen Bereich für jeden Namen erstellen - nicht verbundene Bereiche sind nicht zulässig. Die Spezifikation stellt fest, dass:
„In zukünftigen Versionen dieses Moduls sind möglicherweise nicht rechteckige oder nicht verbundene Bereiche zulässig.“
- Eigenschaftenraster-Vorlagenbereiche
Bei der Beschreibung eines Rasters muss auf die vollständige Darstellung geachtet werden, da sonst die gesamte Anzeige als ungültig verworfen wird. Dies bedeutet, dass jede Gitterzelle gefüllt sein muss.
grid-template-areas: "head head head head head head" "side side main main main main" "foot foot foot foot foot foot"; }
Da Sie möglicherweise einige Zellen im Markup leer lassen möchten, definiert die Spezifikation ein Punktsymbol
.
oder eine Folge von Punkten ohne Leerzeichen zwischen ihnen
....
als Markierung einer leeren Zelle
grid-template-areas: "head head head head head head" "side side main main main main" "....... ....... foot foot foot foot"; }
Codepen 4.
Benannte RegionenWenn Sie Firefox noch nicht heruntergeladen haben, um die neuesten Funktionen von Firefox DevTools Grid Inspector zu nutzen, empfehle ich dies, wenn Sie mit benannten Bereichen arbeiten
Demonstration benannter Bereiche im "Grid Inspector" des Firefox-Browsers ( Original öffnen )Benannte Linien bilden Bereiche
Nun kommen wir zu dem interessanten Teil dieses ganzen Namensfestes. Sie erinnern sich vielleicht, dass ich bei der Betrachtung der benannten Zeilen vorgeschlagen habe, eine Zeilenende-Vereinbarung zu verwenden, die den Beginn des Bereichs mit
-start
und das Ende des Bereichs mit
-start
. Der Grund dafür ist, dass Sie, wenn Sie die Linien auf diese Weise benennen, einen Gitterbereich mit diesem Namen erhalten und ein Element darin einfügen können, indem Sie diesen Namen über die
grid-area
festlegen.
Im folgenden Beispiel bezeichne ich für Zeilen und Spalten die Zeilen
panel-start
und
panel-end
. Dies gibt mir einen benannten Bereich namens Panel. Wenn ich es als Wert der Eigenschaft
grid-area
für ein Element auf der Seite festlege, wird das Element in den durch diese Linien definierten Bereich eingefügt
.grid { display: grid; grid-gap: 20px; grid-template-columns: 1fr [panel-start] 2fr 1fr 2fr 1fr [panel-end] 2fr; grid-template-rows: 10vh [panel-start] minmax(200px, auto) 10vh [panel-end]; grid-template-areas: "head head head head head head" "side side main main main main" ".... .... foot foot foot foot"; } .panel { grid-area: panel; }
Codepen 5. Bereiche, die
aus benannten Linien gebildet
werdenLinien werden aus benannten Bereichen gebildet
Wir können auch das Gegenteil von dem tun, was oben gezeigt ist, indem wir Linien verwenden, die aus benannten Bereichen erstellt wurden. Jeder Bereich erstellt vier benannte Zeilen mit derselben Suffixkonvention wie
-start
und
-start
. Wenn es einen benannten Bereich mit dem Namen
main
, werden seine Start- und Endzeilen und Spaltenzeilen als
main-start
und
main-end
. Diese benannten Linien können zum Positionieren eines Elements verwendet werden.
Im folgenden Beispiel positioniere ich das Panel anhand der Namen dieser automatisch generierten Zeilen:
.grid { display: grid; grid-template-areas: "head head head head head head" "side side main main main main" ".... .... foot foot foot foot"; } .panel { grid-column: main-start / main-end; grid-row: head-start / foot-end; }
Codepen 6.
Linien bilden sich aus benannten BereichenZeilennamen, die dem Regionsnamen entsprechen
Zusätzlich zu Linien mit den
-end
-start
und
-start
-end
Linien für die Flächen aller Rasterregionen mit dem Namen dieser Region erstellt. Wenn es also einen
main
gibt, können Sie den
main
als Wert für die Eigenschaften
grid-row-start
oder
grid-column-start
verwenden. Der Inhalt befindet sich am Anfang dieses Bereichs. Wenn Sie diesen Wert für die Eigenschaft
grid-row-end
oder
grid-column-end
, wird die Endzeile dieses Bereichs ausgewählt. Im folgenden Beispiel
.panel
ich das Element
.panel
für Spalten vom Anfang des
main
zum Ende des
main
und für Zeilen vom Anfang des
main
zum
foot
.panel { grid-column: main; grid-row: main / foot ; }
Codepen 7. Zeilennamen, die dem
Namen der Region entsprechenErklärung der Netzflächeneigenschaften
Es ist nützlich, etwas über die
grid-area
zu wissen. Im Wesentlichen beschreiben wir bei der Verwendung von
grid-area
mit einem Bezeichner wie
main
alle vier Linien des Areals. Gültige Werte für die
grid-area
sind auch Zeilennummern.
.main { grid-area: 2 / 1 / 4 / 3; }
Dies hat den gleichen Effekt wie der Eintrag:
.main { grid-row-start: 2; grid-column-start: 1; grid-row-end: 4; grid-column-end: 3; }
Wenn du fragst
.main { grid-area: main; }
Das heißt eigentlich:
.main { grid-area: main / main / main / main ; }
Die Eigenschaft
grid-area
verhält sich etwas anders, wenn anstelle einer Zeilennummer eine Benutzer-ID verwendet wird. Wenn Sie Zeilennummern für Anfangswerte in der Eigenschaft
grid-area
, wird jede nicht angegebene Endzeilennummer automatisch auf
auto
. Daher wird durch die automatische Positionierung bestimmt, wo das Element platziert werden soll.
Wenn Sie jedoch eine Benutzer-ID verwenden und einige Zeilen überspringen, werden diese wie folgt festgelegt
Drei Zeilennamen angegeben
.main { grid-area: main / main / main ; }
Wenn Sie drei Zeilennamen angeben, fehlt im Wesentlichen das
grid-column-end
. Wenn
grid-column-start
eine Benutzer-ID ist, wird dieselbe ID auch für
grid-column-end
. Wie wir bereits gesehen haben, verwendet die
-end
Eigenschaft die Endfläche des
main
Wenn also
grid-column-start
und
grid-column-end
auf denselben Namen festgelegt sind, wird der Inhalt auf alle Spalten dieses Bereichs ausgedehnt.
Zwei Zeilennamen angegeben
.main { grid-area: main / main ; }
Wenn nur zwei Namen angegeben werden, werden die Anfangszeilen der Zeilen und Spalten festgelegt. Wenn
grid-column-start
und / oder
grid-row-start
eine Benutzerkennung ist, werden
grid-column-end
und
grid-row-end
auf denselben Wert gesetzt.
Ein Zeilenname angegeben
.main { grid-area: main ; }
Das Festlegen eines einzelnen Liniennamens ist genau das, was Sie tun, wenn Sie den Gitterbereich auf den Hauptnamen des Bereichs festlegen. In diesem Fall werden alle vier Zeilen auf diesen Wert gesetzt.
Hinweis :
Dies funktioniert sowohl für grid-column
als auch für grid-row
.Diese Methode bedeutet, dass Sie eine Reihe von Spalten oder Zeilen in einem Raster festlegen können, um ein Element zu platzieren. So wie die
-end
Werte für die Eigenschaft
grid-area
auf dieselben Werte gesetzt sind wie die ursprünglichen (wenn weggelassen), verhalten sich auch die Endwerte für die Eigenschaften
grid-column
und
grid-row
. Dies bedeutet, dass Sie das Element zwischen der Start- und Endspaltenzeile des
main
können, indem Sie Folgendes verwenden:
.main { grid-column: main ; }
In dem
erläuterten Breakout mit CSS-Raster habe ich gezeigt, wie mit dieser Funktion nützliche Entwurfsmuster für Bereiche in voller Größe erstellt werden, die über einen begrenzten Inhaltsbereich hinausgehen.
Ein Gitter kann viele benannte Linien haben.
All dies bedeutet, dass das Raster eine große Anzahl benannter Zeilen enthalten kann. In den meisten Fällen sollten Sie sich darüber keine Sorgen machen. Arbeiten Sie mit den Zeilen, die Sie benötigen, und ignorieren Sie die Existenz anderer.
Benennung und abgekürzte Eigenschaften von Rastern und Rastervorlagen
CSS-Gitter hat zwei Abkürzungen, mit denen Sie viele Gittereigenschaften in einer kompakten Syntax festlegen können. Persönlich scheint es mir schwierig genug zu sein, dies zu erkennen. Wenn ich dies mit anderen Entwicklern diskutiere, sind die Meinungen geteilt: Einige mögen sie, andere bevorzugen die Verwendung separater Eigenschaften. Wie bei anderen Abkürzungen sollte beachtet werden, dass die Werte von Eigenschaften, die Sie nicht verwenden, auf das Original zurückgesetzt werden
Gittervorlagen-Abkürzung: Erstellen eines expliziten Gitters
Sie können die Verknüpfung mit der Rastervorlage verwenden, um alle Eigenschaften eines expliziten Rasters gleichzeitig an einer Stelle festzulegen
grid-template-columns grid-template-rows grid-template-areas
Dies bedeutet, dass Sie benannte Linien und benannte Bereiche gleichzeitig definieren können. Bei Verwendung einer Eigenschaft, die benannte Bereiche und Linien kombiniert, würde ich zunächst den Wert der Eigenschaft
grid-template-areas
, wie im obigen Abschnitt beschrieben.
Dann möchten Sie möglicherweise Zeilennamen hinzufügen. Sie werden am Anfang und am Ende jeder Wertelinie platziert - denken Sie daran, dass jede Wertelinie eine Linienspur darstellt. Der Name oder die Namen der Linien müssen sich innerhalb der eckigen Klammern befinden, genau wie beim Benennen der Linien in der Eigenschaft
grid-template-rows
, und sollten sich außerhalb der Anführungszeichen befinden, die die Wertelinie umgeben, die die Linienspur definiert.
Im folgenden Beispiel habe ich zwei Zeilen genannt: Der
panel-start
folgt der Kopfzeile (zweite Zeile des Rasters) und das
panel-end
des
panel-end
der letzten Fußzeile (vierte Zeile des Rasters mit drei Linienspuren). Ich habe auch die Größe der Linienspur für die benannten und unbenannten Linien bestimmt, indem ich am Ende der Wertlinie, die diese Linienspur beschreibt, einen Parameter hinzufügte
.grid { display: grid; grid-gap: 20px; grid-template: " head head head head head head" 10vh [panel-start] "side side main main main main" minmax(200px, auto) ".... .... foot foot foot foot" 10vh [panel-end]; }
Wenn es auch notwendig ist, die Spalten zu benennen, können wir dies nicht innerhalb der Zeile tun, also müssen wir das Trennzeichen
/
hinzufügen und dann eine Liste von Spaltenspuren definieren. Zeilen werden so benannt, als wäre diese Liste der Wert der Eigenschaft
grid-template-columns
.
.grid { display: grid; grid-gap: 20px; grid-template: " head head head head head head" 10vh [panel-start] "side side main main main main" minmax(200px, auto) ".... .... foot foot foot foot" 10vh [panel-end] / [full-start ] 1fr [panel-start] 2fr 1fr 2fr 1fr [panel-end] 2fr [full-end]; }
In diesem Beispiel, das Sie im folgenden Codepen sehen können, erstelle ich einen zusätzlichen Satz von Zeilen und Spalten. Diese Zeilen definieren einen Bereich namens
panel
, da ich die Syntax
panel-start
und
panel-end
. Auf diese Weise kann ich das Element platzieren, indem ich den
panel
der Eigenschaft
grid-area
festlege.
Auf den ersten Blick erscheint dies eher unverständlich. Hier erstellen wir also eine Liste von Spalten, die gemäß unserer oben definierten ASCII-Tabelle ausgerichtet sind. Fügen Sie optional Leerzeichen zwischen den Werten ein, um die Definition von
template-areas
und
template-columns
auszurichten.
Codepen 8. Gitter-
Vorlage-AbkürzungGitterabkürzung: implizites und explizites Gitter
In der Spezifikation wird davon ausgegangen, dass Sie, wenn Sie ein implizites Raster separat definieren müssen, die Eigenschaft "Kurzschriftraster" anstelle der
grid-template
. Das Abkürzungsraster setzt alle impliziten Werte zurück, die Sie nicht festgelegt haben. Auf diese Weise können Sie die folgenden Eigenschaften festlegen und zurücksetzen
grid-template-columns grid-template-rows grid-template-areas grid-auto-columns grid-auto-rows grid-auto-flow
Für unsere Zwecke ist die Verwendung der
grid
identisch mit der Verwendung der
grid-template
, da wir eine implizite Gitterdefinition definieren. Der einzige Unterschied besteht darin, die Eigenschaften von
grid-auto–*
. Die
grid
kann entweder zum Festlegen des expliziten Gitters und zum Zurücksetzen der impliziten Eigenschaften oder zum Festlegen des impliziten Gitters und zum Zurücksetzen der expliziten Eigenschaften verwendet werden. Beides gleichzeitig zu machen, macht nicht viel Sinn
.grid { display: grid; grid-gap: 20px; grid: " head head head head head head" 10vh [panel-start] "side side main main main main" minmax(200px, auto) ".... .... foot foot foot foot" 10vh [panel-end] / [full-start ] 1fr [panel-start] 2fr 1fr 2fr 1fr [panel-end] 2fr [full-end]; }
Hinweis :
In der ursprünglich empfohlenen Version der CSS-Raster-Spezifikation werden durch diese Reduzierung auch die Lückeneigenschaften zwischen grid-column-gap
und grid-row-gap
Zellen zurückgesetzt. Dieses Verhalten wurde jedoch schließlich geändert. Browser aktualisieren dieses Verhalten, aber zum Zeitpunkt des Schreibens (Oktober 2017) kann es immer noch vorkommen, dass der Wert der Lückeneigenschaften bei Verwendung der Reduzierung auf Null zurückgesetzt wird, sodass Sie sie möglicherweise später neu definieren müssenWelchen Ansatz verwenden?
Sie fragen sich vielleicht, welche dieser Methoden für eine bestimmte Aufgabe am besten geeignet ist? Es gibt keine strengen Regeln. Persönlich verwende ich gerne
grid-template-areas
für Komponenten, wenn ich in meiner Vorlagenbibliothek arbeite. Es ist praktisch, die Struktur der Komponente direkt vor Ihren Augen in CSS- und
grid-template-areas
zu haben, damit Sie beim Testen verschiedene Layoutoptionen ausprobieren können. Ich fand, dass es wegen einer so einfachen Bewegung der Maschenzellen wichtig ist, dass die visuelle und logische Reihenfolge der Komponentenzellen nicht gestört wird. Besucher, die über die Tastatur mit Ihrer Site interagieren und mit der Tabulatortaste zwischen den Elementen wechseln, wählen die Elemente in der Reihenfolge aus, in der sie im Markup definiert sind. Denken Sie daran, das Layout neu zu ordnen, sobald Sie sich für die am besten geeignete Art der Anzeige Ihres Inhalts entschieden haben. Um mehr über dieses Problem zu erfahren, schlage ich vor, den Artikel über
CSS-Rasterlayout und Eingabehilfen zu lesen.
Grundlegende Namenskonventionen
Um den Artikel zusammenzufassen, fasse ich ein paar Grundregeln zusammen, die Sie beim Benennen von Linien oder Bereichen in CSS Grid berücksichtigen sollten:
Linienbezeichnung:- Sie können fast jeden Namen verwenden (mit Ausnahme des span-Schlüsselworts), aber Sie können auch den aus diesen Zeilen erstellten Bereich verwenden, wenn deren Namen mit
-start
und -start
enden - Zeilen können mehrere Namen haben, die in eckigen Klammern definiert und durch ein Leerzeichen getrennt sind
- Mehrere Zeilen können denselben Namen haben. Wenn Sie ein bestimmtes benötigen, fügen Sie einfach die Nummer der erforderlichen Zeile nach dem Namen in der Reihenfolge hinzu
Namensbereiche:- Bei der Definition eines Bereichs mit
grid-template-areas
sollte die Form des Bereichs rechteckig sein - Bei Verwendung der Eigenschaft
grid-template-areas
wird jede Linienspur des Rasters als Zeichenfolge von Werten dargestellt und in Anführungszeichen angezeigt - Jede Zelle muss gefüllt sein. Wenn Sie beabsichtigt sind, einige Zellen leer zu lassen, verwenden Sie hierfür einen Punkt
.
oder Auslassungspunkte ...
keine Leerzeichen - Benannte Regionen erstellen Linien mit demselben Namen wie die Region, jedoch mit den
-end
-start
und -start
. Sie können zum Positionieren von Elementen verwendet werden.