Cómo agregar un margen a una fila de tabla


Tengo una tabla que contiene muchas filas. Algunas de estas filas son class="highlight" y significan una fila que necesita un estilo diferente y resaltada. Lo que estoy tratando de hacer es agregar un espacio adicional antes y después de estas filas para que aparezcan ligeramente separadas de las otras filas.

Pensé que podría hacer esto con margin-top:10px;margin-bottom:10px;, pero no está funcionando. ¿Alguien sabe cómo hacer esto, o si podría hacerse? Aquí está el HTML y he establecido el 2do tr en el tbody para resaltar la clase.

<table>
<thead>
  <tr>
     <th>Header 1</th>
     <th>Header 2</th>
  </tr>
</thead>
<tbody>
  <tr>
     <td>Value1</td>
     <td>Value2</td>
  </tr>
  <tr class="highlight">
     <td>Value1</td>
     <td>Value2</td>
  </tr>
  <tr>
     <td>Value1</td>
     <td>Value2</td>
  </tr>
  <tr>
     <td>Value1</td>
     <td>Value2</td>
  </tr>
</tbody>
</table>
 125
css
Author: Katti, 2012-05-21

18 answers

Las filas de la tabla no pueden tener valores de margen. ¿Puedes aumentar el relleno? Eso funcionaría. De lo contrario, podría insertar un <tr class="spacer"></tr> antes y después de las filas class="highlighted".

 114
Author: Steve Binder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-21 18:10:43

La propiedad border-spacing funcionará para este caso particular.

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

Referencia.

 63
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-30 08:36:53

No puedes estilizar las <tr>s por sí mismas, pero puedes darle a las <td> s dentro de las" highlight " <tr>s un estilo, como este

tr.highlight td {padding-top: 10px; padding-bottom:10px}
 50
Author: Mr Lister,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-21 18:14:35

La altura de la línea puede ser la solución posible

tr
{
    line-height:30px;
}
 20
Author: Mehmet Eren Yener,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-24 21:58:54

Sé que esto es un poco viejo, pero acabo de conseguir algo en las mismas líneas para trabajar. ¿No podrías hacer esto?

tr.highlight {
    border-top: 10px solid;
    border-bottom: 10px solid;
    border-color: transparent;
}

Espero que esto ayude.

 18
Author: Jrd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-16 19:23:39

En primer lugar, no intente poner un margen a <tr> o a <td> porque no funcionará en el renderizado moderno.

  • Solución 1

Aunque el margen no funciona, el relleno funciona:

td{
    padding-bottom: 10px;
    padding-top: 10px;
}

Advertencia: Esto también empujará el borde más lejos del elemento, si su borde es visible, es posible que desee usar la solución 2 en su lugar.

  • Solución 2

Para mantener la frontera cerca de la elemento e imitar el margen, poner otro <tr> entre cada uno de su mesa de rodillos <tr> así:

<tr style="height: 20px;"> <!-- Mimic the margin -->
</tr>
 10
Author: Antoine Pelletier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-26 13:39:30

Debido a que margin se ignora en tr, generalmente uso una solución alternativa, estableciendo un border-bottom o border-top transparente y estableciendo la propiedad background-clip a padding-box para que el background-color no se pinte debajo del borde.

table {
   border-collapse: collapse; /* [1] */
}

th, td {
  border-bottom: 5px solid transparent; /* [2] */
  background-color: gold; /* [3] */
  background-clip: padding-box; /* [4] */
}
  1. Se asegura de que las celdas compartan un borde común, pero es completamente opcional. La solución funciona sin ella.
  2. El valor 5px representa el margen que desea alcanzar
  3. Establece el background-color de su fila/celda
  4. Se asegura de que el background no pintado debajo de la border

Vea una demostración aquí: http://codepen.io/meodai/pen/MJMVNR?editors=1100

background-clip es compatible con todos los navegadores modernos. (E IE9+)

Alternativamente puede usar un border-spacing. Pero esto no funcionará con border-collapse establecido en collapse.

 7
Author: meo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-20 10:18:24

Una forma de imitar el margen en la fila sería usar el pseudo selector para agregar algún espaciado en el td.

