Eu sei que é uma reação tardia, mas eu só queria gastar meus 2 centavos, já que minha maneira de fazer isso não é aqui.
Você vê, eu realmente não gosto de brincar com margens, especialmente margens negativas . Cada navegador parece lidar com isso de forma um pouco diferente e as margens são facilmente influenciadas por muitas situações.
Minha maneira de ter certeza de que tenho uma boa tabela com divs, é criar uma boa estrutura html primeiro e depois aplicar o css.
Exemplo de como eu faço:
<div class="tableWrap">
<div class="tableRow tableHeaders">
<div class="tableCell first">header1</div>
<div class="tableCell">header2</div>
<div class="tableCell">header3</div>
<div class="tableCell last">header4</div>
</div>
<div class="tableRow">
<div class="tableCell first">stuff</div>
<div class="tableCell">stuff</div>
<div class="tableCell">stuff</div>
<div class="tableCell last">stuff</div>
</div>
</div>
Agora, para o css, simplesmente uso a estrutura de linhas para garantir que as bordas estejam apenas onde precisam estar, sem causar margens;
.tableWrap {
display: table;
}
.tableRow {
display: table-row;
}
.tableWrap .tableRow:first-child .tableCell {
border-top: 1px solid #777777;
}
.tableCell {
display: table-cell;
border: 1px solid #777777;
border-left: 0;
border-top: 0;
padding: 5px;
}
.tableRow .tableCell:first-child {
border-left: 1px solid #777777;
}
Et voila, uma mesa perfeita. Obviamente, isso faria com que seus DIVs tivessem 1px de diferença nas larguras (especificamente o primeiro), mas para mim, isso nunca criou nenhum tipo de problema. Se isso acontecer na sua situação, acho que você dependeria mais das margens.