Tengo una mesa como esta:
<table>
<tfoot>
<tr><td>footer</td></tr>
</tfoot>
<tbody>
<tr><td>Body 1</td></tr>
<tr><td>Body 1</td></tr>
<tr><td>Body 1</td></tr>
</tbody>
<tbody>
<tr><td>Body 2</td></tr>
<tr><td>Body 2</td></tr>
<tr><td>Body 2</td></tr>
</tbody>
<tbody>
<tr><td>Body 3</td></tr>
<tr><td>Body 3</td></tr>
<tr><td>Body 3</td></tr>
</tbody>
</table>
Me gustaría poner algo de espacio entre cada elemento tbody, pero el relleno y el margen no tienen ningún efecto. ¿Algunas ideas?
Respuestas:
Pruebe esto, si no le importa no tener fronteras.
fuente
transparent
como color de borde. Lo que dijo @SteveAlmond.transparent
le dará el color de fondo del elemento, esencialmente indistinguible del cuerpo del elemento. Debería colorear explícitamente el borde del color que desea que aparezca (para hacerlo supuestamente invisible)Algo como esto funcionará, según los requisitos de compatibilidad de su navegador:
fuente
display: table-row;
?La gente siempre tendrá opiniones controvertidas sobre el uso de elementos de tabla vacíos para diseñar una página (como lo demuestra el voto negativo de esta respuesta). Reconozco esto, pero a veces es más fácil usarlos de esta manera cuando se trabaja de una manera " rápida y sucia ".
He usado filas vacías en proyectos anteriores para espaciar grupos de filas de tablas. Asigné a las filas espaciadoras una clase css propia y definí una altura para esa clase que actuaba como un margen superior e inferior para ese grupo de filas de la tabla.
Si no tiene bordes en las celdas de su tabla,también puede definir una altura para su celda o fila típica en su hoja de estilo que espacia uniformemente todas las filas de su tabla.fuente
Había tenido problemas para espaciar correctamente múltiples
<tbody>
con::before
pseudo, en presencia de<tr>
contener<td>
con rowspan en un par de navegadores.Básicamente, si tiene una
<tbody>
estructura como esta:Y sigue a quién aconseja escribir css en un
::before
pseudo elemento de esta manera:Esto afectará el intervalo de filas , haciendo que la tabla "pierda" en el segundo
<tr>
la cantidad de<td>
intervalos de fila presentes en el primero.Entonces, si alguien se encuentra con ese tipo de problema, la solución es diseñar
::before
pseudo de esta manera:Aquí hay un violín
fuente
Aquí hay otra posibilidad en la que se basa: first-child que no está disponible en todos los navegadores:
fuente
Simplemente configúrelo
display
comoblock
y funcionará.fuente
display:block
rompe la alineación de la columna entre los elementos tbody. Ya no obtiene los beneficios del motor de diseño de tablasDe todas las respuestas dadas anteriormente, solo las respuestas de djenson47 mantienen la separación de presentación y contenido . El inconveniente del método del modelo de borde contraído es que ya no puede usar el borde de la tabla o los atributos de espacio entre celdas para separar las celdas individuales. Se podría argumentar que esto es algo bueno y que existen algunas soluciones, pero puede ser un fastidio. Entonces creo que el método del primer hijo es el más elegante.
Alternativamente, también puede establecer la propiedad de desbordamiento de su clase TBODY en cualquier cosa que no sea "visible". Este método también le permite conservar un modelo de bordes separados:
fuente
Debido a que el relleno se puede aplicar a los TD, puede hacer un truco con el signo +. Entonces será posible dar un relleno superior a los TD del primer TR de un tbody:
He añadido el "tbody + tbody" para que el primer tbody no tenga un relleno superior. Sin embargo, no es obligatorio.
Hasta donde yo sé, no hay inconvenientes :), aunque no probé los navegadores más antiguos.
fuente
Puede usar
border-spacing
en una tabla con grupos de filas de tabla para agregar un espacio entre esos grupos. Sin embargo, no creo que haya una forma de especificar qué grupos están espaciados y cuáles no.CSS
fuente
NUEVA RESPUESTA
Puede utilizar tantas
<tbody>
etiquetas como desee. No me di cuenta de que W3C estaba bien hasta ahora. No quiero decir que mi solución a continuación no funcione (lo hace), pero para hacer lo que está tratando de hacer, asigne sus<tbody>
clases de etiquetas y luego haga referencia a sus<td>
etiquetas individuales a través de CSS así:y su HTML así:
Prueba a ese chico :)
ANTIGUA RESPUESTA
hagas lo que hagas, NO insertes filas en blanco ...
no debería tener más de 1 elemento tbody en su tabla. lo que puede hacer es establecer el atributo class o id en sus
<tr>
elementos y darles<td>
relleno a sus etiquetas correspondientes :Incluso puede asignar a la parte superior e inferior
<tr>
una clase adicional para que solo realicen relleno superior o inferior, respectivamente:y en su HTML, su
<tr>
etiqueta se vería así:¡Espero que esto ayude!
fuente
La respuesta de djensen47 funciona muy bien para los navegadores más nuevos, sin embargo, como se señaló, IE7 no funciona.
Mi solución para que este problema sea compatible con los navegadores más antiguos fue envolver el contenido de cada celda dentro de un div. Luego agregue un margin-top al div.
CSS
La configuración de altura mantiene las celdas al menos 30px de alto para evitar que cualquier color de celda utilizado dentro del div se colapse alrededor del texto. El margen superior crea el espacio deseado haciendo que toda la fila sea más alta.
fuente
Encontré esto mientras intentaba resolverlo yo mismo. Tuve éxito al poner una
<br>
etiqueta justo antes de la</tbody>
etiqueta de cierre . Es una solución puramente visual, pero parece funcionar en la mayoría de los navegadores que probé.Debería ser accesible también.
fuente