【问题标题】:List in columns layout depending on viewport width根据视口宽度在列布局中列出
【发布时间】:2017-09-11 22:40:56
【问题描述】:

如何使用 CSS从一个列表中创建多个列
列数必须根据媒体查询的屏幕宽度而变化,如下所示:

大屏:

Row1 Row6  Row11
Row2 Row7  Row12
Row3 Row8  Row13
Row4 Row9  Row14
Row5 Row10

中屏:

Row1 Row8
Row2 Row9
Row3 Row10
Row4 Row11
Row5 Row12
Row6 Row13
Row7 Row14

小屏幕:

Row1
Row2
Row3
Row4
Row5
Row6
Row7
Row8
Row9
Row10
Row11
Row12
Row13
Row14

这是我的 HTML 代码:

<ul>
  <li>Row1</li>
  <li>Row2</li>
  <li>Row3</li>
  <li>Row4</li>
  <li>Row5</li>
  <li>Row6</li>
  <li>Row7</li>
  <li>Row8</li>
  <li>Row9</li>
  <li>Row10</li>
  <li>Row11</li>
  <li>Row12</li>
  <li>Row13</li>
  <li>Row14</li>
</ul>

【问题讨论】:

    标签: html css responsive-design css-multicolumn-layout


    【解决方案1】:

    您可以使用CSS multi-column layout 执行此操作。仅仅添加support 并不是最好的。

    或者,如果您可以在 ul 上设置固定高度,您可以像这样使用 Flexboxflex-direction: column; DEMO,但它并不是真正“灵活”的解决方案。

    ul {
      -webkit-column-count: 3; /* Chrome, Safari, Opera */
      -moz-column-count: 3; /* Firefox */
       column-count: 3;
       list-style-type: none;
    }
    
    @media(max-width: 992px) {
      ul {
        -webkit-column-count: 2; /* Chrome, Safari, Opera */
        -moz-column-count: 2; /* Firefox */
         column-count: 2;
      }
    }
    
    @media(max-width: 480px) {
      ul {
        -webkit-column-count: 1; /* Chrome, Safari, Opera */
        -moz-column-count: 1; /* Firefox */
         column-count: 1;
      }
    }
    <ul>
      <li>Row1</li>
      <li>Row2</li>
      <li>Row3</li>
      <li>Row4</li>
      <li>Row5</li>
      <li>Row6</li>
      <li>Row7</li>
      <li>Row8</li>
      <li>Row9</li>
      <li>Row10</li>
      <li>Row11</li>
      <li>Row12</li>
      <li>Row13</li>
      <li>Row14</li>
    </ul>

    【讨论】:

      【解决方案2】:

      您可以结合使用CSS columnsmedia queries 来根据视口宽度更改列数。

      在以下示例中,当视口为 700 像素宽时,列从 3 变为 2,当视口为 500 像素宽时,列从 2 变为 1。
      请注意,您不需要为窄视口指定任何内容,因为一列显示是默认布局,并且仅从您所谓的“中间屏幕”开始指定 columns

      @media (min-width: 500px){  
        ul{
          -webkit-columns: 2;
          -moz-columns: 2;
          columns: 2;
        }
      }
      @media (min-width: 700px){  
        ul{
          -webkit-columns: 3;
          -moz-columns: 3;
          columns: 3;
        }
      }
      <ul>
        <li>Row1</li>
        <li>Row2</li>
        <li>Row3</li>
        <li>Row4</li>
        <li>Row5</li>
        <li>Row6</li>
        <li>Row7</li>
        <li>Row8</li>
        <li>Row9</li>
        <li>Row10</li>
        <li>Row11</li>
        <li>Row12</li>
        <li>Row13</li>
        <li>Row14</li>
      </ul>

      请注意,columns 属性需要以供应商为前缀以最大限度地支持浏览器,IE10+ 支持它(更多信息请参阅canIuse)。

      【讨论】:

        【解决方案3】:

        这是一个简单的解决方案,但在旧浏览器上更受欢迎。

        您可以通过调整 LI 的大小并将它们显示为 inline-block 来划分 LI。

        在这种情况下,当屏幕大于 768px 时,4 列 25% 宽度,当屏幕小于 768px 时,2 列。 (您可以添加任意数量的媒体查询)

        li {
            width: 25%;
            display: inline-block;
            margin: 0 -2px;
          }
        
        @media (max-width: 768px){  
          li{
                width: 50%;
          }
        }
        <ul>
          <li>Row1</li>
          <li>Row2</li>
          <li>Row3</li>
          <li>Row4</li>
          <li>Row5</li>
          <li>Row6</li>
          <li>Row7</li>
          <li>Row8</li>
          <li>Row9</li>
          <li>Row10</li>
          <li>Row11</li>
          <li>Row12</li>
          <li>Row13</li>
          <li>Row14</li>
        </ul>

        【讨论】:

        • 这实际上并没有满足 OP 的要求。
        猜你喜欢
        • 1970-01-01
        • 2012-06-03
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        • 1970-01-01
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多