【问题标题】:Responsive 3 column响应式 3 列
【发布时间】:2021-08-23 17:23:01
【问题描述】:

我希望我的 3 列能够在移动设备上响应,但我无法做到。我要添加什么,或者如何使它工作? :) 我知道这可能是一个愚蠢的问题,但我是晚餐初学者,正在努力学习。谢谢

这是我正在使用的代码:

<ul style="-webkit-column-count: 3; -moz-column-count: 3; column-count: 3; column-gap: 310px;">
    <li>
       <p>aaa</p>
    </li>
    <li>
       <p>bbb</p>
    </li>
    <li>
       <p>ccc</p>
    </li>
    <li>
       <p>ddd</p>
    </li>
    <li>
       <p>eee</p>
    </li>
    <li>
       <p>fff</p>
    </li>
    <li>
       <p>ggg</p>
    </li>
    <li>
       <p>hhh</p>
    </li>
    <li>
       <p>iii</p>
    </li>
</ul> 

【问题讨论】:

  • 请提供更多细节,你有设计或什么的吗? how to ask
  • @MikeTung 对不起,是的,这是我的设计:imgur.com/a/LjeTybG
  • 响应?你的意思是如果窗口太小它应该变成 2 列还是只有 1 列?
  • @G-Cyrillus 我没有偏好,但如果我不得不选择的话,可能会有一个:) 任何一种方式都可以

标签: html css responsive-design multiple-columns responsive


【解决方案1】:

提示来自您的评论

@G-Cyrillus 我没有偏好,但如果我必须选择的话,可能会有一个:) 任何一种方式都可以

您可以使用 column-width 代替 column-count 并最终使用 clamp() 调整大小:

li {border:1px solid;margin-bottom:2px}
<ul style=" column-width: clamp(310px, 30vw, 800px); ">
  <li>
    <p>aaa</p>
  </li>
  <li>
    <p>bbb</p>
  </li>
  <li>
    <p>ccc</p>
  </li>
  <li>
    <p>ddd</p>
  </li>
  <li>
    <p>eee</p>
  </li>
  <li>
    <p>fff</p>
  </li>
  <li>
    <p>ggg</p>
  </li>
  <li>
    <p>hhh</p>
  </li>
  <li>
    <p>iii</p>
  </li>
</ul>

关于clamp(),见:https://developer.mozilla.org/en-US/docs/Web/CSS/clamp()

关于column-width 见:https://developer.mozilla.org/en-US/docs/Web/CSS/column-width

【讨论】:

  • 谢谢,虽然我不知道我是否理解正确 :)) imgur.com/a/LjeTybG 我一开始有三列三行,就像在打印屏幕上一样,然后当屏幕变小时,理想情况下一列有 9 行
  • @Szimona 或者我可能不明白你的问题和评论;)
  • 可能是我写的不对,我编辑了我给你的第一条评论,谢谢:)
  • @Szimona 好的,如果窗口小于平均 650px ,此处的 sn-p 将显示 9 行 (1col),如果窗口小于平均 1015px ,则显示 5rows (2col),3rows(3col)如果小于平均 2450 像素。然后将列拉伸以填充可用空间(li 上的边框和边距是为了让您在调整窗口大小时看到它的行为)在整页中运行 sn-p,然后调整窗口大小以检查行为。让我们知道这是否是您所寻找的;)
  • 谢谢,现在请告诉我,因为我可能有一些愚蠢的问题:D 1. 我是否必须使用:li {border:1px solid;margin-bottom:2px} 因为我不需要盒子? 2.,当我不使用它时(li {border:1px solid;margin-bottom:2px})行不在同一行 - imgur.com/a/zFc59F7
【解决方案2】:

你可以使用网格,这是更清晰的解决方案:

<div style="display: grid; grid-template-rows: 3; grid-template-columns: 3">

  <p>Skvělé produkty</p>
  <p>Rychlé doručení</p>
  <p>Ochotu</p>
  
  <p style="grid-row: 2">Přívětivé ceny</p>
  <p style="grid-row: 2">Výhodné dopravné</p>
  <p style="grid-row: 2">Spolehlivost</p>

  <p style="grid-row: 3">Bleskovou expedici</p>
  <p style="grid-row: 3">Férový obchod</p>
  <p style="grid-row: 3">Bezodkladnou reklamaci</p>

</div>

编辑:聊天示例:

<div style="display: grid; grid-template-rows: 2; grid-template-columns: 3">

  <li>Skvělé produkty</li>
  <li>Rychlé doručení</li>
  <li>Ochotu</li>
  
  <li style="grid-row: 2">Skvělé produkty 2</li>
  <li style="grid-row: 2">Rychlé doručení 2</li>
  <li style="grid-row: 2">Ochotu 2</li>

</div>

<div style="display: grid; grid-template-rows: 2; grid-template-columns: 3">

  <p><img src="https://i.stack.imgur.com/PDGGj.png" style="vertical-align: middle">Skvělé produkty</p>
  <p><img src="https://i.stack.imgur.com/PDGGj.png" style="vertical-align: middle">Rychlé doručení</p>
  <p><img src="https://i.stack.imgur.com/PDGGj.png" style="vertical-align: middle">Ochotu</p>
  
  <p style="grid-row: 2"><img src="https://i.stack.imgur.com/PDGGj.png" style="vertical-align: middle">Přívětivé ceny</p>
  <p style="grid-row: 2"><img src="https://i.stack.imgur.com/PDGGj.png" style="vertical-align: middle">Výhodné dopravné</p>
  <p style="grid-row: 2"><img src="https://i.stack.imgur.com/PDGGj.png" style="vertical-align: middle">Spolehlivost</p>

</div>

【讨论】:

  • 谢谢?如果我有 3 行 3 列,它会如何工作?
  • 你是什么意思?在我的回答中,有 3 行 3 列...
  • 我现在看到了,谢谢,感激不尽 :) 我也可以使用
  • ,因为我需要在每个列表项的前面有这个小徽标imgur.com/a/SmDHmxo
  • 当然。您可以使用&lt;li&gt; 标签代替&lt;p&gt;。它会很好用。您还可以在文本之前插入带有图标的图片(最佳 svg)(= 在&lt;p&gt; 标记的开头)
  • 我又试了一次,它成功了,谢谢,但现在最后一列不在页面末尾imgur.com/a/12ucir8我尝试使用 column-gap: 310px;像以前一样,但它似乎不起作用,这是为什么呢? :)
  • 【解决方案3】:

    以下是一些制作响应式网页设计的方法。但我认为使用 css @media 很容易使用

    @media only screen and (max-width: 768px) {
      .left,
      .right {
        float: none;
        width: 100%;
      }
    }
    <!DOCTYPE html>
    <html>
    
    <head>
      <title>Media responsive</title>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <style>
        .left,
        .right {
          height: 400px;
        }
        
        .left {
          background: blue;
          float: left;
          width: 60%;
        }
        
        .right {
          background: red;
          float: right;
          width: 40%;
        }
      </style>
    </head>
    
    <body>
      <div class="container">
        <div class="left">
          LEFT
        </div>
        <div class="right">
          RIGHT
        </div>
      </div>
    </body>
    
    </html>

    正如您在上面看到的,我创建了 2 个元素浮动 2 个边。但是当使用小屏幕(


    您可以在此处阅读更多信息:W3 Responsive Web
    记住一点:

    1. 考虑使用 rem、vh、vw、em 代替 px,因为它喜欢 % 并且适合响应式
    2. 始终添加元视口

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签