Comment inclure la police Roboto dans la construction de webpack pour L'interface utilisateur?

progressif application web basée sur Matériel de l'INTERFACE utilisateur (Réagir) et construit avec Webpack, Comment puis-je inclure correctement la police(s) Roboto de sorte que l'application ne dépend pas des serveurs Google et les polices fonctionnent aussi hors ?

alors, qu'est-ce qu'une bonne et simple solution pour regrouper les droit Roboto dépose des fichiers avec mon application?

28
demandé sur Udo G 2016-11-02 14:01:46

3 réponses

Voici comment mon équipe a fait pour inclure les polices Roboto dans notre projet Webpack:

Téléchargez les polices Roboto et créez un fichier CSS dans un dossier spécifique à la police

  • Créer un dossier (/fonts).
  • Téléchargez toutes les polices Roboto de Police Écureuil et dans /fonts.
  • Créer le fichier CSS (/fonts/index.css). Nous avons obtenu le contenu de ce fichier à partir de ce tutoriel.

index.css:

* {
  font-family: Roboto, sans-serif;  
}

@font-face {
    font-family: 'Roboto';
    src: url('Roboto-Regular-webfont.eot');
    src: url('Roboto-Regular-webfont.eot?#iefix') format('embedded-opentype'),
         url('Roboto-Regular-webfont.woff') format('woff'),
         url('Roboto-Regular-webfont.ttf') format('truetype'),
         url('Roboto-Regular-webfont.svg#RobotoRegular') format('svg');
    font-weight: normal;
    font-style: normal;
}

@font-face {
    font-family: 'Roboto';
    src: url('Roboto-Italic-webfont.eot');
    src: url('Roboto-Italic-webfont.eot?#iefix') format('embedded-opentype'),
         url('Roboto-Italic-webfont.woff') format('woff'),
         url('Roboto-Italic-webfont.ttf') format('truetype'),
         url('Roboto-Italic-webfont.svg#RobotoItalic') format('svg');
    font-weight: normal;
    font-style: italic;
}

@font-face {
    font-family: 'Roboto';
    src: url('Roboto-Bold-webfont.eot');
    src: url('Roboto-Bold-webfont.eot?#iefix') format('embedded-opentype'),
         url('Roboto-Bold-webfont.woff') format('woff'),
         url('Roboto-Bold-webfont.ttf') format('truetype'),
         url('Roboto-Bold-webfont.svg#RobotoBold') format('svg');
    font-weight: bold;
    font-style: normal;
}

@font-face {
    font-family: 'Roboto';
    src: url('Roboto-BoldItalic-webfont.eot');
    src: url('Roboto-BoldItalic-webfont.eot?#iefix') format('embedded-opentype'),
         url('Roboto-BoldItalic-webfont.woff') format('woff'),
         url('Roboto-BoldItalic-webfont.ttf') format('truetype'),
         url('Roboto-BoldItalic-webfont.svg#RobotoBoldItalic') format('svg');
    font-weight: bold;
    font-style: italic;
}

@font-face {
    font-family: 'Roboto';
    src: url('Roboto-Thin-webfont.eot');
    src: url('Roboto-Thin-webfont.eot?#iefix') format('embedded-opentype'),
         url('Roboto-Thin-webfont.woff') format('woff'),
         url('Roboto-Thin-webfont.ttf') format('truetype'),
         url('Roboto-Thin-webfont.svg#RobotoThin') format('svg');
    font-weight: 200;
    font-style: normal;
}

@font-face {
    font-family: 'Roboto';
    src: url('Roboto-ThinItalic-webfont.eot');
    src: url('Roboto-ThinItalic-webfont.eot?#iefix') format('embedded-opentype'),
         url('Roboto-ThinItalic-webfont.woff') format('woff'),
         url('Roboto-ThinItalic-webfont.ttf') format('truetype'),
         url('Roboto-ThinItalic-webfont.svg#RobotoThinItalic') format('svg'); (under the Apache Software License). 
    font-weight: 200;
    font-style: italic;
}

@font-face {
    font-family: 'Roboto';
    src: url('Roboto-Light-webfont.eot');
    src: url('Roboto-Light-webfont.eot?#iefix') format('embedded-opentype'),
         url('Roboto-Light-webfont.woff') format('woff'),
         url('Roboto-Light-webfont.ttf') format('truetype'),
         url('Roboto-Light-webfont.svg#RobotoLight') format('svg');
    font-weight: 100;
    font-style: normal;
}

