Quero ter a capacidade de fazer sangrias completas (exibindo um item de ponta a ponta na viewport) dentro da minha configuração de grade. Gostaria de ter o item com a classe full-bleed
para abranger a grade de design e a grade de wrapper.
Estou aberto a outras maneiras de construir o DOM para que isso funcione, mas gostaria de continuar usando grade em vez de posicionamento absoluto.
.wrapper-grid {
display: grid;
grid-template-columns: 1fr min(65ch, 100%) 1fr;
row-gap: 1rem;
}
.design-grid {
display: grid;
/* I can't have subgrid and declare a new grid */
/* grid-template-clomns: subgrid; */
grid-template-columns: repeat(4, 1fr);
gap: 1rem;
}
.wrapper-grid>* {
grid-column: 2;
}
.full-bleed {
grid-column: 1 / -1;
}
.item {
height: 40px;
background-color: #f1f1f1;
}
<body class="wrapper-grid">
<div class="design-grid">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item full-bleed">This item should go to both edges of the viewport</div>
<div class="item"></div>
</div>
</body>
Aqui está uma ideia usando margem com algum cálculo. Além disso, você não precisa usar uma configuração de grade aninhada. Uma grade é o suficiente.
Artigo relacionado do meu blog para entender o uso de
margin-inline
: https://css-tip.com/center-max-width/E caso você queira manter sua grade aninhada
Você pode criar sua grade usando mais colunas do que o conteúdo requer e, então, ajustar a extensão das colunas na linha que precisa preencher a largura da tela.
Observação: provavelmente existe um método menor, mas espero que isso tenha esclarecido a questão.