¿Puedo comenzar una nueva fila de celdas de una tabla CSS sin un elemento contenedor de fila?
Dado un marcado como este:
<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>
¿Es posible diseñar este documento para que se vea así?
|-------|---------|
| | |
| A | B |
| | |
|-------|---------|
| | |
| A | B |
| | |
|-------|---------|
| | |
| A | B |
| | |
|-------|---------|
(y si el contenido en A o B es más largo, su vecino crecerá hasta igualar su altura)…
sin ningún margen de beneficio adicional?
Entiendo que dar y valorar .a
solo .b
provocaría una gran disputa.display
table-cell
¿Cual es la solución?
No sin flexbox , que aún no ha llegado a varios de los principales navegadores, parece ser el consenso.
No, creo que no es posible "sin ningún margen de beneficio adicional". Necesita:
div
envoltorio quedisplay: table-row;
contiene "celdas" A y B- JavaScript con oyentes en
div
s, que determinarámax
las alturas de A y B en cada par y las establecerá en una más pequeña
Solución para el segundo:
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);
});
He actualizado tu Fiddle. Funciona en el documento listo, debe personalizarlo si desea determinar cambios dinámicos de altura.
Déjame saber si tengo que explicar cómo funciona. Por supuesto, puede forzar el ancho de div.a
y div.b
en CSS y no verificar el ancho máximo con jQuery (entonces tendrá que determinar solo la altura máxima en cada par).
no, esto no es posible sin darle un envoltorio a cada fila.
aquí hay una solución CSS pura con un único contenedor que contiene (por fila)
.row {
background-color: #ccc;
float: left;
margin: 10px 0;
padding: 1em;
width: 50%;
}
.a {
float: left;
width: 45%;
}
.b {
float: right;
width: 45%;
}
y el 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>
si quieres que a y b tengan diferentes colores de fondo tendrás que usar altura: 100%
Puse esto en un comentario, pero probablemente debería convertirlo en una respuesta. así es como se hace lo mismo (usando filas) forzando también una altura del 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%;
}
y el 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>