.highlight td::before, .highlight td::after
{
  content:"";
  height:10px;
  display:block;
}

De esta manera cualquier cosa marcada con la clase highlight se separará arriba y abajo.

Https://jsfiddle.net/d0zmsrfs/

 4
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-28 15:33:32

Un truco para dar la apariencia de los márgenes entre las filas de la tabla es darles un borde del mismo color que el fondo. Esto es útil cuando se estila un tema de terceros donde no se puede cambiar el marcado html. Eg:

tr{ 
    border: 5px solid white;
}
 3
Author: user3880247,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-23 20:47:32

He aquí una manera clara de hacerlo:

table tr {
    border-bottom: 4px solid;
}

Que agregará 4px de espaciado vertical entre cada fila. Y si quisieras no poner esa frontera en el último hijo:

table tr:last-child {
    border-bottom: 0;
}

Recordatorio de que los pseudo-selectores CSS3 solo funcionarán en IE 8 y por debajo con selectivizr.

 2
Author: user1429980,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-22 21:24:02

Esto no va a ser exactamente perfecto, aunque me alegró descubrir que puede controlar el espaciado horizontal y vertical por separado:

table
{
 border-collapse: separate;
 border-spacing: 0 8px;
}
 2
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-25 07:39:26

Puede intentar usar transformaciones CSS para sangrar un tr completo:

tr.indent {
   -webkit-transform: translate(20px,0);
   -moz-transform: translate(20px,0);
}

Creo que esta es una solución válida. Parece funcionar bien en Firefox 16, Chrome 23 y Safari 6 en mi OSX.

 1
Author: Tomi Mickelsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-07 15:37:33

Me di por vencido e inserté un código jQuery simple como se muestra a continuación. Esto agregará un tr después de cada tr, si tienes tantos tr como yo. Demo: https://jsfiddle.net/acf9sph6 /

<table>
  <tbody>
     <tr class="my-tr">
        <td>one line</td>
     </tr>
     <tr class="my-tr">
        <td>one line</td>
     </tr>
     <tr class="my-tr">
        <td>one line</td>
     </tr>
  </tbody>
</table>
<script>
$(function () {
       $("tr.my-tr").after('<tr class="tr-spacer"/>');
});
</script>
<style>
.tr-spacer
{
    height: 20px;
}
</style>
 1
Author: Jenny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-24 19:07:18

Le sugiero encarecidamente que eche un vistazo a sus análisis y vea cuántos usuarios de IE7 o menos tiene visitando el sitio. He encontrado que ahora soy capaz de soltar el soporte para IE7, y eso significa que puedo usar tablas CSS... lo que hará que las cosas sean mucho más fáciles de trabajar.

 0
Author: user1337,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-21 18:16:48

Agregue este estilo antes de la clase = " resaltado" relleno-parte inferior y la pantalla es inline-table

 0
Author: mohamed abo elmagd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-19 13:53:04

Agregue un div a las celdas que le gustaría agregar un espacio adicional:

<tr class="highlight">
 <td><div>Value1</div></td>
 <td><div>Value2</div></td>
</tr>
tr.highlight td div {
margin-top: 10px;
}
 0
Author: user3540275,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-18 19:58:13

Otra posibilidad es utilizar un pseudo selector: after o: before

tr.highlight td:last-child:after
{
  content: "\0a0";
  line-height: 3em;
}

Eso podría evitar problemas con el navegador que no entiende los pseudo selectores, además de los colores de fondo no son un problema.

La desventaja es, sin embargo, que añade algunos espacios en blanco extra después de la última celda.

 0
Author: Herbert Peters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-08 01:22:01

Puede crear espacio entre las filas de la tabla agregando una fila vacía de celdas como esta...

<tr><td></td><td></td></tr>

CSS se puede usar para apuntar a las celdas vacías de esta manera {

table :empty{border:none; height:10px;}

NB: Esta técnica solo es buena si ninguna de sus células normales estará vacía/vacante.

Incluso un espacio sin ruptura servirá para evitar que una celda sea dirigida por la regla CSS anterior.

No hace falta mencionar que puedes ajustar la altura del espacio a lo que quieras con la altura propiedad incluida.

 0
Author: user4723924,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-18 22:35:42