Czy istnieje sposób na podział listy na kolumny?
Moja strona ma "chudą" listę: na przykład listę 100 pozycji o długości jednego słowa. Aby zmniejszyć przewijanie, chcę przedstawić tę listę w dwóch lub nawet czterech kolumnach na stronie. Jak 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 zwiększy się do 200 pozycji, nie muszę robić wielu ręcznych korekt, aby dostosować się do nowej listy.
6 answers
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
ul {
-moz-column-count: 4;
-moz-column-gap: 20px;
-webkit-column-count: 4;
-webkit-column-gap: 20px;
column-count: 4;
column-gap: 20px;
}
Zobacz też: http://jsfiddle.net/pdExf/
Jeśli wymagana jest obsługa IE, musisz użyć JavaScript, dla przykład:
Http://welcome.totheinter.net/columnizer-jquery-plugin/
Innym rozwiązaniem jest powrót do normalnego float: left
dla TYLKO IE. Kolejność będzie błędna, ale przynajmniej będzie wyglądać podobnie:
Zobacz też: http://jsfiddle.net/NJ4Hw/
<!--[if lt IE 10]>
<style>
li {
width: 25%;
float: left
}
</style>
<![endif]-->
Możesz zastosować ten fallback za pomocą Modernizr jeśli już go używasz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-12 20:14:14
Jeśli szukasz rozwiązania, które działa również w IE, możesz przenieść elementy listy po lewej stronie. Jednak to spowoduje, że lista będzie się kręcić wokół, jak Ta:
item 1 | item 2 | item 3
item 4 | item 5
Zamiast schludnych kolumn, np.:
item 1 | item 4
item 2 |
item 3 |
Kod do tego to:
ul li {
width:10em;
float:left;
}
Możesz dodać border-bottom do li
s, aby przepływ elementów od lewej do prawej był bardziej widoczny.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-28 15:52:33
Jeśli chcesz mieć ustawioną liczbę kolumn, możesz użyć column-count i column-gap, jak wspomniano powyżej.
Jeśli jednak chcesz mieć pojedynczą kolumnę o ograniczonej wysokości, która w razie potrzeby podzieliłaby się na więcej kolumn, można to osiągnąć po prostu zmieniając wyświetlacz na flex.
To nie zadziała na IE9 i niektórych innych starych przeglądarkach. Możesz sprawdzić wsparcie na Czy mogę użyć
<style>
ul {
display: -ms-flexbox; /* IE 10 */
display: -webkit-flex; /* Safari 6.1+. iOS 7.1+ */
display: flex;
-webkit-flex-flow: wrap column; /* Safari 6.1+ */
flex-flow: wrap column;
max-height: 150px; /* Limit height to whatever you need */
}
</style>
<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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-06 10:28:14
Odkryłem, że (obecnie) Chrome (Version 52.0.2743.116 m
) ma mnóstwo dziwactw i problemów z css column-count
dotyczących elementów przelewowych i bezwzględnych elementów umieszczonych wewnątrz elementów, szczególnie przy niektórych przejściach wymiarów..
To totalny bałagan i nie można go naprawić, więc próbowałem rozwiązać to za pomocą prostego javascript i stworzyłem bibliotekę, która to robi - https://github.com/yairEO/listBreaker
Strona Demo
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-21 14:24:34
Ta odpowiedź nie musi skalować , ale wymaga tylko drobnych poprawek w miarę wzrostu listy. Semantycznie może to wydawać się trochę sprzeczne z intuicją, ponieważ są to dwie listy, ale poza tym będzie wyglądać tak, jak chcesz w każdej przeglądarce, jaką kiedykolwiek stworzono.
ul {
float: left;
}
ul > li {
width: 6em;
}
<!-- Column 1 -->
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<!-- Column 2 -->
<ul>
<li>Item 4</li>
<li>Item 5</li>
<li>Item 6</li>
</ul>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-21 20:04:44
Jeśli możesz go wspierać CSS Grid jest prawdopodobnie najczystszym sposobem na tworzenie jednowymiarowej listy w układzie dwóch kolumn z responsywnymi wnętrzami.
ul {
max-width: 400px;
display: grid;
grid-template-columns: 50% 50%;
padding-left: 0;
border: 1px solid blue;
}
li {
list-style: inside;
border: 1px dashed red;
padding: 10px;
}
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<ul>
Są to dwie kluczowe linie, które dadzą ci układ 2 kolumn
display: grid;
grid-template-columns: 50% 50%;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-01 15:17:12