【问题标题】:Unordered list that acts like grid-auto-flow dense类似于网格自动流密集的无序列表
【发布时间】:2019-04-07 15:18:44
【问题描述】:

是否可以创建具有grid-auto-flow: dense 属性的不同大小项目的无序列表? 我目前有一个无序列表的术语从左右填充我的页面,任何不适合的术语都会被推到下一行。但是,这会在页面右侧留下空白,这对于响应式设计来说是不合适的(列表从左侧开始)。我查看了 flexbox 的 flex-flow 属性,但没有找到任何可以模仿 grid-auto-flow:dense 的东西。

这是我所指的简单项目列表的示例:

*,
*:before,
*:after {
  box-sizing: border-box;
}

body {
  margin: 20px;
  font-family: 'Open Sans', 'sans-serif';
  background-color: #fff;
  color: #444;
}

.interests {
  grid-column: 1 / -1;
  padding: 0;
  margin: 0;
}

.interests li {
  list-style-type: none;
  display: inline-block;
  text-align: center;
  padding: 0 10px;
  border: 1px solid black;
  margin: 0 4px 8px 0;
  /*top,right,bottom,left*/
  cursor: default;
}
<ul class="interests">
  <li>Legumes</li>
  <li>Edible plants</li>
  <li>Edible fungi</li>
  <li>Edible nuts</li>
  <li>seeds</li>
  <li>Baked goods</li>
  <li>Breads</li>
  <li>Dairy products</li>
  <li>Eggs</li>
  <li>Meat</li>
  <li>Cereals</li>
  <li>Seafood</li>
  <li>Staple foods</li>
  <li>Prepared foods</li>
  <li>Appetizers</li>
  <li>Condiments</li>
  <li>Confectionery</li>
  <li>Convenience foods</li>
  <li>Desserts</li>
  <li>Dips</li>
  <li>Dried foods</li>
  <li>Dumplings</li>
  <li>Fast food</li>
  <li>Fermented foods</li>
  <li>chinese food</li>
  <li>Kosher food</li>
  <li>Noodles</li>
  <li>Pies</li>
  <li>Salads</li>
  <li>Sandwiches</li>
  <li>Sauces</li>
  <li>Snack foods</li>
  <li>Soups</li>
  <li>Stews</li>
</ul>

我已经尝试过grid-template-columnsgrid-auto-rows,但我似乎无法复制li 元素如何完美地环绕内容+填充。 max-contentmin-content 似乎也不适用于模板列或自动行。

非常感谢任何输入。非常感谢!

【问题讨论】:

    标签: css flexbox html-lists css-grid


    【解决方案1】:

    Flexbox 更适合于此 - 您可以使用 hacky flexbox 解决方案,该解决方案通过增长 所有 flex 项目 来工作>flex line 填充行中的剩余空间:

    • li 弹性项目上使用 flex: 1 0 auto

    • 使用一个伪元素来填充最后一行的剩余空间。

    请看下面的演示:

    *,
    *:before,
    *:after {
      box-sizing: border-box;
    }
    
    body {
      margin: 20px;
      font-family: 'Open Sans', 'sans-serif';
      background-color: #fff;
      color: #444;
    }
    
    .interests {
      display: flex; /* wrapping flexbox */
      flex-wrap: wrap;
      padding: 0;
      margin: 0;
    }
    
    .interests li {
      list-style-type: none;
      display: inline-block;
      text-align: center;
      padding: 0 10px;
      border: 1px solid black;
      margin: 0 4px 8px 0;
      cursor: default;
      flex: 1 0 auto; /* added */
    }
    
    .interests:after {
      content: '';
      display: block;
      flex: 999; /* grow by a large number */
    }
    <ul class="interests">
      <li>Legumes</li>
      <li>Edible plants</li>
      <li>Edible fungi</li>
      <li>Edible nuts</li>
      <li>seeds</li>
      <li>Baked goods</li>
      <li>Breads</li>
      <li>Dairy products</li>
      <li>Eggs</li>
      <li>Meat</li>
      <li>Cereals</li>
      <li>Seafood</li>
      <li>Staple foods</li>
      <li>Prepared foods</li>
      <li>Appetizers</li>
      <li>Condiments</li>
      <li>Confectionery</li>
      <li>Convenience foods</li>
      <li>Desserts</li>
      <li>Dips</li>
      <li>Dried foods</li>
      <li>Dumplings</li>
      <li>Fast food</li>
      <li>Fermented foods</li>
      <li>chinese food</li>
      <li>Kosher food</li>
      <li>Noodles</li>
      <li>Pies</li>
      <li>Salads</li>
      <li>Sandwiches</li>
      <li>Sauces</li>
      <li>Snack foods</li>
      <li>Soups</li>
      <li>Stews</li>
    </ul>

    【讨论】:

    • 昨晚我遇到了 flex-wrap 属性,但我最初反对它,因为我认为让盒子拉伸看起来会很奇怪。老实说,它看起来很不错,我认为它会很好地满足我的需求。非常感谢您的投入!你摇滚!我确实认为如果 css 联盟向 ul 添加一个自动流动密集属性会很酷!
    猜你喜欢
    • 2019-03-21
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 2013-04-25
    • 1970-01-01
    相关资源
    最近更新 更多