@font-face {
    font-family: 'Roboto';
    src: url('Roboto-LightItalic-webfont.eot');
    src: url('Roboto-LightItalic-webfont.eot?#iefix') format('embedded-opentype'),
         url('Roboto-LightItalic-webfont.woff') format('woff'),
         url('Roboto-LightItalic-webfont.ttf') format('truetype'),
         url('Roboto-LightItalic-webfont.svg#RobotoLightItalic') format('svg');
    font-weight: 100;
    font-style: italic;
}

@font-face {
    font-family: 'Roboto';
    src: url('Roboto-Medium-webfont.eot');
    src: url('Roboto-Medium-webfont.eot?#iefix') format('embedded-opentype'),
         url('Roboto-Medium-webfont.woff') format('woff'),
         url('Roboto-Medium-webfont.ttf') format('truetype'),
         url('Roboto-Medium-webfont.svg#RobotoMedium') format('svg');
    font-weight: 300;
    font-style: normal;
}

@font-face {
    font-family: 'Roboto';
    src: url('Roboto-MediumItalic-webfont.eot');
    src: url('Roboto-MediumItalic-webfont.eot?#iefix') format('embedded-opentype'),
         url('Roboto-MediumItalic-webfont.woff') format('woff'),
         url('Roboto-MediumItalic-webfont.ttf') format('truetype'),
         url('Roboto-MediumItalic-webfont.svg#RobotoMediumItalic') format('svg');
    font-weight: 300;
    font-style: italic;
}

utilisez le module webpack du chargeur de fichiers pour charger les fichiers de police afin que webpack puisse les reconnaître

webpack.conf.js:

loaders: [
  ..., {
    test: /\.(woff|woff2|eot|ttf|svg)$/,
    loader: 'file?name=fonts/[name].[ext]'
  }
]

Importer la police fichier css dans l'entrée principale de la app

App.js:

import './fonts/index.css';

Et c'est tout. La police par défaut de votre application devrait maintenant être Roboto.

EDIT: quelles polices Roboto utilise Material-UI?

une partie de cette question Est de déterminer le droit polices Roboto à inclure dans le projet puisque la totalité des polices Roboto est presque 5MB.

Dans le README, les instructions pour inclure Roboto point à: fonts.google.com/?selection.family=Roboto:300,400,500. Ici, 300 = Roboto-Lumière, 400 = Roboto Réguliers, et 500 = Roboto-Moyen. Ceux-ci correspondent aux poids de police définis dans le la typographie.fichier js. Alors que ces trois poids de police représentent l'utilisation dans presque toute la bibliothèque, il y a une référence à régulier-gras dans DateDisplay.js. Si vous n'utilisez pas le curseur de données, vous devriez probablement être sûr d'omettre cela. Italique de la police le style n'est utilisé nulle part dans le projet à part le style GitHub markdown.

cette information est exacte au moment de la rédaction du présent document, mais elle pourrait changer à l'avenir.

27
répondu Daniel Bank 2016-12-22 03:31:44

Vous pouvez aussi le faire comme il est documenté dans ce numéro: https://github.com/callemall/material-ui/issues/6256

npm install typeface-roboto --save

alors, dans votre index.js:

import 'typeface-roboto'

Fonctionne avec webpack/créer-réagir-app.

20
répondu kimomat 2017-09-26 13:01:09

dans le cas où l'application a été commencée avec créer-réagir-app, il n'a pas de fichier [visible] webpack configfile. Dans ce cas, vous pouvez effectuer les opérations suivantes:

  1. créer /répertoire des polices dans /public
  2. créer /public/fonts/fonts.css, qui définit le @font-faces

    @font-face { font-family: 'inglobal'; font-weight: normal; font-style: normal; src: url('./OperatorMono.ttf'); }

  3. Copier les fichiers de police

  4. ajouter <link rel="stylesheet" href="%PUBLIC_URL%/fonts/fonts.css"> /public/index.HTML

  5. Hourra!

5/b. Si, pour une raison quelconque, cela ne fonctionne toujours pas, changez les polices " extensions .CSS (également à src: url ('./ OperatorMono.css'))

0
répondu sandorvasas 2017-03-28 12:00:59