Estoy usando create-react-app y prefiero no hacerlo eject
.
No está claro dónde deberían ir las fuentes importadas a través de @ font-face y cargadas localmente.
A saber, estoy cargando
@font-face {
font-family: 'Myriad Pro Regular';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Regular'), url('MYRIADPRO-REGULAR.woff') format('woff');
}
¿Alguna sugerencia?
- EDITAR
Incluyendo la esencia a la que Dan se refiere en su respuesta
➜ Client git:(feature/trivia-game-ui-2) ✗ ls -l public/static/fonts
total 1168
-rwxr-xr-x@ 1 maximveksler staff 62676 Mar 17 2014 MYRIADPRO-BOLD.woff
-rwxr-xr-x@ 1 maximveksler staff 61500 Mar 17 2014 MYRIADPRO-BOLDCOND.woff
-rwxr-xr-x@ 1 maximveksler staff 66024 Mar 17 2014 MYRIADPRO-BOLDCONDIT.woff
-rwxr-xr-x@ 1 maximveksler staff 66108 Mar 17 2014 MYRIADPRO-BOLDIT.woff
-rwxr-xr-x@ 1 maximveksler staff 60044 Mar 17 2014 MYRIADPRO-COND.woff
-rwxr-xr-x@ 1 maximveksler staff 64656 Mar 17 2014 MYRIADPRO-CONDIT.woff
-rwxr-xr-x@ 1 maximveksler staff 61848 Mar 17 2014 MYRIADPRO-REGULAR.woff
-rwxr-xr-x@ 1 maximveksler staff 62448 Mar 17 2014 MYRIADPRO-SEMIBOLD.woff
-rwxr-xr-x@ 1 maximveksler staff 66232 Mar 17 2014 MYRIADPRO-SEMIBOLDIT.woff
➜ Client git:(feature/trivia-game-ui-2) ✗ cat src/containers/GameModule.css
.GameModule {
padding: 15px;
}
@font-face {
font-family: 'Myriad Pro Regular';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Regular'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-REGULAR.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Condensed';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Condensed'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-COND.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Semibold Italic';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Semibold Italic'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-SEMIBOLDIT.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Semibold';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Semibold'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-SEMIBOLD.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Condensed Italic';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Condensed Italic'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-CONDIT.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Bold Italic';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Bold Italic'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-BOLDIT.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Bold Condensed Italic';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Bold Condensed Italic'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-BOLDCONDIT.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Bold Condensed';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Bold Condensed'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-BOLDCOND.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Bold';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Bold'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-BOLD.woff') format('woff');
}
%PUBLIC_URL%
no puede funcionar (y es innecesario) en un archivo CSS. Además, como se describe en la guía, debe utilizar las importaciones JS en casi todos los casos, no la carpeta pública.Respuestas:
Hay dos opciones:
Usando Importaciones
Esta es la opción sugerida. Asegura que sus fuentes pasen por la canalización de compilación, obtengan hashes durante la compilación para que el almacenamiento en caché del navegador funcione correctamente y que obtenga errores de compilación si faltan los archivos.
Como se describe en "Agregar imágenes, fuentes y archivos" , debe tener un archivo CSS importado de JS. Por ejemplo, por defecto las
src/index.js
importacionessrc/index.css
:Un archivo CSS como este pasa por la canalización de compilación y puede hacer referencia a fuentes e imágenes. Por ejemplo, si pones una fuente en
src/fonts/MyFont.woff
,index.css
puede incluir esto:Observe cómo estamos usando una ruta relativa a partir de
./
. Esta es una notación especial que ayuda a la canalización de compilación (desarrollada por Webpack) a descubrir este archivo.Normalmente esto debería ser suficiente.
Usando
public
CarpetaSi por alguna razón prefiere no usar la canalización de compilación y, en su lugar, hacerlo de la "manera clásica", puede usar el
public
carpeta y colocar sus fuentes allí.La desventaja de este enfoque es que los archivos no obtienen hashes cuando compila para la producción, por lo que tendrá que actualizar sus nombres cada vez que los cambie, o los navegadores guardarán en caché las versiones anteriores.
Si desea hacerlo de esta manera, coloque las fuentes en algún lugar de la
public
carpeta, por ejemplo, enpublic/fonts/MyFont.woff
. Si sigue este enfoque, también debe colocar los archivos CSS en lapublic
carpeta y no importarlos desde JS porque mezclar estos enfoques será muy confuso. Entonces, si aún quieres hacerlo, tendrás un archivo comopublic/index.css
. Tendría que agregar manualmente<link>
a esta hoja de estilo desdepublic/index.html
:Y dentro de él, usarías la notación CSS normal:
Observe cómo lo estoy usando
fonts/MyFont.woff
como ruta. Esto se debe a queindex.css
está en lapublic
carpeta, por lo que se servirá desde la ruta pública (generalmente es la raíz del servidor, pero si implementa en GitHub Pages y configura suhomepage
campohttp://myuser.github.io/myproject
, se servirá desde/myproject
). Sin embargofonts
, también están en lapublic
carpeta, por lo que serán atendidos desdefonts
relativamente (ya seahttp://mywebsite.com/fonts
ohttp://myuser.github.io/myproject/fonts
). Por lo tanto, usamos la ruta relativa.Tenga en cuenta que dado que estamos evitando la canalización de compilación en este ejemplo, no verifica que el archivo realmente exista. Por eso no recomiendo este enfoque. Otro problema es que nuestro
index.css
archivo no se minimiza y no obtiene un hash. Por lo tanto, será más lento para los usuarios finales y correrá el riesgo de que los navegadores almacenen en caché las versiones antiguas del archivo.¿Qué manera de usar?
Vaya con el primer método ("Uso de importaciones"). Solo describí el segundo, ya que eso es lo que intentaste hacer (a juzgar por tu comentario), pero tiene muchos problemas y solo debería ser el último recurso cuando estés trabajando en algún problema.
fuente
ttf
fuente, debe dar entruetype
lugar dettf
como parámetro para elformat
* .otf
necesitas poneropentype
.Aquí hay algunas formas de hacer esto:
1. Importando fuente
Por ejemplo, para usar Roboto, instale el paquete usando
o
En index.js:
Hay paquetes npm para muchas fuentes de código abierto y la mayoría de las fuentes de Google. Puedes ver todas las fuentes aquí . Todos los paquetes son de ese proyecto. .
2. Para fuentes alojadas por terceros
Por ejemplo, las fuentes de Google, puede ir a fonts.google.com donde puede encontrar enlaces que puede poner en su
public/index.html
Será como
o
3. Descargando la fuente y agregándola en su código fuente.
Descargue la fuente. Por ejemplo, para las fuentes de google, puede ir a fonts.google.com . Haga clic en el botón de descarga para descargar la fuente.
Mueva la fuente al
fonts
directorio en susrc
directorioAhora, en
App.css
, agrega estoPara el
ttf
formato, tienes que mencionarformat('truetype')
. porwoff
,format('woff')
Ahora puedes usar la fuente en las clases.
4. Usando el paquete web-font-loader
Instalar paquete usando
o
En
src/index.js
, puede importar esto y especificar las fuentes necesariasfuente
fonts
carpeta debajosrc
, sino debajopublic
? Lo intenté, pero parece que no está permitido ...For ttf format, you have to mention format('truetype'). For woff, format('woff')
lo hizo por mi! ¡gracias!Se abrirá así:
4, copie y pegue ese código en su style.css y simplemente comience a usar esa fuente de esta manera:
Resultado:
fuente
Puede usar el módulo WebFont , que simplifica enormemente el proceso.
fuente
Estaba cometiendo errores como este.
Funciona correctamente de esta manera.
fuente
Pasé toda la mañana resolviendo un problema similar después de haber aterrizado en esta pregunta de la pila. Usé la primera solución de Dan en la respuesta anterior como punto de partida.
Problema
Tengo un entorno de desarrollo, montaje y producción (esto está en mi máquina local). Mis escenarios y entornos de producción viven en el mismo servidor.
La aplicación se implementa a través de la puesta en escena
acmeserver/~staging/note-taking-app
y la versión de producción vive enacmeserver/note-taking-app
(culpar a TI).Todos los archivos multimedia, como las fuentes, se cargaban perfectamente bien en dev (es decir,
react-scripts start
).Sin embargo, cuando creé y cargué las etapas y las compilaciones de producción, mientras que los archivos
.css
y.js
se cargaban correctamente, las fuentes no. El.css
archivo compilado parecía tener una ruta correcta, pero la solicitud http del navegador estaba recibiendo una ruta muy incorrecta (se muestra a continuación).El
main.fc70b10f.chunk.css
archivo compilado :La solicitud http del navegador se muestra a continuación. Tenga en cuenta cómo se agrega
/static/css/
cuando el archivo de fuente solo vive/static/media/
y duplica la carpeta de destino. Descarté que la configuración del servidor sea la culpable.El
Referer
es en parte culpable también.El
package.json
archivo tenía lahomepage
propiedad establecida en./note-taking-app
. Esto estaba causando el problema.Solución
Eso fue largo aliento, pero la solución es:
PUBLIC_URL
variable env según el entornohomepage
propiedad delpackage.json
archivoDebajo está mi
.env-cmdrc
archivo. Lo uso.env-cmdrc
con regularidad.env
porque mantiene todo junto en un solo archivo.El enrutamiento a través de
react-router-dom
funciona bien también: simplemente use laPUBLIC_URL
variable env comobasename
propiedad.La configuración del servidor está configurada para enrutar todas las solicitudes al
./index.html
archivo.Finalmente, así es
main.fc70b10f.chunk.css
como se ve el archivo compilado después de que se implementaron los cambios discutidos.Material de lectura
https://create-react-app.dev/docs/adding-custom-environment-variables#adding-development-environment-variables-in-env
https://create-react-app.dev/docs/deployment#serving-apps-with-client-side-routing
https://create-react-app.dev/docs/advanced-configuration
PUBLIC_URL
variable de entornofuente