Como Criar Tabelas Responsivas com CSS Puro: Sem Scroll Horizontal



Criando tabelas responsivas com CSS - sem scroll horizontal

Criar interfaces adaptáveis é uma exigência em qualquer projeto web moderno. E quando falamos de tabelas — estruturas essenciais para exibir dados — o desafio é ainda maior: garantir legibilidade em telas pequenas, sem sacrificar a estrutura nem a estética.

Neste artigo, você vai aprender a criar tabelas responsivas usando apenas HTML e CSS puro — sem frameworks como Bootstrap ou Tailwind.

  • Nesta abordagem vamos transformar a tabela em blocos (cards) no mobile, reorganizando os dados de forma clara e elegante.

  • 🔥 Obs: No artigo Como criar tabelas responsivas com CSS Puro uilizamos scroll horizontal automático, ideal para tabelas densas com muitas colunas.

Ambas técnicas são simples, eficazes, acessíveis e compatíveis com todos os navegadores modernos. Prontas para você aplicar em projetos profissionais, relatórios, sistemas administrativos e mais.

Como Funciona

Essa abordagem transforma a tabela tradicional em blocos empilhados (cards) quando visualizada em telas pequenas, garantindo leitura fluida no mobile — sem precisar de rolagem lateral.

🧠 Técnicas usadas:

  1. Media query (@media) detecta telas pequenas.

  2. Todos os elementos da tabela (table, thead, tr, td, etc.) são convertidos em display: block.

  3. O <thead> é ocultado.

  4. Cada <td> usa o atributo data-label="Cabeçalho" e um ::before para mostrar o nome da coluna.

🎯 Resultado:

  • Em telas grandes: se comporta como uma tabela tradicional.

  • Em telas pequenas: cada linha <tr> vira um bloco estilo card, e cada <td> mostra seu label usando o atributo data-label.

🧱 Estrutura essencial:

<div>
  <table>
          ...
          <td data-label="Cabeçalho">dados</td>
         ...
  </table>
</div>

🎨 CSS principal:

@media (max-width: 768px) {
  table, thead, tbody, th, td, tr {
    display: block;
  }
  thead { display: none; }
  tr {
    margin-bottom: 1rem; 
    background: white; 
    border: 1px solid #e5e7eb; 
    border-radius: 12px; 
    padding: 1rem; 
  }
  td {
    display: flex;
    justify-content: space-between; 
    padding: 0.5rem 0; // estética
  }
  td::before {
    content: attr(data-label); 
    font-weight: bold;
    color: #4b5563;
  }
}

✅ Vantagens:

✅ Visual elegante em telas grandes
✅ Cards organizados e fáceis de ler em telas pequenas
✅ Sem scroll horizontal
✅ Totalmente sem dependência de frameworks

O lay out do exemplo a seguir transforma a tabela tradicional em blocos empilhados (cards) quando visualizada em telas pequenas, garantindo leitura fluida no mobile — sem precisar de rolagem lateral.

HTML

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>Fully Responsive Table (No Scroll)</title>
</head>
<body>
  <div class="container">
    <h1>Tabela Responsiva Sem Scroll</h1>
    <table>
      <thead>
        <tr>
          <th>Item</th>
          <th>Nome</th>
          <th>Título</th>
          <th>Email</th>
          <th>Função</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td data-label="Item">1</td>
          <td data-label="Nome">Alice Johnson</td>
          <td data-label="Título">Project Manager</td>
          <td data-label="Email">alice@example.com</td>
          <td data-label="Função">Admin</td>
        </tr>
        <tr>
          <td data-label="Item">2</td>
          <td data-label="Nome">Bob Smith</td>
          <td data-label="Título">Developer</td>
          <td data-label="Email">bob@example.com</td>
          <td data-label="Função">Editor</td>
        </tr>
        <tr>
          <td data-label="Item">3</td>
          <td data-label="Nome">Carla Diaz</td>
          <td data-label="Título">Designer</td>
          <td data-label="Email">carla@example.com</td>
          <td data-label="Função">Viewer</td>
        </tr>
      </tbody>
    </table>
  </div>
</body>
</html>

CSS

body {
      font-family: sans-serif;
      background: #f3f4f6;
      padding: 2rem;
      margin: 0;
    }

    .container {
      max-width: 1200px;
      margin: auto;
    }

    h1 {
      font-size: 1.5rem;
      margin-bottom: 1rem;
    }

    table {
      width: 100%;
      border-collapse: collapse;
      background: white;
      border-radius: 16px;
      box-shadow: 0 4px 10px rgba(0,0,0,0.08);
      overflow: hidden;
    }

    thead {
      background: #f9fafb;
    }

    th, td {
      padding: 16px;
      text-align: left;
    }

    th {
      font-size: 0.75rem;
      text-transform: uppercase;
      color: #6b7280;
      font-weight: bold;
    }

    tr {
      border-top: 1px solid #e5e7eb;
    }

    /* Mobile Style - No Scroll */
    @media (max-width: 768px) {
      table, thead, tbody, th, td, tr {
        display: block;
      }

      thead {
        display: none;
      }

      tr {
        margin-bottom: 1rem;
        background: white;
        border: 1px solid #e5e7eb;
        border-radius: 12px;
        padding: 1rem;
      }

      td {
        display: flex;
        justify-content: space-between;
        padding: 0.5rem 0;
      }

      td::before {
        content: attr(data-label);
        font-weight: bold;
        color: #4b5563;
      }
    }

EXEMPLO COMPLETO

See the Pen Tabela responsiva CSS sem scroll by Angelo Luis Ferreira (@angeloalf) on CodePen.

TENTE VOCÊ MESMO

Veja no nosso editor HTML como foi criado a tabela responsiva do nosso exemplo. No editor, altere os códigos da forma que você desejar até conseguir o design desejado. Depois é só copiar os códigos e colar no seu projeto.

Tente você mesmo »

O anúncio abaixo ajuda manter o Portal Visual Dicas

Comentários

×

Infomações do site / SEO