Ao criar um layout para um aplicativo web usando grade, tenho uma barra lateral que quero que seja tão larga quanto necessário para acomodar seu conteúdo (portanto, max-content
), MAS não quero que ela fique muito grande, digamos, não mais do que 20% da janela de visualização (portanto, 20vw
).
Pensei em usar algo tão simples como:
.page {
width: 100vw;
height: 100vh;
display: grid;
grid-template-columns: min(max-content, 20vw) 1fr;
grid-template-areas: "side main";
}
Mas o Firefox me informa que grid-template-columns
tem um valor incorreto e, portanto, é ignorado. Se eu simplesmente usar:
grid-template-columns: max-content 1fr;
Então funciona, mas não tenho a salvaguarda necessária para evitar uma barra lateral muito grande.
Palavras-chave como min-content
e max-content
não são permitidas em funções CSS?
Qual seria outra maneira de atingir meu objetivo aqui?
Parece que você está procurando pela função fit-content() :
Em vez de uma largura mínima intrínseca, tente uma largura mínima absoluta para o "lado" usando a
minmax()
função CSS. A demonstração abaixo permite definir ogrid-template-columns
valor das colunas esquerda e direita (dois<select>
s) e uma opção (caixa de seleção) para alterar para um layout flexível simples. Se o conteúdo do "lado" for pequeno, tudomax-content
bem, mas se o conteúdo for significativo, eu não recomendaria, a menos que você o limite emminmax()
"lado" e "principal". Se você definir um máximo,20vw
ele diminuirá e aumentará com a janela de visualização, portanto, é intrínseco e não se comportará como eu acho que você espera.Observação: você pode encontrar um bug muito irritante que afeta
<select>
o interior do Stack Snippet. Portanto, se o<select>
s não funcionar, vá para isto CodePen(recomendo ir lá, é mais fácil redimensionar a janela).Além disso, visualize a demonstração no Full pagemodo e redimensione a janela.
Eles não são permitidos em min(). Leia a documentação aqui .
Para especificar um intervalo de tamanhos, você deve usar minmax() . Isso é aceitável
max-content
, mas o conteúdo máximo não funciona como você supõe na grade.Em vez disso, ele fornece o maior tamanho que o conteúdo pode assumir. Nesse caso, ele nunca encolherá.
Você provavelmente está procurando
minmax(min-content, 20vw)
o seguinte:Além disso, se você deseja enfatizar o limite de 20vw, mesmo que seu conteúdo seja muito grande, você pode usar
minmax(auto, 20vw)
Você precisa realmente reduzir a largura para ver a diferença.
PS: Leia a descrição de min-content e auto keywords nos documentos para esclarecimentos.