sp0*_*00m 9 html css margin grid-layout css-float
我有一个list(<ul />),我尝试显示为网格.该电池具有一个固定的宽度(假设100像素):然后cols和rows的数量取决于屏幕分辨率.
当屏幕宽度很大时,有很多列但很少行:
______________________________________________________________
| ___________ ___________ ___________ ___________ |
| | | | | | | | | |
| | #1 | | #2 | | #3 | | #4 | |
| |<- 100px ->| |<- 100px ->| |<- 100px ->| |<- 100px ->| |
| | | | | | | | | |
| |___________| |___________| |___________| |___________| |
| ___________ |
| | | |
| | #5 | |
| |<- 100px ->| |
| | | |
| |___________| |
|______________________________________________________________|
Run Code Online (Sandbox Code Playgroud)
当屏幕宽度较小时,列数很少但行数很多:
________________________________
| ___________ ___________ |
| | | | | |
| | #1 | | #2 | |
| |<- 100px ->| |<- 100px ->| |
| | | | | |
| |___________| |___________| |
| ___________ ___________ |
| | | | | |
| | #3 | | #4 | |
| |<- 100px ->| |<- 100px ->| |
| | | | | |
| |___________| |___________| |
| ___________ |
| | | |
| | #5 | |
| |<- 100px ->| |
| | | |
| |___________| |
|________________________________|
Run Code Online (Sandbox Code Playgroud)
这实际上几乎是有效的:看到这个小提琴.
几乎,因为您可以注意到,当您拉伸宽度时,网格右侧可能会出现一个空白区域.这是因为float: leftCSS属性,并且是可以理解的.
但是,有没有办法在单元格之间分配这个空白区域,即自动增加单元格之间的边距,直到有足够的空间来容纳新单元格?
换句话说,目前有15px的固定余量,我正在寻找一种15px 的最小边距,在拉伸宽度时自动增长,并且一旦新单元符合第一行,则返回到15px .
为了说明,而不是:
___________________________________________________________________
| ___________ ___________ ___________ ___________ |
| | | | | | | | | |
| | #1 | | #2 | | #3 | | #4 | BLANK |
| |<- 100px ->| |<- 100px ->| |<- 100px ->| |<- 100px ->| SPACE |
| | | | | | | | | |
| |___________| |___________| |___________| |___________| |
| ___________ |
| | | |
| | #5 | |
| |<- 100px ->| |
| | | |
| |___________| |
|___________________________________________________________________|
Run Code Online (Sandbox Code Playgroud)
有类似的东西:
___________________________________________________________________
| ___________ ___________ ___________ ___________ |
| | | | | | | | | |
| | #1 | | #2 | | #3 | | #4 | |
| |<- 100px ->| |<- 100px ->| |<- 100px ->| |<- 100px ->| |
| | | | | | | | | |
| |___________| |___________| |___________| |___________| |
| ___________ |
| | | |
| | #5 | |
| |<- 100px ->| |
| | | |
| |___________| |
|___________________________________________________________________|
Run Code Online (Sandbox Code Playgroud)
请注意,第二个插图中的边距较大,因此不再有空格.
有什么解决方案吗?
请注意,#5 单元格也必须左对齐,即align-centerCSS属性不符合我的需要(据我所知).
此外,我将使用jQuery 1.10和Bootstrap 3,因此欢迎使用这些库中的一个(或多个)的任何解决方案;)
我创建了一个 jQuery 脚本来解决您的问题。看看这个小提琴。我编写了脚本,您根本不需要更改它。您只需将最小边距设置为 CSS 中的边距,然后添加<li>所需数量的元素即可。
function setMargin() {
ulWidth = $('ul').innerWidth();
boxWidth = $('li').outerWidth();
boxMargin = parseInt($('li').css('margin'));
maxBoxNum = $("ul li").length;
boxNum = Math.floor((ulWidth / (boxWidth + boxMargin)));
totalMargin = ulWidth - (boxNum * boxWidth);
eachMargin = totalMargin / (boxNum + 1);
if (eachMargin < boxMargin) {
boxNum -= 1;
totalMargin = ulWidth - (boxNum * boxWidth);
eachMargin = totalMargin / (boxNum + 1);
}
if (boxNum > maxBoxNum) {
boxNum = maxBoxNum;
totalMargin = ulWidth - (boxNum * boxWidth);
eachMargin = totalMargin / (boxNum + 1);
}
$('li').css('margin-left', eachMargin);
}
$(document).ready(function() {
setMargin();
});
$(window).resize(function() {
setMargin();
});Run Code Online (Sandbox Code Playgroud)
ul {
margin: 0;
padding: 0;
list-style-type: none;
}
li {
width: 100px;
height: 100px;
margin: 15px 0;
padding: 0;
border: solid 1px black;
display: inline-block;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li>#1</li>
<li>#2</li>
<li>#3</li>
<li>#4</li>
<li>#5</li>
</ul>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |