Estou tentando criar uma página simples com CSS Grid.
O que não estou conseguindo fazer é centralizar o texto do HTML para as respectivas células da grade.
Eu tentei conteúdo colocação em separado div
s tanto dentro como fora do left_bg
e right_bg
seletores e brincando com algumas das propriedades CSS sem sucesso.
Como eu faço isso?
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>
Respostas:
Esta resposta tem duas seções principais:
Se você estiver interessado apenas nas soluções, pule a primeira seção.
A estrutura e o escopo do layout de grade
Para entender completamente como a centralização funciona em um contêiner de grade, é importante primeiro entender a estrutura e o escopo do layout da grade.
A estrutura HTML de um contêiner de grade possui três níveis:
Cada um desses níveis é independente dos outros, em termos de aplicação das propriedades da grade.
O escopo de um contêiner de grade é limitado a um relacionamento pai-filho.
Isso significa que um contêiner de grade é sempre o pai e um item de grade é sempre o filho. As propriedades da grade funcionam apenas dentro desse relacionamento.
Descendentes de um contêiner de grade além dos filhos não fazem parte do layout da grade e não aceitarão propriedades da grade. (Pelo menos não até que o
subgrid
recurso seja implementado, o que permitirá que os descendentes de itens da grade respeitem as linhas do contêiner primário.)Aqui está um exemplo dos conceitos de estrutura e escopo descritos acima.
Imagine uma grade do tipo tic-tac-toe.
Você quer que os X e O estejam centralizados em cada célula.
Então você aplica a centralização no nível do contêiner:
Porém, devido à estrutura e ao escopo do layout da grade,
justify-items
o contêiner centraliza os itens da grade, não o conteúdo (pelo menos não diretamente).Mostrar snippet de código
Mesmo problema com
align-items
: o conteúdo pode ser centralizado como subproduto, mas você perdeu o design do layout.Mostrar snippet de código
Para centralizar o conteúdo, você precisa adotar uma abordagem diferente. Referindo-se novamente à estrutura e ao escopo do layout da grade, você precisa tratar o item da grade como pai e o conteúdo como filho.
Mostrar snippet de código
Demonstração do jsFiddle
Seis métodos para centralizar na grade CSS
Existem vários métodos para centralizar itens da grade e seu conteúdo.
Aqui está uma grade 2x2 básica:
Flexbox
Para uma maneira simples e fácil de centralizar o conteúdo dos itens da grade, use o flexbox.
Mais especificamente, transforme o item da grade em um contêiner flexível.
Não há conflito, violação de especificação ou outro problema com este método. É limpo e válido.
Mostrar snippet de código
Veja este post para uma explicação completa:
Layout da grade
Da mesma maneira que um item flexível também pode ser um contêiner flexível, um item de grade também pode ser um contêiner de grade. Essa solução é semelhante à solução flexbox acima, exceto que a centralização é feita com propriedades de grade, e não flex.
Mostrar snippet de código
auto
margensUse
margin: auto
para centralizar vertical e horizontalmente os itens da grade.Mostrar snippet de código
Para centralizar o conteúdo dos itens de grade, você precisa transformá-lo em um contêiner de grade (ou flex), agrupar itens anônimos em seus próprios elementos ( já que eles não podem ser direcionados diretamente pelo CSS ) e aplicar as margens aos novos elementos.
Mostrar snippet de código
Propriedades de alinhamento de caixa
Ao considerar usar as seguintes propriedades para alinhar itens da grade, leia a seção nas
auto
margens acima.align-items
justify-items
align-self
justify-self
https://www.w3.org/TR/css-align-3/#property-index
text-align: center
Para centralizar o conteúdo horizontalmente em um item de grade, você pode usar a
text-align
propriedadeMostrar snippet de código
Observe que, para centralização vertical,
vertical-align: middle
não funcionará.Isso ocorre porque a
vertical-align
propriedade se aplica apenas a contêineres embutidos e de célula da tabela.Mostrar snippet de código
Pode-se dizer que
display: inline-grid
estabelece um contêiner em nível de linha e isso seria verdade. Então, por que nãovertical-align
funciona em itens de grade?O motivo é que, em um contexto de formatação de grade , os itens são tratados como elementos no nível do bloco.
Em um contexto de formatação de bloco , algo para o qual a
vertical-align
propriedade foi projetada originalmente, o navegador não espera encontrar um elemento em nível de bloco em um contêiner em nível de linha. Isso é HTML inválido.Posicionamento CSS
Por fim, existe uma solução geral de centralização CSS que também funciona no Grid: posicionamento absoluto
Este é um bom método para centralizar objetos que precisam ser removidos do fluxo de documentos. Por exemplo, se você deseja:
Basta definir
position: absolute
o elemento a ser centralizado eposition: relative
o ancestral que servirá como bloco de contenção (geralmente é o pai). Algo assim:Mostrar snippet de código
Aqui está uma explicação completa de como esse método funciona:
Aqui está a seção sobre posicionamento absoluto na especificação Grid:
fonte
grid-container
&grid-item
são tags HTML?flex
egrid
,align-items
permanece o mesmo, mas por algum motivojustify-content
se tornajustify-items
Você pode usar o flexbox para centralizar seu texto. A propósito, não há necessidade de contêineres extras, porque o texto é considerado como item flexível anônimo.
Das especificações do flexbox :
Portanto, basta criar itens de grade como contêineres flexíveis (
display: flex
) e adicionaralign-items: center
ejustify-content: center
centralizar vertical e horizontalmente.Também realizou otimização de HTML e CSS:
fonte
Nem tente usar o flex; ficar com grade css !! :)
https://jsfiddle.net/ctt3bqr0/
está fazendo o trabalho de centralização aqui.
Se você deseja centralizar algo que está dentro da
div
célula da grade, é necessário definir a grade aninhada para fazê-la funcionar. (Observe o violino nos dois exemplos mostrados lá.)https://css-tricks.com/snippets/css/complete-guide-grid/
Felicidades!
fonte
place-self: center;
.A propriedade abreviada de CSS place-items define as propriedades align-items e justify-items, respectivamente. Se o segundo valor não estiver definido, o primeiro valor também será usado para ele.
fonte
place-items
atualmente não é suportado na bordaTente usar o flex:
Demonstração do Plunker: https://plnkr.co/edit/nk02ojKuXD2tAqZiWvf9
HTML
fonte
Você quer isso?
fonte
.text{ font-family: Raleway; font-size: large; text-align: center; -webkit-transform: rotate(-90deg); -moz-transform: rotate(-90deg); }
Eu sei que essa pergunta tem alguns anos, mas estou surpreso ao descobrir que ninguém sugeriu:
essa é uma propriedade mais universal que o conteúdo justificado e definitivamente não é exclusiva da grade, mas acho que, ao lidar com texto, que é especificamente o que esta pergunta pergunta, ele alinha o texto ao centro sem afetar o espaço entre os itens da grade ou a centralização vertical. Ele centraliza o texto horizontalmente onde fica em seu eixo vertical. Também acho que ele remove uma camada de complexidade que justifica o conteúdo e o alinhamento de itens. justificar conteúdo e alinhar itens afeta o item ou os itens da grade inteira, alinhar o texto centraliza o texto sem afetar o contêiner em que está. Espero que ajude.
fonte