Estou pensando em como criar um layout com quadrados responsivos . Cada quadrado teria conteúdo alinhado vertical e horizontalmente . O exemplo específico é exibido abaixo ...
html
css
responsive-design
grid-layout
aspect-ratio
garethdn
fonte
fonte
Respostas:
Você pode criar uma grade de quadrados responsiva com conteúdo centralizado na vertical e na horizontal apenas com CSS . Vou explicar como em um processo passo a passo, mas primeiro aqui estão duas demos do que você pode conseguir:
Agora vamos ver como fazer esses quadrados responsivos sofisticados!
1. Fazendo os quadrados responsivos:
O truque para manter os elementos quadrados (ou qualquer outra razão de aspecto) é usar porcentagem
padding-bottom
.Nota lateral: você também pode usar o preenchimento superior ou a margem superior / inferior, mas o plano de fundo do elemento não será exibido.
Como o preenchimento superior é calculado de acordo com a largura do elemento pai ( consulte MDN para referência ), a altura do elemento muda de acordo com sua largura. Agora você pode manter sua proporção de acordo com sua largura.
Neste ponto, você pode codificar:
HTML :
CSS
Aqui está um exemplo de layout simples da grade de quadrados 3 * 3 usando o código acima.
Com esta técnica, você pode fazer qualquer outra proporção, aqui está uma tabela que fornece os valores do preenchimento inferior de acordo com a proporção e uma largura de 30%.
2. Adicionando conteúdo dentro dos quadrados
Como você não pode adicionar conteúdo diretamente dentro dos quadrados (isso aumentaria sua altura e os quadrados não seriam mais quadrados), você precisa criar elementos filhos (neste exemplo, estou usando divs) dentro deles
position: absolute;
e colocar o conteúdo dentro deles . Isso retirará o conteúdo do fluxo e manterá o tamanho do quadrado.Não se esqueça de adicionar
position:relative;
as divs pai, para que os filhos absolutos sejam posicionados / dimensionados em relação ao pai.Vamos adicionar algum conteúdo à nossa grade de quadrados 3x3:
HTML :
CSS :
RESULTADO <- com alguma formatação para torná-lo bonito!
3.Centralizar o conteúdo
Horizontalmente:
Isso é muito fácil, você só precisa adicionar
text-align:center
ao.content
.RESULTADO
Alinhamento vertical
Isso se torna sério! O truque é usar
mas não podemos usar
display:table;
on.square
ou.content
divs porque ele entra em conflito com,position:absolute;
então precisamos criar dois filhos dentro de.content
divs. Nosso código será atualizado da seguinte forma:HTML :
CSS:
Terminamos agora e podemos dar uma olhada no resultado aqui:
RESULTADO AO VIVO EM Tela Cheia
violino editável aqui
fonte
* { box-sizing: border-box; }
alerta para os outros: se você estiver usando, será necessário ajustar a altura e a largura na div .content para 100%. :)justify-content: center; align-items: center; flex-flow: column nowrap;
Você pode usar unidades vw (largura da visualização), o que tornaria os quadrados responsivos de acordo com a largura da tela.
Uma rápida maquete disso seria:
fonte
margin-left: -4px;
usemargin-right:-4px
. Prefiro não mexa com inconsistência na mincharspace mas definido para um invólucro pai font-size a 0 e que para os elementos filhos redefinir a1rem
(relativa-em)A resposta aceita é ótima, no entanto, isso pode ser feito
flexbox
.Aqui está um sistema de grade escrito com sintaxe BEM que permite que 1 a 10 colunas sejam exibidas por linha.
Se a última linha estiver incompleta (por exemplo, você escolhe mostrar 5 células por linha e há 7 itens), os itens finais serão centralizados horizontalmente. Para controlar o alinhamento horizontal dos itens à direita, basta alterar a
justify-content
propriedade na.square-grid
classe.Mostrar snippet de código
Fiddle: https://jsfiddle.net/patrickberkeley/noLm1r45/3/
Isso é testado no FF e no Chrome.
fonte
Eu uso esta solução para caixas responsivas de diferentes rações:
HTML:
CSS:
Veja a demonstração em JSfiddle.net
fonte