Construindo uma tabela periódica com PHP — o que funciona e o que dá problema
Montar uma página que exibe a tabela periódica dos elementos usando PHP é mais chato do que parece no início. A primeira coisa que você encontra é a necessidade de estruturar os dados dos elementos de forma que o layout em grade funcione corretamente, especialmente porque o hidrogênio precisa ficar sozinho no topo e os gases nobres na coluna da direita. Eu já perdi algumas horas tentando fazer o alinhamento funcionar sem depender de bibliotecas externas.
O básico do pai da tabela periódica em PHP
Você precisa de um array associativo com pelo menos número atômico, símbolo, nome e massa atômica. O truque principal é usar array_chunk() para dividir os 118 elementos em linhas, mas o problema é que a linha 6 tem o lantanídeo e a linha 7 tem o actinídeo, que tradicionalmente ficam separados abaixo do resto. Sem isso, a tabela fica visualmente errada e qualquer estudante vai perceber na hora. O código base que eu uso costuma ser algo como isso:
$elementos = [
['Z' => 1, 'sim' => 'H', 'nome' => 'Hidrogênio', 'massa' => 1.008, 'grupo' => 1],
['Z' => 2, 'sim' => 'He', 'nome' => 'Hélio', 'massa' => 4.0026, 'grupo' => 18],
// ... 116 elementos depois
];
$linhas = array_chunk($elementos, 18);
foreach ($linhas as $linha) {
echo '';
foreach ($linha as $el) {
echo '' . $el['sim'] . ' ';
}
echo ' ';
}
Isso funciona para a estrutura básica, mas tem um problema que a maioria dos tutoriais não menciona: a cor de fundo por categoria. Metais alcalinos, halogênios, gases nobres — cada grupo precisa de uma cor distinta. O CSS entra aqui, e é onde a coisa fica realmente chata porque 7 categorias diferentes pedem 7 cores que não se sobrepõem visualmente.
👉 Clique no botão abaixo para saber mais sobre o assunto!
O problema que ninguém conta
Quando eu fiz meu primeiro projeto desses, tentei hardcodar as cores num array separado. Resultado: o césio e o francio ficam na mesma coluna que o lítio, mas a massa atômica do francio é radioativa e instável, então o valor exato varia conforme a fonte. Eu perdi duas tardes ajustando porque algumas tabelas usam 223 e outras usam 223.0 na terceira casa decimal. A solução foi criar uma função getMassa($simbolo) que consulta uma API ao invés de confiar num array estático. Outro detalhe prático: a responsividade. Em telas pequenas, a tabela de 18 colunas quebra completamente. A solução que eu recomendo é usar overflow-x: auto no container e deixar o usuário rolar horizontalmente. Não adianta tentar empurrar os elementos para baixo — fica ilegível em qualquer dispositivo.
Onde isso falha completamente
Se você tentar fazer uma versão interativa com tooltips que mostram a configuração eletrônica, esqueça. Cada elemento tem uma notação diferente, e calcular isso do zero leva tempo suficiente para justificar o uso de uma biblioteca pronta. Eu testei gerar a configuração com base no número atômico usando a regra de Aufbau, mas o crômio e o cobre são exceções que quebram a lógica simples. O cromo é [Ar] 3d5 4s1 ao invés de [Ar] 3d4 4s2, e isso te pega desprevenido na primeira vez. O download de uma implementação pronta é mais rápido se você não tiver necessidades específicas. O repositório periodic-table/php no GitHub tem uma versão funcional que usa dados estáticos e CSS grid, mas ela não inclui os elementos transurânicos além do oganesônio. Se você precisa de precisão científica completa, vai precisar construir do zero mesmo.
A manutenção também é um problema. Atualizações de nomenclatura da IUPAC acontecem raramente, mas quando acontecem — como foi o caso do ununoctio virar oganesônio em 2016 — todo mundo que copiou um tutorial antigo precisa corrigir manualmente. O hidrogênio às vezes aparece em lugar errado em tabelas desatualizadas, colocandolo no grupo 1 quando na verdade ele não pertence a nenhuma família específica.