从上到下而不是从左到右列出列中的项目

List items in columns from top to bottom instead of left to right

我有一个按字母顺序排列的国家/地区列表,例如:

Albania
Andorra
Armenia
Austria
Azerbaijan
Belarus
Belgium
Bosnia and Herzegovina
Bulgaria
Croatia
Cyprus
Czech Republic
Denmark
Estonia
Finland
France
Georgia
Germany
Greece
...

我将它们显示在列表中:

<ul class="mylist">
  <li>Albania</li>
  <li>Andorra</li>
  <li>Armenia</li>
  <li>Austria</li>
  <li>Azerbaijan</li>
  ...
</ul>

列表在大显示器上显示 4 列:

ul.mylist li {
    float: left;
    width: 25%;
}

和 2 个在小显示器上:

ul.mylist li {
    float: left;
    width: 50%;
}

这会产生如下列表(大显示):

Albania     Andorra  Armenia  Austria
Azerbaijan  Belarus  Belgium  Bosnia and Herzegovina
Bulgaria    Croatia...

好的,现在是棘手的部分:显示的国家/地区数量可能因过滤器选项而异。我想以另一种方式(从上到下,从左到右)对国家/地区进行排序,如下所示:

Albania     Bosnia and Herzegovina Finland   [4th col]
Andorra     Bulgaria               France    ...
Armenia     Croatia                Georgia
Austria     Cyprus                 Germany
Azerbaijan  Czech Republic         ...
Belarus     Denmark
Belgium     Estonia

如何做到牢记 CSS 会在小显示器上将列表折叠成 2 列?

使用 CSS3 multi-column layout for this. Browser support is questionable 所以请使用供应商前缀。

ul {
  margin: 0;
  padding: 0;
}
li {
  display: inline-block;
  width: 100%;
}
/* default */
ul {
     -moz-column-count: 4;
  -webkit-column-count: 4;
          column-count: 4;
}
/* < 800px */
@media screen and (max-width: 799px) {
  ul {
       -moz-column-count: 3;
    -webkit-column-count: 3;
            column-count: 3;
  }
}
/* < 400px */
@media screen and (max-width: 399px) {
  ul {
       -moz-column-count: 2;
    -webkit-column-count: 2;
            column-count: 2;
  }
}
<ul>
  <li>Albania</li>
  <li>Andorra</li>
  <li>Armenia</li>
  <li>Austria</li>
  <li>Azerbaijan</li>
  <li>Belarus</li>
  <li>Belgium</li>
  <li>Bosnia and Herzegovina</li>
  <li>Bulgaria</li>
  <li>Croatia</li>
  <li>Cyprus</li>
  <li>Czech Republic</li>
  <li>Denmark</li>
  <li>Estonia</li>
  <li>Finland</li>
  <li>France</li>
  <li>Georgia</li>
  <li>Germany</li>
  <li>Greece</li>
</ul>

只是为了从 Salman A 的回答中弄清楚(我只有在阅读了这个 post 的第三个解决方案后才理解他的回答——"Text Columns" 那个),代码的主要部分是将 li 顺序从左到右从上到下更改为:

ul {
  column-count: 4;
  column-gap: 0;
}
li {
  display: inline-block;
}

Salman 中的其他所有内容答案是针对 large/small 屏幕进行调整