Moja strona internetowa ma „wąską” listę: na przykład listę 100 elementów o długości jednego słowa. Aby ograniczyć przewijanie, chcę przedstawić tę listę w dwóch lub nawet czterech kolumnach na stronie. Jak mam to zrobić z 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>
Wolę, aby rozwiązanie było elastyczne, więc jeśli lista powiększy się do 200 pozycji, nie będę musiał wykonywać wielu ręcznych dostosowań, aby dostosować się do nowej listy.
css
html-lists
user776676
źródło
źródło
Odpowiedzi:
Rozwiązanie CSS to: http://www.w3.org/TR/css3-multicol/
Obsługa przeglądarki jest dokładnie tym, czego można się spodziewać.
Działa „wszędzie” z wyjątkiem Internet Explorera 9 lub starszego: http://caniuse.com/multicolumn
Zobacz: http://jsfiddle.net/pdExf/
Jeśli wymagana jest obsługa IE, będziesz musiał użyć JavaScript, na przykład:
http://welcome.totheinter.net/columnizer-jquery-plugin/
Innym rozwiązaniem jest powrót do normalnego tylko
float: left
dla IE . Kolejność będzie błędna, ale przynajmniej będzie wyglądać podobnie:Zobacz: http://jsfiddle.net/NJ4Hw/
Możesz zastosować tę rezerwę za pomocą Modernizr, jeśli już jej używasz.
źródło
li
w każdej kolumnie?list-style-position: inside;
która w szczególności rozwiązuje problem wskazany przez @vsync, jak sądzę.li { break-inside: avoid; }
: jsfiddle.net/thirtydot/pdExf/903 . Nie znam kolumn CSS, więc może być lepszy sposób.Jeśli szukasz rozwiązania, które działa również w IE, możesz przesunąć elementy listy w lewo. Jednak spowoduje to listę, która wije się wokół, na przykład:
Zamiast zgrabnych kolumn, takich jak:
Kod, który to zrobi, to:
Możesz dodać obramowanie do dołu do
li
s, aby przepływ elementów od lewej do prawej był bardziej widoczny.źródło
Jeśli chcesz mieć określoną liczbę kolumn, możesz użyć liczby kolumn i odstępu między kolumnami, jak wspomniano powyżej.
Jeśli jednak potrzebujesz pojedynczej kolumny o ograniczonej wysokości, która w razie potrzeby podzieliłaby się na więcej kolumn, można to osiągnąć w prosty sposób, zmieniając wyświetlanie na flex.
To nie zadziała w IE9 i niektórych innych starszych przeglądarkach. Możesz sprawdzić wsparcie na Czy mogę użyć
źródło
column-count
zrobi nierówną liczbę wierszy w kolumnach. Jak 6 pozycji w pierwszej kolumnie, potem 4, potem 6, potem 5.Ta odpowiedź niekoniecznie jest skalowana, ale wymaga jedynie niewielkich korekt w miarę powiększania się listy. Semantycznie może się to wydawać trochę sprzeczne z intuicją, ponieważ są to dwie listy, ale poza tym będzie wyglądać tak, jak chcesz w każdej przeglądarce.
źródło
2020 - nie komplikuj, używaj siatki CSS
Wiele z tych odpowiedzi jest nieaktualnych, jest rok 2020 i nie powinniśmy włączać osób, które nadal używają IE9. O wiele prostsze jest użycie siatki CSS .
Kod jest bardzo prosty i możesz łatwo dostosować liczbę kolumn za pomocą
grid-template-columns
. Zobacz to, a następnie pobaw się tymi skrzypcami, aby dopasować je do swoich potrzeb.źródło
Zauważyłem, że (obecnie) Chrome (
Version 52.0.2743.116 m
) ma mnóstwo dziwactw i problemów z csscolumn-count
dotyczących elementów przepełnionych i elementów pozycjonowanych bezwzględnie w elementach, szczególnie w przypadku niektórych przejść wymiarów.to totalny bałagan i nie można go naprawić, więc próbowałem rozwiązać ten problem za pomocą prostego javascript i utworzyłem bibliotekę, która to robi - https://github.com/yairEO/listBreaker
Strona demonstracyjna
źródło
Jeśli możesz to wesprzeć Siatka CSS jest prawdopodobnie najczystszym sposobem na utworzenie jednowymiarowej listy w układzie dwóch kolumn z responsywnymi wnętrzami.
To są dwie kluczowe linie, które dadzą ci układ 2 kolumn
źródło
Pierwszy sposób na urządzenia mobilne polega na użyciu kolumn CSS do tworzenia wrażeń na mniejszych ekranach, a następnie za pomocą zapytań o media w celu zwiększenia liczby kolumn w każdym ze zdefiniowanych punktów przerwania układu.
źródło
Oto co zrobiłem
źródło