Ich versuche, eine einfache Seite mit CSS Grid zu erstellen.
Was ich nicht mache, ist den Text aus dem HTML in die entsprechenden Rasterzellen zu zentrieren.
Ich habe Platzierung Inhalt versucht , in separaten div
s sowohl innerhalb als auch außerhalb der left_bg
und right_bg
Wähler und spielt mit einigen der CSS - Eigenschaften ohne Erfolg.
Wie mache ich das?
html,
body {
margin: 0;
padding: 0;
}
.container {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 100vh;
grid-gap: 0px 0px;
}
.left_bg {
display: subgrid;
background-color: #3498db;
grid-column: 1 / 1;
grid-row: 1 / 1;
z-index: 0;
}
.right_bg {
display: subgrid;
background-color: #ecf0f1;
grid-column: 2 / 2;
grid_row: 1 / 1;
z-index: 0;
}
.left_text {
grid-column: 1 / 1;
grid-row: 1 / 1;
position: relative;
z-index: 1;
justify-self: center;
font-family: Raleway;
font-size: large;
}
.right_text {
grid-column: 2 / 2;
grid_row: 1 / 1;
position: relative;
z-index: 1;
justify-self: center;
font-family: Raleway;
font-size: large;
}
<div class="container">
<!--everything on the page-->
<div class="left_bg">
<!--left background color of the page-->
</div>
</div>
<div class="right_bg">
<!--right background color of the page-->
</div>
<div class="left_text">
<!--left side text content-->
<p>Review my stuff</p>
<div class="right_text">
<!--right side text content-->
<p>Hire me!</p>
</div>
</div>
Antworten:
Diese Antwort besteht aus zwei Hauptabschnitten:
Wenn Sie nur an den Lösungen interessiert sind, überspringen Sie den ersten Abschnitt.
Struktur und Umfang des Rasterlayouts
Um zu verstehen, wie die Zentrierung in einem Rastercontainer funktioniert, ist es wichtig, zunächst die Struktur und den Umfang des Rasterlayouts zu verstehen.
Die HTML- Struktur eines Rastercontainers besteht aus drei Ebenen:
Jede dieser Ebenen ist hinsichtlich der Anwendung der Rastereigenschaften unabhängig von den anderen.
Der Umfang eines Rastercontainers ist auf eine Eltern-Kind-Beziehung beschränkt.
Dies bedeutet, dass ein Rastercontainer immer das übergeordnete Element und ein Rasterelement immer das untergeordnete Element ist. Rastereigenschaften funktionieren nur innerhalb dieser Beziehung.
Nachkommen eines Rastercontainers außerhalb der untergeordneten Elemente sind nicht Teil des Rasterlayouts und akzeptieren keine Rastereigenschaften. (Zumindest nicht, bis die
subgrid
Funktion implementiert wurde, mit der Nachkommen von Rasterelementen die Zeilen des Primärcontainers respektieren können.)Hier ist ein Beispiel für die oben beschriebenen Struktur- und Bereichskonzepte.
Stellen Sie sich ein Tic-Tac-Toe-ähnliches Gitter vor.
Sie möchten, dass die X und O in jeder Zelle zentriert sind.
Sie wenden also die Zentrierung auf Containerebene an:
Aufgrund der Struktur und des Umfangs des Rasterlayouts
justify-items
zentriert der Container die Rasterelemente und nicht den Inhalt (zumindest nicht direkt).Code-Snippet anzeigen
Gleiches Problem mit
align-items
: Der Inhalt wird möglicherweise als Nebenprodukt zentriert, aber Sie haben das Layoutdesign verloren.Code-Snippet anzeigen
Um den Inhalt zu zentrieren, müssen Sie einen anderen Ansatz wählen. Unter erneuter Bezugnahme auf die Struktur und den Umfang des Rasterlayouts müssen Sie das Rasterelement als übergeordnetes Element und den Inhalt als untergeordnetes Element behandeln.
Code-Snippet anzeigen
jsFiddle-Demo
Sechs Methoden zur Zentrierung im CSS-Raster
Es gibt mehrere Methoden zum Zentrieren von Rasterelementen und deren Inhalt.
Hier ist ein grundlegendes 2x2-Raster:
Flexbox
Verwenden Sie die Flexbox, um den Inhalt von Rasterelementen auf einfache Weise zu zentrieren.
Machen Sie das Gitterelement genauer zu einem flexiblen Container.
Bei dieser Methode liegt kein Konflikt, keine Spezifikationsverletzung oder ein anderes Problem vor. Es ist sauber und gültig.
Code-Snippet anzeigen
In diesem Beitrag finden Sie eine vollständige Erklärung:
Gitterstruktur
Ebenso wie ein Flex-Element auch ein Flex-Container sein kann, kann ein Rasterelement auch ein Raster-Container sein. Diese Lösung ähnelt der obigen Flexbox-Lösung, außer dass die Zentrierung mit Raster- und nicht mit Flex-Eigenschaften erfolgt.
Code-Snippet anzeigen
auto
RänderVerwenden Sie
margin: auto
diese Option, um Rasterelemente vertikal und horizontal zu zentrieren.Code-Snippet anzeigen
Um den Inhalt von Rasterelementen zu zentrieren, müssen Sie das Element in einen Rastercontainer (oder Flexcontainer) verwandeln, anonyme Elemente in ihre eigenen Elemente einschließen ( da sie nicht direkt von CSS als Ziel ausgewählt werden können ) und die Ränder auf die neuen Elemente anwenden.
Code-Snippet anzeigen
Eigenschaften der Boxausrichtung
Wenn Sie die folgenden Eigenschaften zum Ausrichten von Rasterelementen verwenden möchten, lesen Sie den Abschnitt über die
auto
Ränder oben.align-items
justify-items
align-self
justify-self
https://www.w3.org/TR/css-align-3/#property-index
text-align: center
Um den Inhalt in einem Rasterelement horizontal zu zentrieren, können Sie die
text-align
Eigenschaft verwenden.Code-Snippet anzeigen
Beachten Sie, dass die vertikale Zentrierung
vertical-align: middle
nicht funktioniert.Dies liegt daran, dass die
vertical-align
Eigenschaft nur für Inline- und Tabellenzellencontainer gilt.Code-Snippet anzeigen
Man könnte sagen, dass dies
display: inline-grid
einen Inline-Container erstellt, und das wäre wahr. Warum funktioniert das nichtvertical-align
in Rasterelementen?Der Grund dafür ist, dass in einem Rasterformatierungskontext Elemente als Elemente auf Blockebene behandelt werden.
In einem Blockformatierungskontext , für den die
vertical-align
Eigenschaft ursprünglich entwickelt wurde, erwartet der Browser nicht, dass ein Element auf Blockebene in einem Container auf Inline-Ebene gefunden wird. Das ist ungültiges HTML.CSS-Positionierung
Schließlich gibt es eine allgemeine CSS-Zentrierungslösung, die auch in Grid funktioniert: die absolute Positionierung
Dies ist eine gute Methode zum Zentrieren von Objekten, die aus dem Dokumentfluss entfernt werden müssen. Zum Beispiel, wenn Sie möchten:
Legen Sie einfach
position: absolute
das zu zentrierende Element undposition: relative
den Vorfahren fest, der als enthaltender Block dient (normalerweise der übergeordnete Block). Etwas wie das:Code-Snippet anzeigen
Hier ist eine vollständige Erklärung, wie diese Methode funktioniert:
Hier ist der Abschnitt zur absoluten Positionierung in der Grid-Spezifikation:
quelle
grid-container
&grid-item
sind HTML-Tags?flex
undgrid
,align-items
bleibt gleich , aber aus irgendeinem Grundjustify-content
wirdjustify-items
Sie können Flexbox verwenden, um Ihren Text zu zentrieren. Übrigens sind keine zusätzlichen Container erforderlich, da Text als anonymes Flex-Element betrachtet wird.
Aus den Flexbox-Spezifikationen :
So stellt gerade Rasterelemente als Flex - Container (
display: flex
) und fügenalign-items: center
undjustify-content: center
sowohl vertikal als auch horizontal zu zentrieren.Optimierte auch HTML und CSS:
quelle
Versuchen Sie nicht einmal, Flex zu verwenden. bleib bei css grid !! :) :)
https://jsfiddle.net/ctt3bqr0/
macht hier die Zentrierarbeit.
Wenn Sie etwas zentrieren möchten,
div
das sich innerhalb der Gitterzelle befindet, müssen Sie ein verschachteltes Gitter definieren, damit es funktioniert. (Bitte schauen Sie sich die Geige an, die beide dort gezeigten Beispiele zeigen.)https://css-tricks.com/snippets/css/complete-guide-grid/
Prost!
quelle
place-self: center;
.Die Shorthand-Eigenschaft " CSS- Platzierungselemente" legt die Eigenschaften "Ausrichtungselemente" und "Ausrichtungselemente" fest. Wenn der zweite Wert nicht eingestellt ist, wird auch der erste Wert dafür verwendet.
quelle
place-items
wird derzeit nicht in edge unterstütztVersuchen Sie es mit Flex:
Plunker-Demo: https://plnkr.co/edit/nk02ojKuXD2tAqZiWvf9
HTML
quelle
Du willst das?
quelle
.text{ font-family: Raleway; font-size: large; text-align: center; -webkit-transform: rotate(-90deg); -moz-transform: rotate(-90deg); }
Ich weiß, dass diese Frage ein paar Jahre alt ist, aber ich bin überrascht, dass niemand vorgeschlagen hat:
Dies ist eine universellere Eigenschaft als der Rechtfertigungsinhalt und definitiv nicht nur für das Raster, aber ich finde, dass beim Umgang mit Text, worum es in dieser Frage speziell geht, der Text an der Mitte ausgerichtet wird, ohne den Raum zu beeinträchtigen zwischen Gitterelementen oder der vertikalen Zentrierung. Der Text wird horizontal zentriert, wo er auf seiner vertikalen Achse steht. Ich finde es auch, eine Komplexitätsebene zu entfernen, die Inhalte rechtfertigt und Elemente ausrichtet. Das Ausrichten von Inhalten und das Ausrichten von Elementen wirkt sich auf das gesamte Rasterelement oder die Elemente aus. Das Ausrichten von Text zentriert den Text, ohne den Container zu beeinflussen, in dem er sich befindet. Ich hoffe, dies hilft.
quelle