Supongamos que tengo un marcado como: http://jsfiddle.net/R8eCr/1/
<div class="container">
<div class="column">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
<div class="column">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
<div class="column">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
...
</div>
Entonces CSS
.container {
display: table;
border-collapse: collapse;
}
.column {
float: left;
overflow: hidden;
width: 120px;
}
.cell {
display: table-cell;
border: 1px solid red;
width: 120px;
height: 20px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
Tengo el div externo con display: table; border-collapse: collapse;
y las celdas con display: table-cell
¿por qué todavía no colapsan? ¿Que me estoy perdiendo aqui?
Por cierto, tal vez haya un número variable de celdas en una columna, por lo que no puedo tener solo bordes en un lado.
<table>
y amigos para las mesas?Respuestas:
aquí hay una demostración
primero necesitas corregir tu error de sintaxis es
display: table-cell;
no
diaplay: table-cell;
.container { display: table; border-collapse:collapse } .column { display:table-row; } .cell { display: table-cell; border: 1px solid red; width: 120px; height: 20px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
fuente
Utilice un margen negativo simple en lugar de utilizar una tabla de visualización.
Actualizado en fiddle JS Fiddle
.container { border-style: solid; border-color: red; border-width: 1px 0 0 1px; display: inline-block; } .column { float: left; overflow: hidden; } .cell { border: 1px solid red; width: 120px; height: 20px; margin:-1px 0 0 -1px; } .clearfix { clear:both; }
fuente
En lugar de usar
border
usebox-shadow
:box-shadow: 2px 0 0 0 #888, 0 2px 0 0 #888, 2px 2px 0 0 #888, /* Just to fix the corner */ 2px 0 0 0 #888 inset, 0 2px 0 0 #888 inset;
Demostración: http://codepen.io/Hawkun/pen/rsIEp
fuente
box-shadow
se ignora (desaparece) cuando se utilizan temas de alto contraste en Windows, así que siempre proporcione una alternativa si le preocupa la accesibilidad.Debe usar en
display: table-row
lugar defloat: left;
a su columna y obviamente como @Hushme corrige sudiaplay: table-cell
adisplay: table-cell;
.container { display: table; border-collapse: collapse; } .column { display: table-row; overflow: hidden; width: 120px; } .cell { display: table-cell; border: 1px solid red; width: 120px; height: 20px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
manifestación
fuente
También puede utilizar márgenes negativos:
.column { float: left; overflow: hidden; width: 120px; } .cell { border: 1px solid red; width: 120px; height: 20px; box-sizing: border-box; } .cell:not(:first-child) { margin-top: -1px; } .column:not(:first-child) > .cell { margin-left: -1px; }
<div class="container"> <div class="column"> <div class="cell"></div> <div class="cell"></div> <div class="cell"></div> </div> <div class="column"> <div class="cell"></div> <div class="cell"></div> <div class="cell"></div> </div> <div class="column"> <div class="cell"></div> <div class="cell"></div> <div class="cell"></div> </div> <div class="column"> <div class="cell"></div> <div class="cell"></div> <div class="cell"></div> </div> <div class="column"> <div class="cell"></div> <div class="cell"></div> <div class="cell"></div> </div> </div>
fuente
border-top/left: 0;
. Los márgenes crean compensaciones.¿Por qué no utilizar el esquema? es lo que quieres delinear: 1px rojo sólido;
fuente
Ejemplo de uso de border-collapse: separado; como
ol[type="I"]>li{ display: table; border-collapse: separate; border-spacing: 1rem; }
fuente