AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 78948277
Accepted
rschristian
rschristian
Asked: 2024-09-04 19:01:46 +0800 CST2024-09-04 19:01:46 +0800 CST 2024-09-04 19:01:46 +0800 CST

Reduza os espaços em branco finais com flex-wrap e filhos de largura dinâmica

  • 772

No meu site, tenho uma lista de tags que gostaria de exibir em um layout de estilo masonry, com linhas claramente definidas, mas sem colunas definidas. Isso pode ser facilmente alcançado por: flex-wrap: wrapsozinho, como mostrado aqui:

 body {
  background-color: red;
}

.wrapper {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  padding: .25rem;
  width: 12rem;
  background-color: lime;
}
.wrapper > div {
  color: white;
  background-color: black;
  padding: .25rem;
  border-radius: .25rem;
}
<div class="wrapper">
  <div>Lorem</div>
  <div>ipsum</div>
  <div>dolor</div>
  <div>sit</div>
  <div>amet</div>
  <div>consectetur</div>
  <div>adipiscing</div>
  <div>elit</div>
  <div>Duis</div>
  <div>lobortis</div>
  <div>tempor</div>
  <div>mauris</div>
  <div>vitae</div>
  <div>ornare</div>
</div>

O problema que estou enfrentando é que tende a haver uma calha na margem direita, de onde a linha não preencheu. Isso seria bom para uma ou duas linhas, mas tende a ser bem consistente, com 1 linha em uma dúzia sendo "cheia". Desculpe o desenho horrível, mas aqui está minha rápida tentativa de ilustrar isso:

Representação da imagem do código acima, mostrando o efeito "gutter" que eu gostaria de evitar

Como você pode imaginar, se você duplicar esta imagem algumas vezes verticalmente, há uma sarjeta bem óbvia no lado direito, o que cria um desequilíbrio com o conteúdo que se estende até a margem esquerda, em contraste.

Se entendi corretamente, esse é um problema conhecido, e algo que a especificação CSS Masonry , se progredir, tentará abordar, mas há alguma solução no momento? Justificar por linha de alguma forma, ou uma margem automática? Não tenho certeza, estou um pouco me agarrando a palhas. Fico feliz em mudar para outros métodos se houver uma maneira melhor do que flex-wrappara conseguir isso, mas tudo que vi gridparece ser sobre colunas e linhas bem definidas, que é precisamente o que eu não quero.

css
  • 1 1 respostas
  • 39 Views

1 respostas

  • Voted
  1. Best Answer
    Diego D
    2024-09-04T20:34:00+08:002024-09-04T20:34:00+08:00

    A maneira mais rápida de obter algo que se assemelhe a um layout de alvenaria usando um layout flexbox é permitir que seus itens diminuam e cresçam de acordo com o espaço restante, onde o próximo item não pode ser acomodado.

    https://developer.mozilla.org/en-US/docs/Web/CSS/flex

    Aqui a principal alteração que fiz no seu snippet foi usar:

    flex: 1 1 auto;
    

    O efeito colateral é não ter controle sobre o tamanho do item com antecedência porque ele fica dinâmico com base em quanto espaço é ocupado por sua largura mínima. Qualquer outra solução exigiria embaralhar a ordem dos itens para encontrar a maneira mais otimizada de organizá-los para preencher o espaço.

    Para compensar esse recurso, estilizei os itens flexíveis para que seu conteúdo ficasse alinhado ao centro.

    body {
      background-color: red;
    }
    
    .wrapper {
      display: flex;
      flex-wrap: wrap;
      gap: 1rem;
      padding: 0.25rem;
      width: 12rem;
      background-color: lime;
      
      /*here you set the fixed padding*/
      padding: 1em 1em;
    }
    
    .wrapper > div {
      color: white;
      background-color: black;
      padding: 0.25rem;
      border-radius: 0.25rem;
     
      /*here you allow flex items to shrink and grow*/
      /*shorthand for flex-grow flex-shrink flex-basis*/
      flex: 1 1 auto;  
      
      text-align: center;
    }
    <div class="wrapper">
      <div>Lorem</div>
      <div>ipsum</div>
      <div>dolor</div>
      <div>sit</div>
      <div>amet</div>
      <div>consectetur</div>
      <div>adipiscing</div>
      <div>elit</div>
      <div>Duis</div>
      <div>lobortis</div>
      <div>tempor</div>
      <div>mauris</div>
      <div>vitae</div>
      <div>ornare</div>
    </div>

    Se, em vez disso, você desejar manter a largura dos itens flexíveis inalterada, poderá instruir o layout a usar uma lacuna dinâmica para preencher o espaço restante em cada linha, mantendo o primeiro e o último, respectivamente, no início e no final da linha comjustify-content

    justify-content: space-between;
    

    body {
      background-color: red;
    }
    
    .wrapper {
      display: flex;
      flex-wrap: wrap;
      gap: 1rem;
      padding: 0.25rem;
      width: 12rem;
      background-color: lime;
      
      /*here you set the fixed padding*/
      padding: 1em 1em;
      
      justify-content: space-between;
    }
    
    .wrapper > div {
      color: white;
      background-color: black;
      padding: 0.25rem;
      border-radius: 0.25rem;      
    }
    <div class="wrapper">
      <div>Lorem</div>
      <div>ipsum</div>
      <div>dolor</div>
      <div>sit</div>
      <div>amet</div>
      <div>consectetur</div>
      <div>adipiscing</div>
      <div>elit</div>
      <div>Duis</div>
      <div>lobortis</div>
      <div>tempor</div>
      <div>mauris</div>
      <div>vitae</div>
      <div>ornare</div>
    </div>

    • 1

relate perguntas

  • Prettier/VS Code adicionando um espaço antes de !important no CSS, causando quebra no WordPress

  • Como enviar parâmetros dinâmicos do arquivo react tsx para css

  • Grade CSS: agrupar e ajustar ao conteúdo

  • É possível alinhar gradientes entre elementos?

  • Bordas arredondadas com Box Shadow - Tailwind CSS

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve