Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

208
Vistas
NextJS: Cargar fuente desde la base de datos

Estoy usando NextJS junto con Tailwind CSS.

En mi aplicación, los usuarios pueden seleccionar un tema que incluya diferentes combinaciones de colores junto con una lista de fuentes preseleccionadas. Pueden elegir una fuente que les guste para la aplicación.

Estas son solo fuentes de Google.

No estoy seguro de cuál es la mejor manera de cargar una fuente según el nombre de fuente recibido de la base de datos. Puedo cargar los datos de la base de database en serverSideProps , pero luego, ¿cómo puedo cargar la fuente antes de renderizar para que no haya parpadeo en la pantalla? ¿Puedes ayudarme?

ACTUALIZAR

A partir de ahora, he hecho lo siguiente:

  1. En tailwind.config.js, tailwind.config.js el tema con diferentes fuentes disponibles.

    tema: { fontFamily: { inter: ['Inter', 'sans-serif'], cal: ["Cal Sans", "Inter", "sans-serif"], arima:['Arima Madurai','cursiva' ], opensans:['Open Sans', 'sans-serif'], } }

  2. Creé una hoja de estilo para cada fuente, que se almacena en una carpeta pública en esta ubicación:

    /fuentes/opensans/stylesheet.css

    /fuentes/cal/stylesheet.css

    /fuentes/inter/stylesheet.css

    /fuentes/arima/stylesheet.css

Estas hojas de estilo contienen la fuente. Un ejemplo a continuación:

 @font-face { font-family: "Cal Sans"; src: url("CalSans-SemiBold.woff2") format("woff2"), url("CalSans-SemiBold.woff") format("woff"); font-weight: 600; font-style: normal; font-display: swap; }
  1. En la página (por ejemplo pages/index.js ), cargo las preferencias del usuario mediante serverSideProps y las paso a un componente de Layout . Este componente de diseño tiene el head que se crea a través de next/head . Llamemos a la fuente de apoyo recibida del servidor como themeFont .

Digamos que la preferencia del usuario es Cal Sans y la preferencia del usuario se almacena en la base de datos como valor cal . Entonces, el valor de themeFont será cal .

En la cabecera, cargo la hoja de estilo relacionada de la siguiente manera:

 <Head> <link rel="stylesheet" href={`/fonts/${themeFont}/stylesheet.css`}></link> </Head>
  1. Esto cargará /fonts/cal/stylesheet.css y la fuente requerida. No se carga ninguna otra fuente. Entonces puedo usarlo en mis componentes con font-cal porque se ha definido en tailwind.config.css

Funciona bien. Todavía veo un parpadeo, tal vez debido a font-display:swap , o tal vez por alguna otra razón. Pero sigo sintiendo que esta no es la solución óptima y que podría hacerse de una mejor manera.

Buscando ayuda en esto.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

🎯 Solución 1

Está en la dirección correcta, debe usar getServerSideProps para establecer la fuente deseada en la etiqueta <link> . Pero primero debe agregar el rel="preload" para cargar las fuentes y luego puede colocar el enlace para su css.

 <link rel="preload" href="/fonts/theme-font.woff2" as="font" type="font/woff2" ></link>

El valor de precarga del atributo rel del elemento le permite declarar solicitudes de recuperación en el HTML, especificando los recursos que su página necesitará muy pronto, que desea comenzar a cargar temprano en el ciclo de vida de la página, antes de que se active la maquinaria de representación principal de los navegadores.

Luego, para evitar el parpadeo, use el valor de fallback para la propiedad font-display , ocultará el texto durante aproximadamente 100 ms y, si la fuente aún no se ha descargado, usará el texto de respaldo.

 @font-face { font-family: "Cal Sans"; font-display: fallback; src: url("CalSans-SemiBold.woff2") format("woff2"), }

Puede usar los siguientes valores para font-display para diferentes estrategias:

  • automático (predeterminado): permite que el navegador use su método predeterminado para cargar, que suele ser similar al valor del bloque.
  • bloque : indica al navegador que oculte brevemente el texto hasta que la fuente se haya descargado por completo. Más precisamente, el navegador dibuja el texto con un marcador de posición invisible y luego lo cambia con la fuente personalizada tan pronto como se carga. Esto también se conoce como "destello de texto invisible" o FOIT.
  • swap : le indica al navegador que use la fuente alternativa para mostrar el texto hasta que la fuente personalizada se haya descargado por completo. Esto también se conoce como "destello de texto sin estilo" o FOUT.
  • fallback : actúa como un compromiso entre los valores automático y de intercambio. El navegador ocultará el texto durante aproximadamente 100 ms y, si la fuente aún no se ha descargado, utilizará el texto alternativo. Cambiará a la nueva fuente después de que se descargue, pero solo durante un breve período de intercambio (probablemente 3 segundos).
  • opcional : Al igual que el respaldo, este valor le dice al navegador que inicialmente oculte el texto, luego haga la transición a una fuente alternativa hasta que la fuente personalizada esté disponible para usar. Sin embargo, este valor también permite que el navegador determine si la fuente personalizada se usa en absoluto, utilizando la velocidad de conexión del usuario como un factor determinante donde es menos probable que las conexiones más lentas reciban la fuente personalizada.

🎯 Solución 2

Como solución alternativa, puede incrustar sus fuentes dentro de sus estilos css:

 @font-face { font-family: "Cal Sans"; font-display: fallback; src: url(PASTE-BASE64-HERE) format('woff2') }

Consulte esta demostración como referencia y allí puede convertir el archivo woff2 a base64.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Dos ideas:

  1. Fontsources mantiene un repositorio completo de Google Fonts como paquetes NPM. Debería poder importar dinámicamente la fuente que necesita siempre que esté instalado su paquete NPM correspondiente.

https://fontsource.org/docs/getting-started

Entonces debería poder importar dinámicamente la fuente correspondiente tan pronto como sepa cuál es la fuente. No sé si la fuente parpadearía aquí.

 await import `@fontsource/${fontName}`;

Esto supone que sabe que fontName será un nombre de fuente de Google válido, o que necesitará try / catch .


  1. Otro enfoque es obtener la información de la fuente en el servidor (si usa Next.js, puede hacerlo con getServerSideProps y luego usar un elemento <Head> personalizado para apuntar al archivo CSS correspondiente en fonts.googleapis.com y cargar eso como parte de <Head> antes de que se muestre otro contenido (o al menos mientras está en proceso de hacerlo).
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda