Criar uma declaração CSS @font-face com arquivos de fonte
Crie uma declaração CSS @font-face completa sem conferir repetidamente pontuação, aspas ou ordem dos descritores. Informe a família, um ou mais arquivos de fonte com seus formatos, além do peso e do estilo. O resultado é determinístico, pronto para copiar e mantém a ordem escolhida para que formatos modernos venham antes dos arquivos alternativos.
Executar grátis
Descreva os arquivos na ordem em que o navegador deve testá-los
Comece pelo nome público da família que será usado na propriedade font-family do aplicativo. Em seguida, adicione cada origem como um registro separado, com caminho e indicação de formato. A ordem importa: o navegador percorre a lista src da esquerda para a direita e escolhe o primeiro recurso compatível. Uma configuração comum coloca um WOFF2 compacto primeiro e um WOFF alternativo depois. O gerador preserva exatamente essa sequência; ele não ordena, deduz, baixa nem inspeciona arquivos. Os caminhos podem ser URL relativas, como /fonts/newsreader.woff2, ou endereços completos. O valor format é emitido como indicação CSS explícita e deve corresponder ao arquivo real. Aspas e barras invertidas em nomes, caminhos e formatos são escapadas nas strings CSS. Valores vazios e caracteres que poderiam romper um descritor são recusados, em vez de gerar uma regra aparentemente válida que falha ao ser colada. Pelo menos uma origem é obrigatória, pois uma regra @font-face sem um src utilizável não consegue carregar uma fonte.
Defina peso e estilo compatíveis com o arquivo
Os descritores font-weight e font-style informam ao navegador quais solicitações essa fonte pode atender. Eles devem representar os dados do arquivo, e não um efeito visual que o navegador precisaria sintetizar. Para uma fonte estática regular, peso 400 e estilo normal são escolhas comuns. Um arquivo itálico geralmente mantém o peso e usa italic, enquanto um negrito pode usar 700. Fontes variáveis aceitam intervalos suportados, como 100 900, quando o arquivo realmente contém esse eixo. O gerador recebe texto de descritor CSS em vez de limitar esses campos a um menu curto, permitindo valores tradicionais e sintaxe válida para fontes variáveis. Espaços externos são removidos; quebras de linha, chaves e ponto e vírgula capazes de escapar do descritor são rejeitados. A ferramenta não verifica se o binário contém o peso ou estilo declarado. Crie uma regra para cada variante estática e mantenha o mesmo nome de família nos arquivos relacionados. Assim, a correspondência normal do CSS seleciona a variante correta sem exigir alterações nas declarações do site inteiro.
Copie o resultado ou gere-o durante a compilação
A saída traz uma regra CSS formatada e também família normalizada, quantidade de origens, peso e estilo. Copie o valor css para uma folha de estilos antes dos seletores que usam a família ou chame o serviço em um script que reúne os ativos tipográficos. A regra gerada se concentra em família, origem, peso e estilo. Ela não tenta adivinhar propriedades opcionais como font-display, unicode-range, size-adjust, ascent-override, descent-override ou recursos tipográficos, pois essas escolhas dependem da política de carregamento, cobertura de glifos e compatibilidade métrica. Acrescente esses descritores depois, se necessário. A ferramenta não acessa a rede nem confirma se o caminho existe; teste a folha final nos navegadores atendidos e consulte o painel de rede para encontrar ativos ausentes ou MIME incorreto. A serialização determinística ajuda equipes que publicam fontes: entradas iguais sempre produzem a mesma saída, a prioridade fica clara para revisão e listas vazias falham cedo. O uso no navegador é gratuito; uma solicitação automatizada via API custa US$ 0,002.
Casos de uso
Registrar uma família web
Transforme caminhos WOFF2 e WOFF em uma regra pronta para copiar, com formatos explícitos.
Declarar variantes estáticas
Gere regras consistentes para regular, itálico, negrito e negrito itálico sob uma família.
Automatizar folhas de estilos
Crie declarações determinísticas a partir de metadados durante a compilação de um site.
Perguntas frequentes
O que acontece se eu não informar arquivos?
A solicitação falha por entrada inválida, pois uma declaração @font-face útil exige pelo menos uma origem.
A ferramenta verifica se o arquivo existe?
Não. Ela não acessa a rede; apenas valida e serializa os valores informados.
Qual origem deve vir primeiro?
Coloque primeiro o formato moderno preferido, geralmente WOFF2, e depois os formatos alternativos exigidos pela compatibilidade.
Posso declarar um intervalo de peso variável?
Sim. font_weight aceita texto como 100 900, desde que não contenha caracteres que quebrem a regra.
A regra inclui font-display ou unicode-range?
Não. Ela inclui somente família, origem, peso e estilo; as políticas opcionais ficam sob seu controle.
Quanto custa usar a API?
Cada solicitação via API usa o preço-base exibido como US$ 0,002; a ferramenta no navegador é gratuita.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/web/font-face-declaration-build \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"font_family":"Inter","sources":[{"path":"/fonts/inter-regular.woff2","format":"woff2"},{"path":"/fonts/inter-regular.woff","format":"woff"}],"font_weight":"400","font_style":"normal"}'const res = await fetch("https://api.kit.forhosting.com/web/font-face-declaration-build", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"font_family": "Inter",
"sources": [
{
"path": "/fonts/inter-regular.woff2",
"format": "woff2"
},
{
"path": "/fonts/inter-regular.woff",
"format": "woff"
}
],
"font_weight": "400",
"font_style": "normal"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/font-face-declaration-build",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"font_family": "Inter",
"sources": [
{
"path": "/fonts/inter-regular.woff2",
"format": "woff2"
},
{
"path": "/fonts/inter-regular.woff",
"format": "woff"
}
],
"font_weight": "400",
"font_style": "normal"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/font-face-declaration-build", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"font_family":"Inter","sources":[{"path":"/fonts/inter-regular.woff2","format":"woff2"},{"path":"/fonts/inter-regular.woff","format":"woff"}],"font_weight":"400","font_style":"normal"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"font_family":"Inter","sources":[{"path":"/fonts/inter-regular.woff2","format":"woff2"},{"path":"/fonts/inter-regular.woff","format":"woff"}],"font_weight":"400","font_style":"normal"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/font-face-declaration-build", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"font_family": "Inter",
"sources": [
{
"path": "/fonts/inter-regular.woff2",
"format": "woff2"
},
{
"path": "/fonts/inter-regular.woff",
"format": "woff"
}
],
"font_weight": "400",
"font_style": "normal"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.font_face_declaration_build",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
timeout_sec | 30 |
max_crawl_pages | 25 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |