居中多行水平 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-block
和 text-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: absolute
和 transform
:
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-block
和 float: 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
的中心位置。
我有一个方形 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-block
和 text-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: absolute
和 transform
:
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-block
和 float: 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
的中心位置。