Saltar al contenido

Tablas CSS

Varias propiedades CSS se usan ampliamente para dar estilo a las tablas HTML. Cada una se describe a continuación.

En este capítulo, veremos cómo dar estilo a las tablas, incluido el cambio de los colores de los encabezados y las filas.

Propiedades de estilo de tablas

Estas son las propiedades CSS que se usan para dar estilo a una tabla. Las propiedades background-color y color establecen los colores de fondo y del texto, respectivamente. La propiedad border-collapse colapsa los bordes de la tabla. La propiedad text-align establece la alineación horizontal del texto. Además, puedes usar height, width y padding para ajustes de diseño.

Ejemplo de dar estilo a una tabla:

Ejemplo de estilo de tablas HTML

html
<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      table {
        width: 100%;
        border-collapse: collapse;
      }
      table,
      th,
      td {
        border: 1px solid black;
      }
      thead {
        background-color: #1c87c9;
        color: #ffffff;
      }
      th {
        text-align: center;
        height: 50px;
      }
      tbody tr:nth-child(odd) {
        background: #ffffff;
      }
      tbody tr:nth-child(even) {
        background: #f4f4f4;
      }
    </style>
  </head>
  <body>
    <table>
      <thead>
        <tr>
          <th>Heading</th>
          <th>Heading</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Some text</td>
          <td>Some text</td>
        </tr>
        <tr>
          <td>Some text</td>
          <td>Some text</td>
        </tr>
        <tr>
          <td>Some text</td>
          <td>Some text</td>
        </tr>
        <tr>
          <td>Some text</td>
          <td>Some text</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

Resultado

Ejemplo de tabla

Vamos a explicar el código anterior.

Como puedes ver, nuestra tabla tiene dos secciones principales: la sección <thead> para los encabezados y la sección <tbody> para las filas de datos. La tabla usa bordes negros, aplicados mediante la propiedad border. Puedes usar cualquier color y estilo de borde que prefieras.

Color de la tabla

Como ves, la parte <thead> de nuestra tabla es azul y dondequiera que escribimos texto es blanco. Para el fondo azul, usamos la propiedad background-color, y para el texto blanco, usamos la propiedad color. Los demás textos están escritos en negro.

Colapsar bordes

La propiedad border-collapse especifica si los bordes de una tabla se colapsan en un solo borde o se separan.

Ancho y alto de la tabla

La tabla también tiene propiedades width y height. Como ves, usamos estas propiedades en nuestro estilo. Usamos la propiedad width para toda la tabla y la propiedad height para los encabezados. Podemos usar estas propiedades con píxeles y porcentajes.

Alineación del texto en la tabla

Ahora sobre la alineación del texto en la tabla. Como sabes, antes usamos la propiedad text-align para la posición del texto. En nuestro ejemplo, como ves, usamos la propiedad text-align para el encabezado. Para eso, usamos "text-align: center". Puedes leer nuestro capítulo anterior para saber cómo usarla.

Relleno de la tabla

Para controlar el espacio entre el borde y el contenido en una tabla, usa la propiedad padding en los elementos <td> y <th>:

Relleno de tablas HTML

css
td, th {
  padding: 15px;
}

Alineación horizontal con la propiedad text-align

Con la ayuda de la propiedad CSS text-align, puedes establecer la alineación horizontal del contenido en <th> o <td>.

De forma predeterminada, el contenido de los elementos <td> se alinea a la izquierda y el contenido de los elementos <th> se alinea al centro. En el siguiente ejemplo, el contenido de los elementos <th> y <td> se alinea a la derecha:

Ejemplo de alinear el contenido de los elementos <th> y <td> a la derecha:

Ejemplo de alinear el contenido de los elementos <th> y <td> a la derecha

html
<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      table,
      td,
      th {
        border: 1px solid black;
      }
      table {
        border-collapse: collapse;
        width: 100%;
      }
      th,
      td {
       text-align: right;
      }
    </style>
  </head>
  <body>
    <h2>Horizontal alignment example</h2>
    <table>
      <thead>
        <tr>
          <th>Firstname</th>
          <th>Lastname</th>
          <th>Money</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Sherlock</td>
          <td>Holmes</td>
          <td>$200</td>
        </tr>
        <tr>
          <td>John</td>
          <td>Watson</td>
          <td>$250</td>
        </tr>
        <tr>
          <td>Mary</td>
          <td>Whatson</td>
          <td>$500</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

Alineación vertical con la propiedad vertical-align

Usando la propiedad CSS vertical-align, puedes establecer la alineación vertical del contenido en <th> o <td>.

De forma predeterminada, el contenido tanto en los elementos <th> como en los <td> se alinea verticalmente al centro.

En el siguiente ejemplo, el contenido de los elementos <td> se alinea verticalmente abajo:

Ejemplo de la alineación vertical del contenido de los elementos <td> abajo:

Ejemplo de la alineación vertical del contenido de los elementos <td> abajo:

