Creare una dichiarazione CSS @font-face dai file dei font
Crei una dichiarazione CSS @font-face completa senza ricontrollare punteggiatura, virgolette e ordine dei descrittori. Indichi la famiglia, uno o più file del font con il relativo formato, oltre a peso e stile. Il risultato è deterministico, pronto da copiare e mantiene l’ordine scelto, così i formati moderni possono precedere i file alternativi.
Esegui gratis nel browser
Descriva i file nell’ordine in cui il browser deve provarli
Inizi dal nome pubblico della famiglia che userà nella proprietà font-family dell’applicazione. Aggiunga poi ogni sorgente come record separato, con percorso e indicazione del formato. L’ordine è importante: il browser legge l’elenco src da sinistra a destra e sceglie la prima risorsa supportata. Una disposizione comune mette prima un file WOFF2 compatto e poi un WOFF alternativo. Il generatore conserva esattamente la sequenza; non ordina, deduce, scarica o ispeziona i file. I percorsi possono essere URL relativi, come /fonts/newsreader.woff2, oppure indirizzi completi. Il valore format viene emesso come indicazione CSS esplicita, quindi deve corrispondere al file reale. Virgolette e barre inverse nei nomi, nei percorsi e nei formati vengono sottoposte a escape nelle stringhe CSS. I valori vuoti e i caratteri che potrebbero interrompere un descrittore sono rifiutati, invece di produrre una regola apparentemente corretta che poi fallisce nel foglio di stile. È obbligatoria almeno una sorgente, perché una regola @font-face priva di un src utilizzabile non può caricare alcun font.
Imposti peso e stile coerenti con il file
I descrittori font-weight e font-style indicano al browser quali richieste può soddisfare questa faccia. Devono descrivere i dati del file, non un effetto grafico che il browser dovrebbe sintetizzare. Per un font statico normale sono comuni il peso 400 e lo stile normal. Un file corsivo mantiene spesso lo stesso peso con italic, mentre il grassetto può usare 700. I font variabili possono accettare intervalli come 100 900, se il file contiene davvero quell’asse. Il generatore accetta testo di descrittore CSS anziché limitare i campi a un menu ristretto, permettendo sia valori convenzionali sia sintassi valida per font variabili. Rimuove gli spazi esterni e rifiuta ritorni a capo, parentesi graffe e punti e virgola che potrebbero uscire dal descrittore. Non stabilisce se il file binario contiene il peso o lo stile dichiarato. Crei una regola distinta per ogni faccia statica e mantenga coerente il nome della famiglia per i file correlati. Il normale abbinamento CSS selezionerà così la faccia corretta senza cambiare le dichiarazioni in tutto il sito.
Copi il risultato o lo generi durante la compilazione
L’output contiene una regola CSS formattata, insieme a famiglia normalizzata, numero di sorgenti, peso e stile. Copi il valore css in un foglio di stile prima dei selettori che usano la famiglia, oppure richiami il servizio da uno script che assembla le risorse tipografiche. La regola generata si concentra su famiglia, sorgenti, peso e stile. Non tenta di indovinare proprietà facoltative come font-display, unicode-range, size-adjust, ascent-override, descent-override o impostazioni delle funzionalità, perché dipendono dalla politica di caricamento, dalla copertura dei glifi e dalla compatibilità delle metriche. Le aggiunga in seguito se il progetto le richiede. Lo strumento non effettua richieste di rete e non verifica che un percorso risponda; provi quindi il foglio finale nei browser supportati e controlli il pannello di rete per individuare risorse mancanti o tipi MIME errati. La serializzazione deterministica aiuta i gruppi che pubblicano font: lo stesso input genera sempre lo stesso output, la precedenza resta verificabile e un elenco vuoto viene bloccato subito. L’uso nel browser è gratuito; una richiesta automatizzata tramite API costa $0.002.
Casi d'uso
Registrare una famiglia web
Trasformi percorsi WOFF2 e WOFF in una regola pronta da copiare con formati espliciti.
Dichiarare varianti statiche
Generi regole coerenti per tondo, corsivo, grassetto e grassetto corsivo sotto una famiglia.
Automatizzare i fogli di stile
Crei dichiarazioni deterministiche dai metadati delle risorse durante la compilazione del sito.
Domande frequenti
Che cosa accade se non fornisco file?
La richiesta fallisce per input non valido, perché una dichiarazione @font-face utilizzabile richiede almeno una sorgente.
Lo strumento verifica se il file esiste?
No. Non effettua richieste di rete; convalida e serializza soltanto i valori forniti.
Quale sorgente deve venire per prima?
Metta per primo il formato moderno preferito, di solito WOFF2, seguito dai formati alternativi necessari.
Posso dichiarare un intervallo di peso variabile?
Sì. font_weight accetta testo come 100 900, purché non contenga caratteri che interrompono la regola.
Aggiunge font-display o unicode-range?
No. Genera solo famiglia, sorgenti, peso e stile; le politiche facoltative restano sotto il Suo controllo.
Quanto costa utilizzare l’API?
Ogni richiesta API applica il prezzo base mostrato come $0.002; lo strumento nel browser è gratuito.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
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)Esempio di richiesta
{
"font_family": "Inter",
"sources": [
{
"path": "/fonts/inter-regular.woff2",
"format": "woff2"
},
{
"path": "/fonts/inter-regular.woff",
"format": "woff"
}
],
"font_weight": "400",
"font_style": "normal"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.font_face_declaration_build",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
timeout_sec | 30 |
max_crawl_pages | 25 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |