css - 具有不同尺寸瓷砖的响应式布局;设置适当的换行符

标签 css responsive-design w3.css

我正在尝试使用 w3.css 构建响应式布局。它由三种不同高度和宽度的瓷砖组成。布局在小屏幕上为单列,在中屏幕上为两列,在大屏幕上为三列(由 w3.css 确定)。

使用直接代码 ( https://jsfiddle.net/pwunsch/p2nL28f3/2/ )...

<body class="w3-gray" id="home">
  <div class="w3-content w3-white" style="max-width:400px"> 
    <div class="w3-row-padding">
      <div class="w3-col l4 m6 s12"><div class="normal">1 - normal article</div></div>
      <div class="w3-col l4 m6 s12"><div class="short">2 - short article</div></div>
      <div class="w3-col l4 m6 s12"><div class="normal">3 - normal article</div></div>
      <div class="w3-col l8 m12 s12"><div class="special">4 - special article</div></div>
      <div class="w3-col l4 m6 s12"><div class="normal">5 - normal article</div></div>
      <div class="w3-col l4 m6 s12"><div class="short">6 - short article</div></div>    
      <div class="w3-col l8 m12 s12"><div class="special">7 - special article</div></div>
      <div class="w3-col l4 m6 s12"><div class="short">8 - short article</div></div>
      <div class="w3-col l4 m6 s12"><div class="short">9 - short article</div></div>
      <div class="w3-col l4 m6 s12"><div class="short">10  - short article</div></div>  
      <div class="w3-col l4 m6 s12"><div class="normal">11 - normal article</div></div>
      <div class="w3-col l4 m6 s12"><div class="normal">12 - normal article</div></div>
      <div class="w3-col l4 m6 s12"><div class="short">13 - short article</div></div>   
      <div class="w3-col l4 m6 s12"><div class="normal">14 - normal article</div></div>                         
    </div>
  </div>
</body>

...我遇到的问题是,每当一行中包含的图 block 高于该行中的最后一个图 block 时,下一个图 block 将位于同一行中,而不是在新行中(参见图 block 13/下例中的 14)。这实际上是我理解 float: left 应该工作的方式。

example of unwanted layout

只要所有图 block 的宽度都相等,这个问题就可以通过设置 clear: left; 属性和 :nth-child() 选择器来轻松解决每 3 个或每 2 个图 block (取决于屏幕尺寸)。

然而,在这种情况下,对于两列宽的图 block ,没有这样简单的计数规则。然而,格式化规则很简单,只要一个图 block 填满最后一列,下一个图 block 就应该接收一个 clear:left 属性。但是我不知道如何在 CSS 中实现这一点。 JavaScript 也可以。

感谢任何帮助。

最佳答案

一个可能的解决方案是从 w3.css 切换到 bootstrap 4。Bootstrap 4 使用 flexboxes 而不是 floats。 flex 盒在上述布局中的行为符合预期。代码很简单 ( https://jsfiddle.net/pwunsch/u35sd03u/ )。

<body>
  <div class="container" id="content">
    <div class="row">
        <div class="col-sm-6 col-md-6 col-lg-4"><div class="normal">1 - normal article</div></div>
        <div class="col-sm-6 col-md-6 col-lg-4"><div class="short">2 - short article</div></div>
        <div class="col-sm-6 col-md-6 col-lg-4"><div class="normal">3 - normal article</div></div>
        <div class="col-sm-12 col-md-12 col-lg-8"><div class="special">4 - special article</div></div>
        <div class="col-sm-6 col-md-6 col-lg-4"><div class="normal">5 - normal article</div></div>
        <div class="col-sm-6 col-md-6 col-lg-4"><div class="short">6 - short article</div></div>    
        <div class="col-sm-6 col-md-12 col-lg-8"><div class="special">7 - special article</div></div>
        <div class="col-sm-6 col-md-6 col-lg-4"><div class="short">8 - short article</div></div>
        <div class="col-sm-6 col-md-6 col-lg-4"><div class="short">9 - short article</div></div>
        <div class="col-sm-6 col-md-6 col-lg-4"><div class="short">10  - short article</div></div>  
        <div class="col-sm-6 col-md-6 col-lg-4"><div class="normal">11 - normal article</div></div>
        <div class="col-sm-6 col-md-6 col-lg-4"><div class="normal">12 - normal article</div></div>
        <div class="col-sm-6 col-md-6 col-lg-4"><div class="short">13 - short article</div></div>   
        <div class="col-sm-6 col-md-6 col-lg-4"><div class="normal">14 - normal article</div></div>
    </div>
</div>

适用于上述场景。我没有找到任何明显的方法来修补/修改 w3.css 来做同样的事情。

关于css - 具有不同尺寸瓷砖的响应式布局;设置适当的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47961716/

相关文章:

html - 删除 Div 之间的间距

javascript - 强制 div 到达底部

javascript - CSS3 vs Javascript 仅转换

html - map 设计中的响应式标记

javascript - 强制 SVG 适合内部 div 的跨浏览器方式

html - 如何修复 w3.css 列表项中的高度偏移

css - 如何使用 w3.css 显示与输入内联的标签

javascript - 页面重新加载不会重置 jQuery/CSS 样式

html - tbody 和 td 上的边框?

javascript - 根据视口(viewport)宽度更改 fullCalendar View 和标题选项?