我试图在容器内从上到下垂直定位DIV。容器应垂直限制500px。所有不符合此限制的DIV应浮动到下一行。
<style>
#container {
position:relative;
background-color:red;
max-width:500px;
min-height:500px;
}
#area {
position:absolute;
bottom: 0;
background-color:yellow;
margin:20px;
width:100px;
height:100px;
}
</style>
<div id="container">
<div id="area">area1</div>
<div id="area">area2</div>
<div id="area">area3</div>
<div id="area">area4</div>
<div id="area">area5</div>
<div id="area">area6</div>
</div>
我的计划结果应该是这样的:
---------------------------->
| -------- --------
| |Area 1| |Area 5|
| -------- --------
| -------- --------
max | |Area 2| |Area 6|
500 | -------- --------
px | --------
| |Area 3| etc..
| --------
| -------- /\
| |Area 4| etc....... |
| --------
--------------------------->
我的问题是:我做错了什么,是否可以实施?谢谢!
答案 0 :(得分:2)
CSS列最初似乎是一个很有前途的解决方案,但是当添加或删除区域时,它们不会自动调整容器的宽度。
我的建议是将div放置成水平堆叠而不是垂直堆叠,从右到左。使用float:right
很容易实现。完成后,您可以将整个容器旋转90度以获得等效的垂直布局。但是由于区域div现在都是错误定向的,你还需要向相反方向旋转90度。
这样的事情:
#container {
position:relative;
background-color:red;
max-width:500px;
margin-left:-500px;
max-height:500px;
overflow:hidden;
-webkit-transform:rotate(-90deg);
-webkit-transform-origin:top right;
-ms-transform:rotate(-90deg);
-ms-transform-origin:top right;
transform:rotate(-90deg);
transform-origin:top right;
padding:20px 0 0 20px;
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
}
#area {
background-color:yellow;
margin:0 20px 20px 0;
width:100px;
height:100px;
float:right;
-webkit-transform:rotate(90deg);
-ms-transform:rotate(90deg);
transform:rotate(90deg);
}
注意容器上的负margin-left
,它调整旋转后的位置 - 需要匹配容器“height”(即max-width
属性)。 max-height
属性表示容器在剪切之前将达到的最大“宽度”。需要overflow:hidden
来强制容器增长以包含其浮动子元素。
另外,请注意,因为区域div现在已浮动,它们之间的边距不会崩溃。解决这个问题的一种方法是将边距限制为仅限于两边(我使用了右边和底边),然后通过box-sizing:border-box
上的容器填充来模拟其他边的边距。
最后,在这个特定的例子中,区域div具有1:1的宽高比,这意味着我们不必担心在旋转之后重新定位它们。如果它们的宽度和高度不同,事情会变得稍微复杂一些。
此解决方案不适用于旧版本的IE,但它至少支持IE9。
答案 1 :(得分:0)
您可以使用CSS列 like in this jsfiddle demo ,使用以下CSS
#container{
position: relative;
background-color: red;
max-width: 500px;
min-height: 500px;
padding: 20px;
-moz-box-sizing: border-box;
box-sizing: border-box;
-moz-column-width: 150px;
-webkit-column-width: 150px;
-o-column-width: 150px;
column-width: 150px;
}
#area{
background-color: yellow;
display: inline-block;
font: italic 45px/215px georgia;
height: 215px;
margin-bottom: 21px;
text-align: center;
width: 215px;
}
演示中的尺寸已缩小,以适应较小的渲染帧尺寸。
这当然不是很令人惊讶,不会在早于10版的IE版本中运行。您可以使用techniques from following ALA page来使其在IE中运行。
答案 2 :(得分:0)
#container {
background-color: red;
max-width: 330px;
max-height: 300px;
padding: 20px;
overflow:auto;
}
.area {
background-color: yellow;
display: inline-block;
height: 70px;
margin-bottom: 21px;
text-align: center;
width: 70px;
}
.x {
background-color: cyan;
height: 30px;
width: 90px;
}
.Z {
background-color: grey;
height: 300px;
width: 190px;
}
<div id="container">
<div class="area">area1</div>
<div class="area">area2</div>
<div class="area x">area3</div>
<div class="area">area4</div>
<div class="area x">area5</div>
<div class="area Z">area6</div>
</div>