请参阅:http://jsfiddle.net/90d7144p/
我希望类rect
的DIV宽度与类box
的基础DIV一样长。不应更改类box
(至少是最小的更改)。此外,框不是按表格对齐的。我不关心容器的大小(黑色边框)。
此
应该是
CSS:
* { margin: 2px; }
.container { width: 100%; border: 1px solid black; }
.box { display: inline-block; width:100px; height:100px; border: 1px solid red; }
.rect { border: 1px solid green; }
HTML:
<div class="container">
<div class="rect">The width must be as long as underlying boxes.</div>
<div class="box">BOX</div> <div class="box">BOX</div>
<div class="box">BOX</div> <div class="box">BOX</div>
<div class="box">BOX</div> <div class="box">BOX</div>
<div class="box">BOX</div> <div class="box">BOX</div>
<div class="box">BOX</div>
</div>
是否有基于CSS或HTML的解决方案?
答案 0 :(得分:8)
您可以使用媒体查询,每次框折叠到下一行时指定rect的宽度。这涉及计算每个断点并向其发送媒体查询。
为了使计算更容易,您应该使用浮点数,以便元素之间的空白区域不会破坏您的布局。
以下演示需要调整,但它应该告诉你我在说什么:
DEMO (将结果窗口调整为宽度超过650像素,看它是否有效)
CSS示例:
@media screen and (min-width: 742px) and (max-width: 847px){
.rect {
width: 736px;
}
}
答案 1 :(得分:7)
以下是基于我上述评论的解决方案,它使用媒体查询:
由于盒子是固定宽度,如果屏幕宽度为[x0,x1]像素,则可以预先确定适合一行的盒子数量。您可以将此信息提供给CSS媒体查询以创建多个规则,每个规则指定给定宽度范围的框的宽度。这是一个例子(使用excel生成):
.rect { width: 100px; }
@media screen and (min-width: 214px) { .rect { width: 206px; } }
@media screen and (min-width: 320px) { .rect { width: 312px; } }
@media screen and (min-width: 426px) { .rect { width: 418px; } }
@media screen and (min-width: 532px) { .rect { width: 524px; } }
@media screen and (min-width: 638px) { .rect { width: 630px; } }
@media screen and (min-width: 744px) { .rect { width: 736px; } }
@media screen and (min-width: 850px) { .rect { width: 842px; } }
@media screen and (min-width: 956px) { .rect { width: 948px; } }
注意:
min-width
是屏幕的宽度,而不是容器的宽度。添加了2px以补偿黑色边框。答案 2 :(得分:1)
这是一个解决方案,让我们进一步优化。
您可以像这样更改标记。 (添加了.stretch
div)
...
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="stretch"></div>
</div>
和CSS,
.stretch {
height: 0;
font-size: 0;
width: 100%;
display: inline-block;
}
.container {
width: 100%;
border: 1px solid black;
text-align: justify;
padding: 2px;
}
* {
margin: 2px 0;
}
这样,BOX
es将对齐以占据父级的整个宽度。
但是,最后一行之间不会有相同的空格。
答案 3 :(得分:-3)
<style>
.container { width: 50%; border: 1px solid black; }
.box-container
{
width: 640px;
}
.box { display: inline-block;width:100px; height:100px; border: 1px solid red;;}
.rect { border: 1px solid green;
width: 630px;}
</style>
<div class="container">
<div class="rect">The width must be as long as underlying boxes.</div>
<div class="box-container">
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
<div class="box">BOX</div>
</div>
</div>
答案 4 :(得分:-3)
IF和Only如果您只想使用JQuery来实现它,那么以下是您查询的代码。
<html>
<head>
<style>
* { margin: 2px; }
.container { width: 100%; border: 1px solid black; }
.box { display: inline-block; width:100px; height:100px; border: 1px solid red; }
.rect { border: 1px solid green; }
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
resize();
$(window).resize(function(){
resize();
});
function resize()
{
var max = 0, $element;
$('.box').each(function()
{
if($(this).offset().left > max)
{
max = $(this).offset().left;
$element = $(this);
}
});
$(".rect").css("width",max+90);
}
});
</script>
</head>
<body>
<div class="container">
<div class="rect">The width must be as long as underlying boxes.</div>
<div class="box">BOX</div> <div class="box">BOX</div>
<div class="box">BOX</div> <div class="box">BOX</div>
<div class="box">BOX</div> <div class="box">BOX</div>
<div class="box">BOX</div> <div class="box">BOX</div>
<div class="box">BOX</div>
</div>
</body>
</html>