Minha página da web tem uma lista 'skinny': por exemplo, uma lista de 100 itens de uma palavra cada. Para reduzir a rolagem, quero apresentar essa lista em duas ou até quatro colunas na página. Como devo fazer isso com CSS?
<ul>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ul>
Prefiro que a solução seja flexível, de modo que, se a lista aumentar para 200 itens, não precise fazer muitos ajustes manuais para acomodar a nova lista.
css
html-lists
user776676
fonte
fonte
Respostas:
A solução CSS é: http://www.w3.org/TR/css3-multicol/
O suporte do navegador é exatamente o que você esperaria.
Funciona "em qualquer lugar", exceto no Internet Explorer 9 ou anterior: http://caniuse.com/multicolumn
Veja: http://jsfiddle.net/pdExf/
Se o suporte do IE for necessário, você terá que usar JavaScript, por exemplo:
http://welcome.totheinter.net/columnizer-jquery-plugin/
Outra solução é voltar ao normal apenas
float: left
para o IE . O pedido estará errado, mas pelo menos será semelhante:Veja: http://jsfiddle.net/NJ4Hw/
Você pode aplicar esse fallback com o Modernizr se já estiver usando.
fonte
li
de cada coluna?list-style-position: inside;
que aborda especificamente o problema apontado por @vsync, acredito.li { break-inside: avoid; }
: jsfiddle.net/thirtydot/pdExf/903 . Não estou muito familiarizado com colunas CSS, então pode haver uma maneira melhor.Se você está procurando uma solução que funcione no IE também, você pode flutuar os elementos da lista para a esquerda. No entanto, isso resultará em uma lista que serpenteia, como esta:
Em vez de colunas organizadas, como:
O código para fazer isso seria:
Você pode adicionar uma borda inferior ao
li
s para tornar o fluxo dos itens da esquerda para a direita mais aparente.fonte
Se quiser um número predefinido de colunas, você pode usar contagem de colunas e lacuna de colunas, conforme mencionado acima.
No entanto, se você quiser uma única coluna com altura limitada que se quebraria em mais colunas se necessário, isso pode ser feito simplesmente mudando a exibição para flex.
Isso não funcionará no IE9 e alguns outros navegadores antigos. Você pode verificar o suporte em Posso usar
fonte
column-count
fará um número ímpar de linhas nas colunas. Como 6 itens na primeira coluna, depois 4, depois 6 e depois 5.Essa resposta não é necessariamente escalável, mas requer apenas pequenos ajustes conforme a lista cresce. Semanticamente, pode parecer um pouco contra-intuitivo, já que são duas listas, mas, fora isso, terá a aparência que você deseja em qualquer navegador já criado.
fonte
2020 - mantenha a simplicidade, use CSS Grid
Muitas dessas respostas estão desatualizadas, estamos em 2020 e não deveríamos permitir que pessoas que ainda usam o IE9. É muito mais simples usar a grade CSS .
O código é muito simples e você pode ajustar facilmente quantas colunas existem usando o
grid-template-columns
. Veja isso e brinque com este violino para atender às suas necessidades.fonte
Descobri que (atualmente) Chrome (
Version 52.0.2743.116 m
) tem toneladas de peculiaridades e problemas com css emcolumn-count
relação a itens de overflow e elementos posicionados absolutos dentro de itens, especialmente com algumas transições de dimensões.é uma bagunça total e não pode ser consertada, então tentei resolver isso por meio de javascript simples e criei uma biblioteca que faz isso - https://github.com/yairEO/listBreaker
Página de demonstração
fonte
Se você puder, CSS Grid é provavelmente a maneira mais limpa de fazer uma lista unidimensional em um layout de duas colunas com interiores responsivos.
Estas são as duas linhas principais que lhe darão o layout de 2 colunas
fonte
A primeira maneira para dispositivos móveis é usar CSS Columns para criar uma experiência para telas menores e, em seguida, usar Media Queries para aumentar o número de colunas em cada um dos pontos de interrupção definidos do layout.
fonte
Aqui está o que eu fiz
fonte