O que é e como usar code boxe sem título no seu projeto
Você já deve ter visto aquele código solto na página, sem aquele cabeçalho bonito com o nome da linguagem ou o botão de copiar, só o bloco liso e funcional. É o code boxe sem título. Não é mágica, é basicamente uma tag <pre> com uma classe utilitária por cima, ou um componente React que decide não renderizar o header que outros plugins já criam pra você.
Por que alguém iria querer code boxe sem título?
Porque em muitos casos o título atrapalha. Você está embedando um snippet num artigo técnico, num readme, ou num dashboard interno, e quer que o código ocupe o espaço mínimo possível. O cabeçalho padrão dos plugins já adiciona uns 32px de altura, aquela barra cinza, o badge colorido. Se você está mostrando cinco linhas de CSS, esse cabeçalho é mais peso que conteúdo. Eu descobri isso na prática quando fiz o refator de uma documentação interna com mais de 400 snippets. O tema usava um plugin de syntax highlighting que injetava automaticamente um cabeçalho em cada bloco. A conta de CSS ficava enorme, o layout quebrava em mobile, e o tempo de renderização inicial subia porque cada header vinha com seus próprios scripts. Resolvi remover todos os títulos e usar code boxe sem título em cerca de 70% dos blocos. O resultado foi uma queda de quase 3 segundos no First Contentful Paint.
Como implementar na prática
A abordagem mais direta é puramente CSS. Você não precisa de plugin, nem de biblioteca externa. Só precisa decidir qual é o comportamento que deseja. Aqui vai o fluxo que eu sigo: Crie um bloco <pre> com um <code> dentro. Aplique uma classe personalizada, tipo .cb-st, que controla o visual do código. Sem título, sem toolbar, só a caixa.
<pre class="cb-st"><code class="language-javascript">
const config = { timeout: 5000 };
console.log(config);
</code></pre>
No CSS, o essencial é zerar margens, garantir o fundo escuro ou claro conforme seu tema, e preservar o espaçamento das linhas. Algo assim:
<code>.cb-st {
background: #1e1e1e;
color: #d4d4d4;
padding: 1rem;
border-radius: 6px;
overflow-x: auto;
font-size: 0.875rem;
line-height: 1.6;
margin: 1rem 0;
}
.cb-st code {
background: none;
padding: 0;
font-family: 'Fira Code', monospace;
}
</code>
Se você está usando React, pode transformar isso num componente reutilizável. Um <CodeBoxe> simples que recebe a linguagem e o conteúdo como props e decide não renderizar o header.
👉 Clique no botão abaixo para saber mais sobre o assunto!
<code>function CodeBoxe({ language, children }) {
return (
<pre className="cb-st">
<code className={`language-${language}`}>{children}</code>
</pre>
);
}
</code>
O problema que ninguém comenta
Remover o título parece inocente, mas traz uma dor de cabeça que eu levou dois dias pra resolver. Acessibilidade. Quando você tira o cabeçalho de um bloco de código, o leitor de tela não sabe mais qual é a linguagem daquele snippet. Ele lê as linhas como texto corrido, sem contexto. Para quem usa tecnologia assistiva, isso é uma diferença enorme. A solução que eu adotei foi adicionar um atributo lang no elemento <code> e um aria-label no <pre> escondido visualmente mas disponível para o screen reader. Eu criei um mixin SCSS pra não ficar repetindo o mesmo utilitário em todo projeto.
Outro ponto: sem título, você perde o contexto visual rápido. O olho vai parar no badge colorido da linguagem antes de ler o código. Quando eu removi tudo, meu time de produto percebeu que os devs levavam o dobro do tempo pra identificar o que era aquele trecho. O workaround foi manter um indicador mínimo — uma linha vertical colorida na borda esquerda do bloco, da espessura de 3px, na cor padrão da linguagem. Leva 5 linhas de CSS e resolve 80% do problema de identificação.
Quando não usar
Existem cenários em que o code boxe sem título é ruim decisão. Se o snippet tem mais de 50 linhas, o usuário precisa de âncoras visuais pra não se perder. Se a página é destinada a iniciantes, o título ajuda na didática. Se você está vendendo um curso ou produto e quer dar uma aparência profissional, cabeçalho padronizado passa mais credibilidade imediata. Não use só porque é mais rápido de implementar. Também tem o caso em que o seu tema já injeta scripts de highlight em tempo real no cliente. Aí remover o título manualmente não adianta, porque o plugin continua carregando os assets. Nesse cenário, eu desativei o highlight automático do tema e usei uma biblioteca estática como o Shiki, que pré-processa a colorização no build. O ganho foi de cerca de 120kb de JS economizado por página, o que faz diferença em conexões 3G.
Referência rápida de code boxe sem título
Se você quer só copiar e colar algo que funcione, o seguinte bloco cobre o básico. Ele funciona em qualquer projeto, sem dependências, e já vem com o access label e o indicador lateral que eu comentei antes.
<code><pre class="codeboxe-sem-titulo" aria-label="Código JavaScript">
<code class="language-javascript">
const resposta = await fetch('/api/dados');
const dados = await resposta.json();
console.log(dados.length);
</code>
</pre>
<style>
.codeboxe-sem-titulo {
position: relative;
background: #0d1117;
color: #c9d1d9;
padding: 1rem 1rem 1rem 1.5rem;
border-radius: 8px;
overflow-x: auto;
font-size: 13px;
line-height: 1.7;
margin: 1.5rem 0;
border-left: 3px solid #58a6ff;
}
.codeboxe-sem-titulo code {
font-family: 'JetBrains Mono', 'Fira Code', monospace;
background: none;
padding: 0;
font-size: inherit;
}
</style>
</code>
Se quiser algo mais estruturado e com suporte a várias linguagens e temas, o Prism.js com a configuração toolbar: false e lineNumbers: false é a saída mais conservadora. Mas se o objetivo é leveza real, o CSS puro com Shiki no build é o caminho que eu recomendo. Evite carregar três bibliotecas de highlighting só pra exibir dez linhas de código sem título.