给出这样的标记:
<div class="a">A</div>
<div class="b">B</div>
<div class="a">A</div>
<div class="b">B</div>
<div class="a">A</div>
<div class="b">B</div>
是否可以将此文档设置为如下样式:
|-------|---------|
| | |
| A | B |
| | |
|-------|---------|
| | |
| A | B |
| | |
|-------|---------|
| | |
| A | B |
| | |
|-------|---------|
(如果A或B中的内容较长,其邻居将增长以匹配其高度)...
没有任何额外的标记?
我理解,将.a
和.b
display
的{{1}}值设为只会使这一行成为一大排。
解决方案是什么?
答案 0 :(得分:4)
并非没有flexbox ,尚未登陆几个主流浏览器,似乎是共识。
答案 1 :(得分:3)
不,我认为“没有任何额外的标记”是不可能的。它需要:
div
包装display: table-row;
包含A anb B“cells”div
上有听众的JavaScript,它会确定每对中A ab B高度的max
并将其设置为较小的第二个解决方案:
CSS:
.a, .b {
padding: 0.5em;
float: left;
}
.a:nth-child(n+1) {
clear: both;
}
jQuery的:
$(function() {
var max_width_a = 0, max_width_b = 0;
$("div.a").each(function() {
var elem_a = $(this),
elem_b = elem_a.next("div.b"),
height_a = elem_a.height(),
height_b = elem_b.height(),
pair = [elem_a, elem_b];
max_width_a = Math.max(max_width_a, elem_a.width());
max_width_b = Math.max(max_width_b, elem_b.width());
$(pair).height(Math.max(height_a, height_b));
}).width(max_width_a);
$("div.b").width(max_width_b);
});
我已经更新了你的小提琴。在文档准备就绪时,如果要确定动态高度变化,则必须自定义它。
如果我必须解释它是如何工作的,请告诉我。当然你可以在CSS中强制div.a
和div.b
的宽度,而不用jQuery检查最大宽度(那么你必须确定每对中的最大高度)。
答案 2 :(得分:1)
不,如果不给每一行包装,这是不可能的。
这是一个纯css解决方案,包含一个包含的包装器(每行)
.row {
background-color: #ccc;
float: left;
margin: 10px 0;
padding: 1em;
width: 50%;
}
.a {
float: left;
width: 45%;
}
.b {
float: right;
width: 45%;
}
和html
<div class="row">
<div class="a">Mofo break yo neck, yaonna chung fizzle, bizzle dizzle dang dolor boom shackalack augue. Fizzle izzle away sit its fo riz</div>
<div class="b">Lorizzle hizzle dolizzle sit amet, brizzle adipiscing elizzle. Nullam i saw beyonces tizzles and my pizzle went crizzle shizzlin dizzle, fo shizzle mah nizzle fo rizzle, mah home g-dizzle sizzle, suscipit quizzle, i saw beyonces tizzles and my pizzle went crizzle vizzle, arcu. Break yo neck, yall shiznit tortor. Sed eros. Ma nizzle izzle you son of a bizzle dapibizzle turpishizzle. Integizzle check out this velit sed fo.</div>
</div>
<div class="row">
<div class="a">Sizzle ullamcorpizzle. Shut the shizzle up sagittizzle dizzle a shiznit. Vestibulizzle you son of a bizzle ipsizzle primis izzle faucibus orci pot et ultrices posuere dope Fo shizzle; Crazy vestibulizzle. Fo shizzle my nizzle habitant morbi tristique senectus ma nizzle netizzle izzle tellivizzle famizzle turpis hizzle. Donizzle tempor hendrerit hizzle. Aliquizzle erat volutpat. </div>
<div class="b">Vivamizzle sagittis.rttitizzle izzle, boom shackalack hizzle, orci. Integizzle hizzle funky fresh lectus. </div>
</div>
<div class="row">
<div class="a">Donizzle tempor hendrerit hizzle. Aliquizzle erat volutpat. Things crunk fizzle, scelerisque bizzle, daahng dawg the bizzle, crackalackin shiznit, arcu. Daahng dawg elizzle. Crazy fermentizzle, est izzlot purizzle , bibendizzle sizzle amizzle, fo shizzle vehicula, fo shizzle my nizzle malesuada, shizznit. Aenizzle fizzle ipsizzle izzle est ullamcorpizzle tincidunt. Cool quizzle. Mauris ligula urna, tempizzle shut th</div>
<div class="b">Mofo break yo neck, yall fo shizzle izzle leo bibendum crackalackin. Vivamizzle shit tortor vizzle away. Brizzle malesuada fo magna. Dang commodo, nisl nizzle go to hizzle egestizzle, magna dolor w</div>
</div>
如果您希望a和b具有不同的背景颜色,则必须使用高度:100%
答案 3 :(得分:1)
我把它放在评论中,但应该只是让它成为一个答案。这里是你如何做同样的事情(使用行)强制100%的高度
.row {
background-color: #ccc;
float: left;
margin: 10px 0;
padding: 1em;
width: 50%;
}
#container_a {
background-color: blue;
float: left;
position: relative;
right: 50%;
width: 100%;
}
#container_b {
background-color: red;
float: left;
overflow: hidden;
position: relative;
right: 0;
width: 100%;
}
#column_a {
float: left;
left: 50%;
overflow: hidden;
position: relative;
width: 46%;
}
#column_b {
float: left;
left: 56%;
overflow: hidden;
position: relative;
width: 46%;
}
和html
<div class="row">
<div id="container_b">
<div id="container_a">
<div id="column_a">Lorizzle hizzle dolizzle sit amet, brizzle adipiscing elizzle. Nullam i saw beyonces tizzles and my pizzle went crizzle shizzlin dizzle, fo shizzle mah nizzle fo rizzle, mah home g-dizzle sizzle, suscipit quizzle, i saw beyonces tizzles and my pizzle went crizzle vizzle, arcu. Break yo neck, yall shiznit tortor. Sed eros. Ma nizzle izzle you son of a bizzle dapibizzle turpishizzle. Integizzle check out this velit sed fo.</div>
<div id="column_b">Vivamizzle sagittis.rttitizzle izzle, boom shackalack hizzle, orci. Integizzle hizzle funky fresh lectus. </div>
</div>
</div>
</div>
<div class="row">
<div id="container_b">
<div id="container_a">
<div id="column_a">Lorizzle hizzle dolizzle sit amet, brizzle adipiscing elizzle. Nullam i saw beyonces tizzles and my pizzle went crizzle shizzlin dizzle, fo shizzle mah nizzle fo rizzle, mah home g-dizzle sizzle, suscipit quizzle, i saw beyonces tizzles and my pizzle went crizzle vizzle, arcu. Break yo neck, yall shiznit tortor. Sed eros. Ma nizzle izzle you son of a bizzle dapibizzle turpishizzle. Integizzle check out this velit sed fo.</div>
<div id="column_b">Vivamizzle sagittis.rttitizzle izzle, boom shackalack hizzle, orci. Integizzle hizzle funky fresh lectus. </div>
</div>
</div>
</div>
<div class="row">
<div id="container_b">
<div id="container_a">
<div id="column_a">Lorizzle hizzle dolizzle sit amet, brizzle adipiscing elizzle. Nullam i saw beyonces tizzles and my pizzle went crizzle shizzlin dizzle, fo shizzle mah nizzle fo rizzle, mah home g-dizzle sizzle, suscipit quizzle, i saw beyonces tizzles and my pizzle went crizzle vizzle, arcu. Break yo neck, yall shiznit tortor. Sed eros. Ma nizzle izzle you son of a bizzle dapibizzle turpishizzle. Integizzle check out this velit sed fo.</div>
<div id="column_b">Vivamizzle sagittis.rttitizzle izzle, boom shackalack hizzle, orci. Integizzle hizzle funky fresh lectus. </div>
</div>
</div>
</div>
答案 4 :(得分:1)
我写了一个jQuery插件来完成这个。它将float
布局转换为display:table
布局并为您处理行。单元格宽度自动处理,无需脚本(更快)。它也很敏感。它被称为WRECKER !!哈哈哈!
svachon.com/blog/wrecker-responsive-equal-height-columns-and-rows/
答案 5 :(得分:1)
您可以在没有flexbox的情况下执行此操作,但您需要使用nth-child()。看看这个答案:https://stackoverflow.com/a/12589629/740836
答案 6 :(得分:0)
我想不出没有行包装器的方法,但是如果你知道外部div的确切宽度永远不会改变,那么就有可能实现。我的解决方法是依靠包装器大小将a和b放在同一行上,然后下一个a和b将自动被推送,以便它包裹到下一行。但是,如果包装器的宽度缩小,则a和b不会在同一条线上。
<div id="wrapper">
<div class="a">A</div>
<div class="b">B</div>
<div class="a">A</div>
<div class="b">B</div>
</div>
<style>
#wrapper { width: 500px;}
.a { background-color:green; float:left; width:50%;}
.b {background-color:red;float:left;width:50%;}
</style>
答案 7 :(得分:0)
是的,如果您在单元格之前(或之后,如果您调整我的解决方案)将自己限制为一个孩子(如文本节点或元素,但实际上是CSS框术语中),则可以使用display: contents
因此,休息。
<style>
#d1::after {
content: "";
display: table-row;
}
</style>
<div style="display: table">
<div id="d1" style="display: contents">aaaaaaaaaa</div>
<div style="display: table-cell">bbbbbbbbb</div>
</div>