Pour un progressif application Web basée sur I Material (React) et construite avec Webpack , comment inclure correctement les polices Roboto afin que l’application ne dépende pas des serveurs de Google et que les polices fonctionnent également hors connexion?
Le page d'installation référence uniquement le page des polices Google , mais cela force évidemment le téléchargement des polices à partir des serveurs de Google.
Un = problème d'interface utilisateur importante similaire existe concernant la police Roboto, mais repose toujours sur le fait que Google fournit les fichiers de police.
J'ai trouvé un package NPM fournissant les fichiers de police Roboto , mais je ne suis pas sûr de savoir comment inclure ces fichiers car de nombreux styles et formats de police sont fournis et Je ne sais pas de quel style l’UI a vraiment besoin . De plus, l'importation de ces familles de polices simplement via @import semble avoir problèmes de performances .
Alors, quelle est une solution simple et efficace pour regrouper les fichiers right Roboto avec mon application?
Voici comment mon équipe a décidé d’inclure les polices Roboto dans notre projet Webpack:
/fonts
)./fonts
./fonts/index.css
). Nous avons obtenu le contenu de ce fichier 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;
}
npm install --save file-loader
_ ( https://www.npmjs.com/package/file-loader )webpack.conf.js:
loaders: [
..., {
test: /\.(woff|woff2|eot|ttf|svg)$/,
loader: 'file?name=fonts/[name].[ext]'
}
]
App.js:
import './fonts/index.css';
Et c'est tout. La police par défaut de votre application devrait maintenant être Roboto.
Une partie de cette question consiste à déterminer right Les polices Roboto à inclure dans le projet, car l’ensemble des polices Roboto fait presque 5 Mo.
Dans le README , les instructions pour inclure Roboto indiquent: fonts.google.com/?selection.family=Roboto:300,400,5 . Ici, 300 = Roboto-Light, 400 = Roboto-Regular et 500 = Roboto-Medium. Celles-ci correspondent aux poids de police définis dans le fichier fichier typography.js . Bien que ces trois poids de police soient utilisés dans la quasi-totalité de la bibliothèque, il existe une référence à Regular-Bold dans DateDisplay.js . Si vous n'utilisez pas le DatePicker, vous devriez probablement pouvoir l'omettre en toute sécurité. Le style de police en italique n'est utilisé nulle part dans le projet, mis à part le style de démarquage GitHub.
Cette information est exacte au moment d'écrire ces lignes, mais elle pourrait changer dans le futur.
Vous pouvez également le faire comme indiqué dans ce numéro: https://github.com/callemall/material-ui/issues/6256
npm install typeface-roboto --save
Ensuite, dans votre index.js:
import 'typeface-roboto'
Fonctionne avec webpack/create-react-app.
Si l'application a été démarrée avec create-react-app, elle ne possède pas de fichier de configuration Webpack [visible]. Dans ce cas, vous pouvez effectuer les opérations suivantes:
créez /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'); }
Copier les fichiers de polices
ajouter <link rel="stylesheet" href="%PUBLIC_URL%/fonts/fonts.css">
à /public/index.html
Hourra!
5/b. Si, pour une raison quelconque, cela ne fonctionne toujours pas, modifiez les extensions des polices en .css (également à l'adresse src: url ('./ OperatorMono.css'))