如何在包装时使列表项在网格上排列?

Pet*_*ver 5 html css css3 flexbox responsive-design

假设我<ul>在响应式设计中使用以下内容:

li {
  display: inline;
  padding-right: 1em;
}
Run Code Online (Sandbox Code Playgroud)
<ul>
  <li>
    MenuItemHeinz
  </li>
  <li>
    MenuItemHinrich
  </li>
  <li>
    MenuItemRoffen
  </li>
  <li>
    MenuItemStaffRoffeltack
  </li>
  <li>
    MenuItemHeinz
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

当我调整浏览器窗口的大小或查看手机中的页面时,它会像这样断开:

在此输入图像描述

如何让菜单项在打破时很好地排列在网格上,例如像这样?最好只使用css ...当然;)

在此输入图像描述

Mic*_*l_B 7

使用CSS flexbox,这种布局相对简单.

ul {
  display: flex;
  flex-wrap: wrap;
  list-style-type: none;
  padding-left: 0;
}

ul li {
  flex: 0 0 calc(50% - 10px);
  margin: 5px;
  padding: 5px 0;
  text-align: center;
  box-sizing: border-box;
  border: 1px dashed red;
  background-color: yellow;
}
Run Code Online (Sandbox Code Playgroud)
<ul>
  <li><a href="#">item</a></li>
  <li><a href="#">item</a></li>
  <li><a href="#">item</a></li>
  <li><a href="#">item</a></li>
  <li><a href="#">item</a></li>
  <li><a href="#">item</a></li>
  <li><a href="#">item</a></li>
  <li><a href="#">item</a></li>
  <li><a href="#">item</a></li>
  <li><a href="#">item</a></li>
  <li><a href="#">item</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

jsFiddle演示

浏览器支持: 所有主流浏览器都支持 Flexbox,IE <10除外.最近的一些浏览器版本,例如Safari 8和IE10,需要供应商前缀.要快速添加前缀,请使用Autoprefixer.这个答案的更多细节.