居中多行水平 UL 而不居中 LI

Centering a multiline horizontal UL without centered LI

我有一个方形 div 网格,在 ul 中显示为 li,其中 ul 的样式设置为多行水平列表。我想要它,所以 UL 居中(因为每行的项目数因设备大小而异)而不使单个 LI 居中(如图表的第二行所示)。

我试过将它们定位为相对 inline-blocks,但是这会使最后一个 LI 居中在中间,这是不可取的。

ul
{
    position:relative;
    display:inline-block;
    padding:0px;
    height:100%;
    margin-left:auto;
    margin-right:auto;
}
li
{
    margin-left:5px;
    position:relative;
    display:inline-block;
    vertical-align: top;
}

有没有screen-size依赖的建议?

据我所知无法完全实现,在某些分辨率下始终是 space 无法删除的权利,请查看:Aligning div to center and its content to the left

使用纯 css 的最佳喊叫将是:

1- 使用 display: inline-blocktext-align: left 正如@CBroe 所说:

body{
    text-align: center;
}
ul{
    display: inline-block;
    padding: 0;
    text-align: left;
    width: 50%;
}

li{
    width: 50px;
    height: 50px;
    border: 1px solid;
    margin: 7px;
    list-style: none;
    display: inline-block;
}
<ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ul>

2- 使用 position: absolutetransform:

ul{
    position: absolute;
    padding: 0;
    left: 50%;
    -webkit-transform: translateX(-50%);
    transform: translateX(-50%);
}

li{
    width: 50px;
    height: 50px;
    border: 1px solid;
    margin: 7px;
    list-style: none;
    display: inline-block;
}
<ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ul>

3- 使用 display: inline-blockfloat: left:

body{
    text-align: center;
}
ul{
    display: inline-block;
    padding: 0;
    width: 50%;
    overflow: hidden;
}

li{
    width: 50px;
    height: 50px;
    border: 1px solid;
    margin: 7px;
    list-style: none;
    float: left;
}
<ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ul>


编辑:

如果你愿意使用一些 js 你可以这样做:

$(document).ready(function() {
   setWidth();
     $(window).resize(function(){
             setWidth()
     });
});

function setWidth(){
    var $ul = $('ul');
    var $li = $('li');

    $ul.css('width', 'auto');

    var ulWidth = $ul.outerWidth();
    var liWidth = $li.outerWidth();
    liWidth += parseInt($li.css('margin-left')) + parseInt($li.css('margin-right'));

    var div = Math.floor(ulWidth / liWidth);

    $ul.css('width', div * liWidth);
}
body{
  text-align: center;
}
div{  
  width: 50%;
  margin: 0 auto;
  border: 2px solid blue;
  padding: 25px;
}
ul{
  display: inline-block;
  padding: 0;
  overflow: hidden;
  border: 2px solid red;
}

li{
  width: 50px;
  height: 50px;
  border: 1px solid;
  margin: 7px;
  list-style: none;
  float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>this is the div <br/>
 \|/ </p>
<div>
 <p>this is the ul <br/>
 \|/ </p>
  <ul>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
  </ul>
</div>

请注意,现在 ul 位于 div 的中心位置。