除了最后一行之外,我真的很想保持 div 块居中。
其他人已经创建了这个小提琴来证明我的问题。即使调整窗口大小,您也可以看到结果面板中的块如何保持居中。我希望有类似的行为但是如果最后一行包含的块少于上面的行,那么最后一行不应该居中而是左对齐。
这是小提琴:http: //jsfiddle.net/zbbHc/1/
有人可能会问为什么我不只使用 float:left。这样做的问题是,如果没有为包装器指定固定宽度,我找不到使用该方法将块居中的方法。我试图让一切都尽可能地流动。
除了最后一行之外,我真的很想保持 div 块居中。
其他人已经创建了这个小提琴来证明我的问题。即使调整窗口大小,您也可以看到结果面板中的块如何保持居中。我希望有类似的行为但是如果最后一行包含的块少于上面的行,那么最后一行不应该居中而是左对齐。
这是小提琴:http: //jsfiddle.net/zbbHc/1/
有人可能会问为什么我不只使用 float:left。这样做的问题是,如果没有为包装器指定固定宽度,我找不到使用该方法将块居中的方法。我试图让一切都尽可能地流动。
试试这个小提琴http://jsfiddle.net/zbbHc/45/
不确定,但我认为这是我们单独使用 CSS 可以做到的最大程度。
更新:(这不会在所有情况下都有效,检查下面的代码在所有情况下都有效[我猜])
HTML
<div class="wrapper">
<div class="iB"></div>
<div class="iB"></div>
<div class="iB"></div>
<div class="iB"></div>
<div class="iB"></div>
<div class="iB"></div>
<div class="iB"></div>
<div class="iB hide"></div>
<div class="iB hide"></div>
</div>
CSS </p>
.wrapper {
width: 100%;
background: red;
text-align: center;
text-align-last: left;
}
.iB {
display:inline-block;
width: 200px;
height: 100px;
background: green;
}
.iB.hide {
visibility:hidden;
}
</p>
这是使用 jQuery 的快速而肮脏的方法。这将自动添加不可见元素
在这里摆弄 http://jsfiddle.net/fD6fn/
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="lib/jquery-1.6.2.min.js"></script>
<style>
.wrapper {
width: 100%;
background: red;
text-align: center;
text-align-last: left;
}
.iB {
display:inline-block;
width: 200px;
height: 100px;
background: green;
}
.iB.hide {
visibility:hidden;
}
</style>
</head>
<body>
<div class="wrapper" id="wrapper">
<div class="iB"></div>
<div class="iB"></div>
<div class="iB"></div>
<div class="iB"></div>
<div class="iB"></div>
<div class="iB"></div>
<div class="iB"></div>
</div>
<script language="javascript">
function findHiddenElementCount() {
var $wrapper = $("#wrapper"),
itemWidth = "200",
count = "",
itemCount = 7;
count = $wrapper.width()/itemWidth;
// Some wild logic below, can be optimized.
return parseInt(count) - (itemCount - (parseInt(itemCount/parseInt(count)) * parseInt(count))) ;
}
function addInvisibleElements()
{
// Delete invisible items
$("#wrapper .iB.hide").remove();
var c = findHiddenElementCount();
for(var i = 0; i < c;i++)
{
$("#wrapper").append('<div class="iB hide"></div>');
}
}
$(window).bind("resize",addInvisibleElements); // resize handler
$(document).ready(addInvisibleElements); // take care during page load
</script>
</body>
</html>
为什么不用百分比?http://jsfiddle.net/zbbHc/38/这就是大多数流体布局通常的工作方式
当您说“如果”最后一行的块较少时,您的意思是它是动态内容吗?如果您知道它将有一个,那么您可以将其相对于其自身宽度一半的值(以及任何边距等)进行定位
.iB:last-child{
position:relative;
left:-100px;
background:blue;
}
可以使用表格来执行此操作(尽管我倾向于避免使用表格)。表格单元格的尺寸由它们的内容决定(当然,您可以添加自己的尺寸或最大/最小尺寸)。您可以有一个包含一列的表,并且(尽管这不是最佳做法)将 div 嵌入到表中(每个 div 都是一个块)。
表格的宽度将是流动的,因为它将基于最宽单元格的宽度(因此,块将很好地排列并且看起来非常整洁),并且您可以硬编码或编写脚本(当然,我建议scripting) 一种样式/方法,用于检查最后一行是否包含较少的块,如果确实如此,则仅将该单元格的 text-align 设置为左对齐。
这个解决方案可能需要一些改进,但它可能是一个好的开始,这取决于你将它用于什么。