diff --git a/src/content/docs/it/guides/fonts.mdx b/src/content/docs/it/guides/fonts.mdx new file mode 100644 index 0000000000000..0ebe20e909577 --- /dev/null +++ b/src/content/docs/it/guides/fonts.mdx @@ -0,0 +1,437 @@ +--- +title: Utilizzare font personalizzati +sidebar: + label: font +description: >- + Vuoi aggiungere dei font tipografici personalizzati a un sito web Astro? Usa Google Fonts + con Fontsource oppure aggiungi un font a tua scelta. +i18nReady: true +--- +import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro'; +import ReadMore from '~/components/ReadMore.astro'; +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components'; + +Questa quida ti mostrerà come aggiungere [font web](https://developer.mozilla.org/en-US/docs/Learn/CSS/Styling_text/Web_fonts) al tuo progetto e usarli nei tuoi componenti. + +Astro fornisce un modo per usare i font dal tuo filesystem e da vari fornitori di font (es. Fontsource, Google) attraverso un'API unificata, [completamente personalizzabile](/it/reference/configuration-reference/#fonts), e con la sicurezza dei tipi. + +I font Web possono influire sulle prestazioni della pagina sia al momento del caricamento che del rendering. Questa API ti aiuta a mantenere il tuo sito performante con [ottimizzazioni dei font web](https://web.dev/learn/performance/optimize-web-fonts) automatiche inclusi collegamenti precaricati, alternative ottimizzate, e impostazioni predefinite rigide. [Vedere esempi di utilizzo comune](#examples). + +L'API Fonts si concentra sulle prestazioni e la privacy scaricando e memorizzando nella cache i font così che possano essere serviti al tuo sito. Questo può evitare di inviare i dati degli utenti a siti terzi, e inoltre assicura che un ricco set di font sia disponibile a tutti i tuoi visitatori. + +## Configurare font personalizzati + +Si possono registrare font personalizzati per il tuo progetto Astro attraverso [l'opzione `fonts`](/it/reference/configuration-reference/#fonts) nella tua configurazione di Astro. + +Per ogni font che vuoi usare, devi specificare il suo [nome](/it/reference/configuration-reference/#fontname), una [variabile CSS](/it/reference/configuration-reference/#fontcssvariable), e un fornitore di font di Astro. + +Astro fornisce [supporto integrato per i fornitori di font più popolari](/it/reference/font-provider-reference/#built-in-providers): Adobe, Bunny, Fontshare, Fontsource, Google, Google Icons e NPM, così come l'utilizzo dei tuoi file di font locali. Inoltre, puoi [personalizzare ulteriormente la configurazione del tuo font](#granular-font-configuration) per ottimizzare le prestazioni e l'esperienza del visitatore. + + +### Usare un file di font locale + +Questo esempio dimostrerà come aggiungere un font personalizzato usando il file di font `DistantGalaxy.woff2`. + + + +1. Aggiungi il file di font nella [cartella `src/`](/it/basics/project-structure/#src), per esempio `src/assets/fonts/`. + +2. Crea una nuova famiglia di font nel tuo file di configurazione di Astro usando [il fornitore di font locale](/it/reference/font-provider-reference/#local) e specifica le varianti da includere: + + ```js title="astro.config.mjs" + import { defineConfig, fontProviders } from "astro/config"; + + export default defineConfig({ + fonts: [{ + provider: fontProviders.local(), + name: "DistantGalaxy", + cssVariable: "--font-distant-galaxy", + options: { + variants: [{ + src: ['./src/assets/fonts/DistantGalaxy.woff2'], + weight: 'normal', + style: 'normal' + }] + } + }] + }); + ``` +3. Il tuo font è ora configurato e pronto per essere [aggiunto all'head della tua pagina](#applying-custom-fonts) così da poter essere usato nel tuo progetto. + + + +### Usare Fontsource + +Astro supporta [molti fornitori di font](/it/reference/font-provider-reference/#built-in-providers) pronti all'uso, includendo il supporto per [Fontsource](https://fontsource.org/) che semplifica l'uso di Google Fonts e altri font open-source. + +L'esempio seguente userà Fontsource per aggiungere il supporto a un font personalizzato, ma il processo è simile per tutti i fornitori di font integrati in Astro (es. [Adobe](https://fonts.adobe.com/), [Bunny](https://fonts.bunny.net/)). + + + +1. Trova il font che vuoi usare nel [catalogo di Fontsource](https://fontsource.org/). Questo esempio userà [Roboto](https://fontsource.org/fonts/roboto). + +2. Crea una nuova famiglia di font nel tuo file di configurazione di Astro usando il [fornitore Fontsource](/it/reference/font-provider-reference/#fontsource): + + ```js title="astro.config.mjs" + import { defineConfig, fontProviders } from "astro/config"; + + export default defineConfig({ + fonts: [{ + provider: fontProviders.fontsource(), + name: "Roboto", + cssVariable: "--font-roboto", + }] + }); + ``` +3. Il tuo font ora è configurato e pronto per essere [aggiunto all'head della tua pagina](#applying-custom-fonts) così da poter essere usato nel tuo progetto. + + + +## Applicare font personalizzati + +Dopo che [un font è configurato](#configuring-custom-fonts), deve essere aggiunto all'head della tua pagina con una variabile CSS identificativa. Quindi, puoi usare questa variabile quando definisci gli stili della tua pagina. + + + +1. Importa e includi il componente [``](/it/reference/modules/astro-assets/#font-) con la proprietà richiesta `cssVariable` nell'head della tua pagina, normalmente in un componente dedicato `Head.astro` o direttamente in un componente [layout](/it/basics/layouts/): + + ```astro title="src/layouts/Layout.astro" ins={2,7} + --- + import { Font } from "astro:assets"; + --- + + + + + + + + + + ``` + +2. In ogni pagina renderizzata con quel layout, incluso il componente layout stesso, puoi ora definire gli stili con la tua `cssVariable` del font per applicare il tuo font personalizzato. + + Nell'esempio seguente, il titolo `

` avrà applicato il font personalizzato, mentre il paragrafo `

` no. + + ```astro title="src/pages/example.astro" ins={10-12} + --- + import Layout from "../layouts/Layout.astro"; + --- + +

In a galaxy far, far away...

+ +

Custom fonts make my headings much cooler!

+ + + + ``` + +
+ +## Precaricare i font + +Il precaricamento dei font dovrebbero essere fatto con moderazione, in quanto potrebbe bloccare il caricamente di altre risorse importanti o scaricare font che non sono necessari per la pagina corrente. Considera di precaricare solo i font essenziali, necessari per visualizzare il contenuto visibile nella parte superiore della pagina. + +Per precaricare un font, passa la [proprietà `preload`](/it/reference/modules/astro-assets/#preload) al componente corrispondente ``. Se ad un font corrispondono più file, puoi specificare quali precaricare passando un array. + +```astro title="src/layouts/Layout.astro" {7} +--- +import { Font } from "astro:assets"; +--- + + + + + + + + + +``` + +## Registrare font in Tailwind + +Se stai usando [Tailwind](/it/guides/styling/#tailwind) per gli stili, non applicherai i tuoi stili con la proprietà CSS `font-face`. + +Invece, dopo [aver configurato il tuo font personalizzato](#configuring-custom-fonts) e [averlo aggiunto all'head della tua pagina](#applying-custom-fonts), dovrai aggiornare la tua configurazione di Tailwind per registrare il tuo font: + + + + + + ```css title="src/styles/global.css" ins={4} ins="inline" + @import "tailwindcss"; + + @theme inline { + --font-sans: var(--font-roboto); + } + ``` + + + + + + ```js title="tailwind.config.mjs" ins={6-8} + /** @type {import("tailwindcss").Config} */ + export default { + content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"], + theme: { + extend: {}, + fontFamily: { + sans: ["var(--font-roboto)"] + } + }, + plugins: [] + }; + ``` + + + + + +Vedere la [documentazione di Tailwind per aggiungere famiglie di font personalizzate](https://tailwindcss.com/docs/font-family#using-a-custom-value) per maggiori informazioni. + +## Usare font variabili + +Per usare [font variabili](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_fonts/Variable_fonts_guide) nel tuo progetto, specifica il range di spessori disponibili invece di singoli spessori nella configurazione del tuo provider. + + + + +Quando [si usa un file di font locale](#using-a-local-font-file), puoi specificare che il font sia variabile impostando la [proprietà `weight` della variante](/it/reference/font-provider-reference/#weight) in una stringa corrispondente al preciso range di spessori disponibili per quel font. + +L'esempio seguente configura Inter come un font variabile locale con il range di spessori disponibili: + +```js title="astro.config.mjs" {11} +import { defineConfig, fontProviders } from "astro/config"; + +export default defineConfig({ + fonts: [{ + provider: fontProviders.local(), + name: "Inter", + cssVariable: "--font-inter", + options: { + variants: [ + { + weight: "100 900", + style: "normal", + src: ["./src/assets/fonts/InterVariable.woff2"], + }, + ], + }, + }] +}); +``` + + + + +Quando si usano [altri fornitori (es. Fontsource)](#using-fontsource), che supportano font variabili, puoi richiedere la versione variabile di un font impostando la [proprietà `weights`](/it/reference/configuration-reference/#fontweights) con un array contenente il range preciso di spessori disponibili per il font. + +L'esempio seguente scarica [Fira Code da Fontsource](https://fontsource.org/fonts/fira-code) come font variabile con il range di spessori disponibili: + +```js title="astro.config.mjs" {9} +import { defineConfig, fontProviders } from "astro/config"; + +export default defineConfig({ + fonts: [{ + cssVariable: "--font-fira-code", + name: "Fira Code", + provider: fontProviders.fontsource(), + styles: ["normal"], + weights: ["300 700"], + }] +}); +``` + + + + +## Personalizzare font alternativi + +I font alternativi sono usati quando il font primario non è stato ancora caricato, contiene caratteri mancanti, o per qualche ragione non può essere caricato. Quando il font alternativo differisce significativamente dal font primario, durante il caricamento della pagina si potrebbe verificare uno spostamento del layout. + +Per evitarlo, Astro prova automaticamente a generare font alternativi ottimizzati dall'ultima [alternativa definita](/it/reference/configuration-reference/#fontfallbacks) se è una [famiglia di font generica](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/font-family#generic-name). Usa `sans-serif` per impostazione predefinta, ma potrebbe non coincidere con l'aspetto desiderato del tuo font primario. Puoi aggiustarlo nella configurazione del tuo font: + +```mjs title="astro.config.mjs" {8} +import { defineConfig, fontProviders } from "astro/config"; + +export default defineConfig({ + fonts: [{ + provider: fontProviders.fontsource(), + name: "Cousine", + cssVariable: "--font-cousine", + fallbacks: ["monospace"] + }] +}); +``` + +Puoi anche optare per l'ottimizzazione predefinita impostando [`font.optimizedFallbacks`](/it/reference/configuration-reference/#fontoptimizedfallbacks) in `false` nella configurazione del tuo font. Astro userà quindi i font alternativi specificati nella tua configurazione senza altre ulteriori elaborazioni automatiche. + +## Accedere ai dati dei font tramite codice + +Astro espone API di basso livello per accedere ai dati attraverso il codice: + +- I dati della famiglia di font attraverso l'oggetto [`fontData`](/it/reference/modules/astro-assets/#fontdata) +- Gli URL del file di font con la funzione [`experimental_getFontFileURL()`](/in/reference/modules/astro-assets/#experimental_getfontfileurl). + +Questo può essere utile per casi d'uso avanzati dove è necessario un accesso diretto ai file di font, come generare immagini OpenGraph con [Satori](https://github.com/vercel/satori) in una [Route API](/it/guides/endpoints/#server-endpoints-api-routes). + +L'oggetto `fontData` dà l'accesso a tutti i file di font scaricati da Astro per il tuo progetto, insieme ai loro metadati. Questo significa che sei responsabile di filtrare i file di font per trovare il file specifico che ti serve, e di recuperare i dati dopo avere risolto gli URL. + +L'esempio seguente genera un'immagine OpenGraph in un file statico come punto di accesso, assumendo che [sia stato configurato un solo font e il suo formato](/it/reference/configuration-reference/#fontformats) con un [formato supportato da Satori](https://github.com/vercel/satori?tab=readme-ov-file#fonts): + +```tsx title="src/pages/og.png.ts" {2,14-15} "fontData[\"--font-roboto\"]" +import type { APIRoute } from "astro"; +import { fontData, experimental_getFontFileURL } from "astro:assets"; +import satori from "satori"; +import { html } from "satori-html"; +import sharp from "sharp"; + +export const GET: APIRoute = async (context) => { + const fontPath = fontData["--font-roboto"][0]?.src[0]?.url; + + if (fontPath === undefined) { + throw new Error("Cannot find the font path."); + } + + const url = experimental_getFontFileURL(fontPath, context.url); + const data = await fetch(url).then((res) => res.arrayBuffer()); + + const svg = await satori( + html`
hello, world
`, + { + width: 600, + height: 400, + fonts: [ + { + name: "Roboto", + data, + weight: 400, + style: "normal", + }, + ], + }, + ); + + const pngBuffer = await sharp(Buffer.from(svg)) + .resize(600, 400) + .png() + .toBuffer(); + + return new Response(new Uint8Array(pngBuffer), { + headers: { + "Content-Type": "image/png", + }, + }); +}; +``` + +## Configurazione granulare del font + +Una famiglia di font è definita da una combinazione di proprietà come whights e styles (es. `weights: [500, 600]` e `styles: ["normal", "bold"]`), ma si può voler scaricare solo alcune loro combinazioni. + +Per un maggior controllo su quali file di font vengono scaricati, puoi specificare lo stesso font (es. con le stesse proprietà `cssVariable`, `name`, e `provider`) molte volte con combinazioni differenti. Astro unirà i risultati e scaricherà solo i file richiesti. Per esempio, è possibile scaricare normal `500` e `600` mentre si scarica solo italic `500`: + +```js title="astro.config.mjs" +import { defineConfig, fontProviders } from "astro/config"; + +export default defineConfig({ + fonts: [ + { + name: "Roboto", + cssVariable: "--roboto", + provider: fontProviders.google(), + weights: [500, 600], + styles: ["normal"] + }, + { + name: "Roboto", + cssVariable: "--roboto", + provider: fontProviders.google(), + weights: [500], + styles: ["italic"] + } + ] +}); +``` + +## Memorizzare nella cache + +L'implementazione della memorizzazione nella cache dell'API Fonts è stata disegnata per essere pratica nella fase di sviluppo ed efficiente in quella di produzione. Durante le compilazioni, i file di font sono copiati nella cartella di output `_astro/fonts`, così da poter beneficiare della memorizzazione nella cache degli asset statici (normalmente un anno). + +Per pulire la cache nella fase di sviluppo, cancella la cartella `.astro/fonts`. Per pulire la cache di compilazione, cancella la cartella `node_modules/.astro/fonts`. + +## Esempi + +La funzionalità font di Astro è basata su opzioni di configurazione flessibili. La configurazione del font del tuo progetto potrebbe apparire diversa dagli esempi semplificati, quindi vengono forniti i seguenti esempi per mostrare come possono apparire varie configurazioni di font quando usate in produzione. + +```js title="astro.config.mjs" +import { defineConfig, fontProviders } from "astro/config"; + +export default defineConfig({ + fonts: [ + { + name: "Roboto", + cssVariable: "--font-roboto", + provider: fontProviders.google(), + // Default included: + // weights: [400] , + // styles: ["normal", "italic"], + // subsets: ["latin"], + // fallbacks: ["sans-serif"], + // formats: ["woff2"], + }, + { + name: "Inter", + cssVariable: "--font-inter", + provider: fontProviders.fontsource(), + // Specify weights that are actually used + weights: [400, 500, 600, 700], + // Specify styles that are actually used + styles: ["normal"], + // Download only font files for characters used on the page + subsets: ["latin", "cyrillic"], + // Download more font formats + formats: ["woff2", "woff"], + }, + { + name: "JetBrains Mono", + cssVariable: "--font-jetbrains-mono", + provider: fontProviders.fontsource(), + // Download only font files for characters used on the page + subsets: ["latin", "latin-ext"], + // Use a fallback font family matching the intended appearance + fallbacks: ["monospace"], + }, + { + name: "Poppins", + cssVariable: "--font-poppins", + provider: fontProviders.local(), + options: { + // Weight and style are not specified so Astro + // will try to infer them for each variant + variants: [ + { + src: [ + "./src/assets/fonts/Poppins-regular.woff2", + "./src/assets/fonts/Poppins-regular.woff", + ] + }, + { + src: [ + "./src/assets/fonts/Poppins-bold.woff2", + "./src/assets/fonts/Poppins-bold.woff", + ] + }, + ] + } + } + ], +}); +```