CSS: ¿cómo creo un espacio entre las filas de una tabla?

94

Lo que significa que la tabla resultante se parece menos a esto:

[=== FILA ===]
[=== FILA ===]
[=== FILA ===]
[=== FILA ===]

... y más como esto:

[=== FILA ===]

[=== FILA ===]

[=== FILA ===]

[=== FILA ===]

Intenté agregar

margin-bottom:1em;

a td y tr pero no obtuve nada. ¿Algunas ideas?

MGOwen
fuente
2
¿Por qué no el espaciamiento celular y el acolchado celular?
adatapost
1
El espaciado de celdas también dará espacio entre columnas.
rahul
4
El espacio de celdas y el relleno de celdas no son HTML (X) válidos. No debes usarlos.
freiksenet
8
@freiksenet: Estás equivocado. Son HTML4 estricto perfectamente válido ( w3.org/TR/html401/struct/tables.html#h-11.2.1 ), XHTML1 ( w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd ) e incluso XHTML1 .1 ( w3.org/MarkUp/DTD/xhtml-table-1.mod ).
mercator
1
¿Posible duplicado del espacio entre dos filas en una tabla?
ThisClark

Respuestas:

214

Todo lo que necesita:

table {
    border-collapse: separate;
    border-spacing: 0 1em;
}

Eso supone que desea un espacio vertical de 1 em y no un espacio horizontal. Si está haciendo esto, probablemente también debería considerar controlar la altura de su línea.

Es algo extraño que algunas de las respuestas que dio la gente tengan que ver con el colapso de la frontera: colapso, cuyo efecto es exactamente lo contrario de lo que pedía la pregunta.

John Haugeland
fuente
Oh, claro, estaba tratando de obtener una columna específica para tener un espacio más amplio, así que no pensé en aplicarlo a la tabla
Jonathan.
4
Esta solución no le permite aplicar selectivamente el espaciado a ciertas filas.
Flimm
15
La pregunta no solicitó eso.
John Haugeland
Esta es una buena idea, pero para llenar el espacio superior de la primera fila tuve que encontrar una solución que no es estándar, supongo, pero funciona. Dando el thead, tbody {position: relative; top: -{border-spacing-value} }.
Farzad YZ
3
puedo decir que te amo Oh Dios mío. acabas de guardar mi
dinero
93
table {
    border-collapse: collapse;
}

td {
    padding-top: .5em;
    padding-bottom: .5em;
}

Las celdas no reaccionarán a nada a menos que establezca primero el colapso del borde. También puede agregar bordes a los elementos TR una vez que esté configurado (entre otras cosas).

Si esto es para el diseño, pasaría a usar DIV y técnicas de diseño más actualizadas, pero si se trata de datos tabulares, elimínese. Todavía hago un uso intensivo de tablas en mis aplicaciones web para datos.

Ryan Florencia
fuente
¿Lo probaste? Parece que los td pueden tener relleno con o sin colapso. Las fronteras funcionan con colapso, pero no en IE.
Kobi
Esto funcionó. Es molesto que los márgenes no funcionen, pero en este caso no importa. Gracias.
MGOwen
30
Este es un enfoque realmente malo. Está modificando el cuadro de las celdas para colocar las celdas, en lugar de simplemente colocar las celdas, fusionando las celdas juntas porque desea que estén separadas. En cuanto las celdas necesiten fondos, estás jodido. El enfoque correcto es separar los bordes, no colapsarlos, utilizando la separación de los bordes para definir, ya sabes, la separación de los bordes.
John Haugeland
1
Es casi la primera pieza de CSS2 que se implementó, porque los navegadores ya tenían espacios en la tabla implementados para la versión HTML que todos solían usar para el diseño con precisión de píxeles. Si, estoy seguro. :)
John Haugeland
1
Es uno de esos extraños rincones de CSS que nadie más que los que han leído las especificaciones conocen. (Hay una cantidad sorprendentemente grande de ellos. De manera similar, el flotador básicamente nunca debe usarse de la forma en que se usa en la práctica).
John Haugeland
7

Si ninguna de las otras respuestas es satisfactoria, siempre puede crear una fila vacía y diseñarla con CSS de forma adecuada para que sea transparente.

Flimm
fuente
¿Por qué el voto negativo? Las otras respuestas son problemáticas: la respuesta de rpflo requiere que use border-collapse y expanda el relleno de las celdas, haciendo que las celdas parezcan más grandes en lugar de crear un espacio entre ellas. La respuesta de John Haugeland no le permite aplicar selectivamente el espaciado a ciertas filas. Podría continuar, pero esta respuesta es una opción que funcionó para mi caso de uso cuando ninguna de las otras respuestas lo hizo.
Flimm
2
El método de votación negativa del usuario anónimo de especificar la altura de filas individuales con CSS es muy superior a agregar contenido ficticio a la tabla, en caso de que necesite controlar filas individuales, que no es de lo que trata esta pregunta.
John Haugeland
Las filas falsas también confunden las herramientas que esperan que las filas de la tabla sean filas de la tabla (como importantes herramientas de accesibilidad para discapacitados y complementos comunes para exportar / ordenar / reformatear, etc.). Hay muchas razones para usar estilos para controlar el estilo, en lugar de introducir cosas falsas, como regla general. Lea sobre el marcado semántico para obtener más información.
MGOwen
@MGOwen ¿Podría nombrar las herramientas de accesibilidad que fallarían en este escenario y cómo fallarían? Ahora soy escéptico con los consejos de accesibilidad que no mencionan detalles específicos, hay muchos malos consejos de accesibilidad que en realidad no ayudan a nadie (por ejemplo, los consejos de esquema de documentos para HTML 5 estaban equivocados , las herramientas de accesibilidad no trabajar de la forma en que la gente dice que trabaja).
Flimm
4

Si no tiene bordes, o tiene bordes y desea el espacio dentro de las celdas, puede usar paddingo line-height. Hasta donde yo sé, el margen no tiene ningún efecto en las celdas y filas.
Una propiedad de CSS para el espaciado de celdas es border-spacing, pero no funciona en IE6 / 7 (por lo que puede usarla dependiendo de su grupo).

Si todo lo demás falla, puede usar el cellspacingatributo antiguo en su marcado, pero esto también le dará espacio entre las columnas. Algunos restablecimientos de CSS sugieren que debe configurarlo de todos modos para obtener compatibilidad con varios navegadores:

/ * las tablas aún necesitan cellspacing="0"en el marcado * /

Kobi
fuente
2

Esta es la forma (pensaba que era imposible):

Primero, asigne a la tabla solo un espaciado de borde vertical (por ejemplo, 5px) y establezca el espaciado de borde horizontal en 0. Luego, debe asignar los bordes adecuados a cada celda de la fila. Por ejemplo, la celda más a la derecha de cada fila debe tener un borde en la parte superior, inferior y derecha. Las celdas más a la izquierda deben tener un borde en la parte superior, inferior e izquierda. Y las otras celdas entre estos 2 solo deben tener un borde en la parte superior e inferior. Como este ejemplo:

<table style="border-spacing:0 5px; color:black">
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
</table>
Arash Esmaeili
fuente
1

En mi opinión, la forma más sencilla de hacerlo es agregar relleno a su etiqueta.

td {
 padding: 10px 0
}

¡Espero que esto te ayudará! ¡Animar!

Huy Le
fuente
Esto crea espacio adicional dentro de la fila de la tabla. Si las filas de la tabla tienen colores, eso no se verá bien.
Kokodoko
1

Simplemente puede usar padding-topy padding-bottomen un tdelemento.

La unidad puede cualquier cosa de esta lista:

ingrese la descripción de la imagen aquí

Código de demostración:

td
{
  padding-top: 10px;
  padding-bottom: 10px;
}
<table>
  <tr>
    <th>Firstname</th>
    <th>Lastname</th>
  </tr>
  <tr>
    <td>Peter</td>
    <td>Griffin</td>
  </tr>
  <tr>
    <td>Lois</td>
    <td>Griffin</td>
  </tr>
</table>

Abrar Jahin
fuente
0

el relleno en el TD funciona si quieres que el espacio tenga el mismo color de fondo que el td

en mi caso, el requisito era un espacio en blanco entre la fila del encabezado y lo que estaba encima

Al aplicar este estilo a una sola celda, pude obtener la separación deseada. No fue necesario agregarlo a todas las celdas ... Podría decirse que no es el MÁS elegante, pero posiblemente más elegante que las filas de separación.

<td colspan="10"> 
    <div class="HeaderRow" 
         style="margin-top:10px;">
            <%# Eval("VendorName")%>
     </div>
</td>  
Greg
fuente
-1

Si se apega al diseño utilizando tablas, la mejor idea será dar una fila vacía sin contenido y una altura especificada entre cada fila de la tabla.

Puede usar div para evitar esta complejidad. Solo dale un margen a cada div.

rahul
fuente
1
Todavía hay buenas razones para usar tablas (como datos tabulares). Tienes razón, las filas vacías son ciertamente una ruta tonta: P Pero hay una solución, el colapso de la frontera.
Ryan Florence
-1

También puede modificar la altura de cada fila usando CSS.

<head>
 <style>
 tr {
   height:40px;
 }
</style>
</head>

<body>
<table>

<tr> <td>One</td> <td>Two</td> </tr>
<tr> <td>Three</td> <td>Four</td> </tr>
<tr> <td>Five</td> <td>Six</td> </tr>

</table>
</body>

También puedes modificar la altura del <td>elemento, debería darte el mismo resultado.


fuente
-1

Cree otro <tr>justo debajo y agregue algo de espacio o altura al contenido de<td>

ingrese la descripción de la imagen aquí

Mira el violín, por ejemplo

https://jsfiddle.net/jd_dev777/wx63norf/9/

Jaydeep Chauhan
fuente
Esto se considera una mala práctica. Una de las razones es que las herramientas (como lectores para usuarios discapacitados) esperan que las filas de la tabla sean filas de la tabla, y exportarán / leerán / interpretarán sus filas "falsas" mezcladas con las reales. Vea la primera vez que se dio esta misma respuesta en 2014, arriba.
MGOwen
1
@MGOwen gracias por tu sugerencia. totalmente de acuerdo
Jaydeep Chauhan
-4

Agregue la siguiente regla a tr y debería funcionar

float: left

Muestra (Ábralo en IE9 por supuesto :)): http://jsfiddle.net/zshmN/

EDITAR: Esta no es una solución legal o correcta como han señalado muchos, pero si no tiene opción y necesita algo, esto funcionará en IE9.

Entonces, todos aquellos que están dando votos, háganos saber también la solución correcta

Sandeep Choudhary
fuente
3
Este enfoque evita el alineamiento automático de columnas cuando las celdas contienen datos con diferentes dimensiones; el marcado de la tabla es esencialmente inútil. Funciona bastante bien en los ejemplos proporcionados, pero no es una técnica aconsejable. Modifique el texto de una celda para ver a qué me refiero.
verism
Hola @verism, lo siento, pero no entendí tu punto. ¿Puedes explicarlo un poco más? O si puede proporcionar un violín donde este método falla, ya que he estado usando este método ampliamente y me gustaría ocuparme de los escenarios en los que falla.
Sandeep Choudhary
No hay una delimitación clara de las columnas; lo que significa que los datos tabulares pierden su estructura visual y se vuelven más difíciles de leer. jsfiddle.net/verism/zshmN/5
verismo
@verism ya este es un problema, pero podemos definir columnas de ancho fijo. Sé que esta no es una buena solución, pero no encontré ninguna otra solución que funcione en IE9
Sandeep Choudhary
1
Las filas de la tabla flotante no son legales según la especificación CSS. La sección 17 de CSS2 requiere que los elementos display: table-row estén dentro de los elementos display: table-row-group, -header-group o -footer-group. Sin embargo, el algoritmo flotante de acuerdo con la sección 9 inyecta un bloque principal anónimo. Esto significa que la fila de la tabla ya no tiene un diseño principal legal y el navegador está adivinando qué hacer. Esto es completamente incorrecto.
John Haugeland