Estoy tratando de crear una página simple con CSS Grid.
Lo que no puedo hacer es centrar el texto del HTML en las celdas de la cuadrícula respectiva.
He intentado contenido puesta en distintos div
s tanto dentro como fuera de la left_bg
y right_bg
selectores de juego y con algunas de las propiedades CSS en vano.
¿Cómo hago esto?
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>
Respuestas:
Esta respuesta tiene dos secciones principales:
Si solo está interesado en las soluciones, omita la primera sección.
La estructura y el alcance del diseño de cuadrícula
Para comprender completamente cómo funciona el centrado en un contenedor de cuadrícula, es importante comprender primero la estructura y el alcance del diseño de la cuadrícula.
La estructura HTML de un contenedor de cuadrícula tiene tres niveles:
Cada uno de estos niveles es independiente de los demás, en términos de aplicación de propiedades de cuadrícula.
El alcance de un contenedor de cuadrícula se limita a una relación padre-hijo.
Esto significa que un contenedor de cuadrícula es siempre el elemento primario y un elemento de cuadrícula es siempre el elemento secundario. Las propiedades de cuadrícula solo funcionan dentro de esta relación.
Los descendientes de un contenedor de cuadrícula más allá de los elementos secundarios no forman parte del diseño de cuadrícula y no aceptarán propiedades de cuadrícula. (Al menos no hasta que
subgrid
se haya implementado la característica, lo que permitirá a los descendientes de los elementos de la cuadrícula respetar las líneas del contenedor primario).Aquí hay un ejemplo de los conceptos de estructura y alcance descritos anteriormente.
Imagine una cuadrícula de tres en raya.
Desea que las X y O estén centradas en cada celda.
Entonces aplica el centrado a nivel de contenedor:
Pero debido a la estructura y el alcance del diseño de la cuadrícula,
justify-items
en el contenedor se centran los elementos de la cuadrícula, no el contenido (al menos no directamente).Mostrar fragmento de código
Mismo problema con
align-items
: El contenido puede estar centrado como un subproducto, pero ha perdido el diseño del diseño.Mostrar fragmento de código
Para centrar el contenido, debe adoptar un enfoque diferente. Refiriéndose nuevamente a la estructura y el alcance del diseño de la cuadrícula, debe tratar el elemento de la cuadrícula como principal y el contenido como secundario.
Mostrar fragmento de código
jsFiddle demo
Seis métodos para centrar en la cuadrícula CSS
Existen varios métodos para centrar elementos de cuadrícula y su contenido.
Aquí hay una grilla básica de 2x2:
Flexbox
Para una forma simple y fácil de centrar el contenido de los elementos de la cuadrícula, use flexbox.
Más específicamente, convierta el elemento de la cuadrícula en un contenedor flexible.
No hay conflicto, violación de especificaciones u otro problema con este método. Es limpio y válido.
Mostrar fragmento de código
Vea esta publicación para una explicación completa:
Diseño de cuadrícula
De la misma manera que un elemento flexible también puede ser un contenedor flexible, un elemento de cuadrícula también puede ser un contenedor de cuadrícula. Esta solución es similar a la solución flexbox anterior, excepto que el centrado se realiza con propiedades de cuadrícula, no flex.
Mostrar fragmento de código
auto
márgenesÚselo
margin: auto
para centrar vertical y horizontalmente los elementos de la cuadrícula.Mostrar fragmento de código
Para centrar el contenido de los elementos de la cuadrícula, debe convertir el elemento en un contenedor de cuadrícula (o flex), envolver los elementos anónimos en sus propios elementos ( ya que CSS no puede orientarlos directamente ) y aplicar los márgenes a los nuevos elementos.
Mostrar fragmento de código
Propiedades de alineación de caja
Cuando considere usar las siguientes propiedades para alinear los elementos de la cuadrícula, lea la sección sobre
auto
márgenes de arriba.align-items
justify-items
align-self
justify-self
https://www.w3.org/TR/css-align-3/#property-index
text-align: center
Para centrar el contenido horizontalmente en un elemento de cuadrícula, puede usar la
text-align
propiedad.Mostrar fragmento de código
Tenga en cuenta que para el centrado vertical,
vertical-align: middle
no funcionará.Esto se debe a que la
vertical-align
propiedad solo se aplica a los contenedores en línea y de celda de tabla.Mostrar fragmento de código
Se podría decir que
display: inline-grid
establece un contenedor de nivel en línea, y eso sería cierto. Entonces, ¿por qué novertical-align
funciona en elementos de cuadrícula?La razón es que en un contexto de formato de cuadrícula , los elementos se tratan como elementos a nivel de bloque.
En un contexto de formato de bloque , algo para lo que la
vertical-align
propiedad fue diseñada originalmente, el navegador no espera encontrar un elemento de nivel de bloque en un contenedor de nivel en línea. Eso es HTML inválido.Posicionamiento CSS
Por último, hay una solución de centrado de CSS general que también funciona en Grid: posicionamiento absoluto
Este es un buen método para centrar objetos que deben eliminarse del flujo de documentos. Por ejemplo, si quieres:
Simplemente establezca
position: absolute
el elemento que se va a centrar yposition: relative
el antepasado que servirá como bloque de contención (generalmente es el padre). Algo como esto:Mostrar fragmento de código
Aquí hay una explicación completa de cómo funciona este método:
Aquí está la sección sobre posicionamiento absoluto en la especificación de cuadrícula:
fuente
grid-container
ygrid-item
son etiquetas HTML?flex
ygrid
,align-items
sigue siendo el mismo, pero por alguna razónjustify-content
se convierte enjustify-items
Puede usar flexbox para centrar su texto. Por cierto, no se necesitan contenedores adicionales porque el texto se considera un elemento flexible anónimo.
De las especificaciones de flexbox :
Así que solo haga elementos de cuadrícula como contenedores flexibles (
display: flex
), y agreguealign-items: center
yjustify-content: center
centre tanto vertical como horizontalmente.También se realizó la optimización de HTML y CSS:
fuente
Ni siquiera intentes usar flex; quédate con css grid !! :)
https://jsfiddle.net/ctt3bqr0/
está haciendo el trabajo de centrado aquí.
Si desea centrar algo que está dentro
div
que está dentro de la celda de la cuadrícula, debe definir la cuadrícula anidada para que funcione. (Mire el violín de los dos ejemplos que se muestran allí).https://css-tricks.com/snippets/css/complete-guide-grid/
¡Salud!
fuente
place-self: center;
.La propiedad abreviada CSS place-items establece las propiedades align-items y justify-items, respectivamente. Si el segundo valor no está configurado, el primer valor también se usa para ello.
fuente
place-items
actualmente no es compatible con edgeIntenta usar flex:
Demostración de Plunker: https://plnkr.co/edit/nk02ojKuXD2tAqZiWvf9
HTML
fuente
¿Tu quieres esto?
fuente
.text{ font-family: Raleway; font-size: large; text-align: center; -webkit-transform: rotate(-90deg); -moz-transform: rotate(-90deg); }
Sé que esta pregunta tiene un par de años, pero me sorprende descubrir que nadie sugirió:
esta es una propiedad más universal que justify-content, y definitivamente no es exclusiva de la cuadrícula, pero encuentro que cuando se trata de texto, que es lo que esta pregunta específicamente pregunta, alinea el texto al centro sin afectar el espacio entre elementos de la cuadrícula o el centrado vertical. Centra el texto horizontalmente donde se encuentra en su eje vertical. También encuentro que elimina una capa de complejidad que justifica el contenido y alinea los elementos agregados. justify-content y align-items afecta a todo el elemento o elementos de la cuadrícula, text-align centra el texto sin afectar el contenedor en el que se encuentra. Espero que esto ayude.
fuente