我有一个图块(或div)容器,我希望该容器居中,而图块在容器中对齐。
因此,如果窗口很小:
..[s][s][s].. ..[s][s].....
如果窗口扩大了一点:
...[s][s][s]... ...[s][s]......
进一步:
.[s][s][s][s]. .[s]..........
我试过了:
#container's-parent: { display: block; text-align: center; } #parent: { display: inline-block; text-align: left; } .tiles: { display: inline-block }
但这似乎不起作用。
我希望此功能至少可以在Chrome中运行,但最终还需要支持最新的FF,Safari和IE 10+
FWIW:现在是2017年,网格布局模块可以立即使用(codependemo)。如果浏览器支持适合您,请使用grid。如果没有,请继续阅读…。
正如@ Skadi2k3的答案中所提到的,使用CSS最好的方法是进行一系列媒体查询。
话虽如此,如果您使用的是诸如LESS之类的预处理器-这并不是一件困难或容易出错的任务。(尽管,是的,CSS仍然很长很丑)
@item-width:100px; @item-height:100px; @margin: 5px; @min-cols:2; @max-cols:12; //set an upper limit of how may columns you want to write the media queries for .loopingClass (@index-width) when (@index-width <= @item-width * @max-cols) { @media (min-width:@index-width) { #content{ width: @index-width; } } .loopingClass(@index-width + @item-width); } .loopingClass (@item-width * @min-cols);
上面的mixin将以以下形式吐出一系列媒体查询:
@media (min-width: 200px) { #content { width: 200px; } } @media (min-width: 300px) { #content { width: 300px; } } @media (min-width: 400px) { #content { width: 400px; } } ... @media (min-width: 1200px) { #content { width: 1200px; } }
因此,使用一个简单的标记,例如:
<ul id="content"> <li class="box"></li> <li class="box"></li> ... <li class="box"></li> </ul>
剩下的CSS(少):
#content { margin:0 auto; overflow: auto; min-width: @min-cols * @item-width; max-width: @max-cols * @item-width; display: block; list-style:none; background: aqua; } .box { float: left; height: @item-height - 2 *@margin; width: @item-width - 2*@margin; margin:@margin; background-color:blue; }
…您将获得理想的结果。
我需要做的就是根据自己的需要更改在LESS mixin中使用的变量-得到的确切布局。
假设我有300px X 100px的项目,最少2列,最多6列,边距为15px-我只是像这样修改变量:
@item-width:300px; @item-height:100px; @margin: 15px; @min-cols:2; @max-cols:6;