html
<!DOCTYPE html>
<html>
  <head>
    <style>
      table,
      td,
      th {
        border: 1px solid black;
      }
      table {
        border-collapse: collapse;
        width: 100%;
      }
      td {
        height: 50px;
        vertical-align: bottom;
        text-align: right;
        padding-right: 10px;
      }
    </style>
  </head>
  <body>
    <h2>Vertical alignment example</h2>
    <table>
      <thead>
        <tr>
          <th>Firstname</th>
          <th>Lastname</th>
          <th>Money</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Sherlock</td>
          <td>Holmes</td>
          <td>$300</td>
        </tr>
        <tr>
          <td>John</td>
          <td>Watson</td>
          <td>$250</td>
        </tr>
        <tr>
          <td>Mary</td>
          <td>Watson</td>
          <td>$500</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

Divisores horizontales

Al añadir la propiedad CSS border-bottom a los elementos <td> y <th>, crearás divisores horizontales.

Ejemplo de crear divisores horizontales:

Ejemplo de crear divisores horizontales:

html
<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      table {
        border-collapse: collapse;
        width: 100%;
      }
      th,
      td {
        padding: 10px;
        text-align: left;
        border-bottom: 1px solid #cccccc;
      }
    </style>
  </head>
  <body>
    <h2>Horizontal dividers example</h2>
    <table>
      <thead>
        <tr>
          <th>Firstname</th>
          <th>Lastname</th>
          <th>Money</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Sherlock</td>
          <td>Holmes</td>
          <td>$200</td>
        </tr>
        <tr>
          <td>John</td>
          <td>Watson</td>
          <td>$350</td>
        </tr>
        <tr>
          <td>Mary</td>
          <td>Watson</td>
          <td>$500</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

Tablas con efecto hover

Usando el selector CSS :hover en el elemento <tr>, harás que la tabla tenga efecto hover.

Ejemplo de crear una tabla con efecto hover:

Ejemplo de crear una tabla con efecto hover:

html
<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      table {
        border-collapse: collapse;
        width: 100%;
      }
      tr {
        background-color: #f5f5f5;
      }
      th,
      td {
        padding: 15px;
        text-align: left;
        border-bottom: 1px solid #ccc;
      }
      tr:hover {
        background-color: #cdcdcd;
      }
    </style>
  </head>
  <body>
    <h2>Hoverable table example</h2>
    <table>
      <thead>
        <tr>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Money</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Sherlock</td>
          <td>Holmes</td>
          <td>$200</td>
        </tr>
        <tr>
          <td>John</td>
          <td>Watson</td>
          <td>$350</td>
        </tr>
        <tr>
          <td>Mary</td>
          <td>Watson</td>
          <td>$500</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

Tabla con franjas tipo cebra

Usando el selector nth-child() y añadiendo la propiedad CSS background-color a las filas impares (pares) de la tabla, puedes crear una tabla con franjas tipo cebra.

Ejemplo de crear una tabla con franjas tipo cebra:

Ejemplo de crear una tabla con franjas tipo cebra:

html
<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      table {
        border-collapse: collapse;
        width: 100%;
      }
      th,
      td {
        text-align: left;
        padding: 10px;
      }
      tr:nth-child(even) {
        background-color: #6eeccf;
      }
      tr:nth-child(odd) {
        background-color: #2d7f88;
      }
    </style>
  </head>
  <body>
    <h2>Striped table example</h2>
    <table>
      <thead>
        <tr>
          <th>First name</th>
          <th>Last name</th>
          <th>Points</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Sherlock</td>
          <td>Holmes</td>
          <td>$250</td>
        </tr>
        <tr>
          <td>John</td>
          <td>Watson</td>
          <td>$350</td>
        </tr>
        <tr>
          <td>Mary</td>
          <td>Watson</td>
          <td>$500</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

Tablas responsivas

Para hacer que una tabla sea responsiva, envuélvela en un elemento contenedor y aplica overflow-x: auto a ese contenedor.

Ejemplo de crear una tabla responsiva:

Ejemplo de crear una tabla responsiva

html
<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      div {
        overflow-x: auto;
      }
      table {
        border-collapse: collapse;
        width: 100%;
      }
      th,
      td {
        text-align: left;
        padding: 8px 5px;
      }
      tr:nth-child(even) {
        background-color: #6eeccf;
      }
      tr:nth-child(odd) {
        background-color: #2d7f88;
      }
    </style>
  </head>
  <body>
    <h2>Responsive table example</h2>
    <div>
      <table>
        <thead>
          <tr>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>Sherlock</td>
            <td>Holmes</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
          </tr>
          <tr>
            <td>John</td>
            <td>Watson</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
          </tr>
          <tr>
            <td>Mary</td>
            <td>Watson</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
          </tr>
        </tbody>
      </table>
    </div>
  </body>
</html>

Práctica

¿Qué propiedades de CSS se pueden aplicar a las tablas?

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.