Как включить шрифт Roboto в webpack build for Material UI?
на прогрессивное веб-приложение на основе материал UI (реагировать) и построен с Webpack, как правильно включить шрифт(ы) Roboto, чтобы приложение не зависело от серверов Google, и шрифты также работают offline ?
на установка просто ссылки страница шрифтов Google, но это, очевидно, заставляет шрифты загружаться из Google сервера.
подобное материал UI вопрос существует в отношении шрифта Roboto, но по-прежнему полагается на Google, предоставляющий файлы шрифтов.
нашел пакет NPM, предоставляющий файлы шрифтов Roboto, но я не уверен, как включить эти файлы, так как много стилей и форматов шрифтов и Я не знаю, какие стили материал UI действительно нуждается. Кроме того, импорт этих семейств шрифтов просто через @import кажется, есть проблемы с производительностью.
Итак, что такое хорошее и простое решение для связывания право файлы Roboto с моим приложением?
3 ответов
вот как моя команда пошла о включении шрифтов Roboto в наш проект Webpack:
загрузите шрифты Roboto и сделайте CSS-файл в папке, специфичной для шрифта
- создать папку (
/fonts
). - Загрузите все шрифты Roboto из Шрифт Белочка и переместить их в
/fonts
. - создайте файл CSS (
/fonts/index.css
). Мы получили содержимое этого файла от этот учебник.
.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;
}
используйте модуль загрузки файлов webpack для загрузки файлов шрифтов, чтобы webpack мог их распознавать
-
npm install --save file-loader
(https://www.npmjs.com/package/file-loader) - в конфигурации webpack используйте загрузчик следующим образом:
webpack.conf.js:
loaders: [
..., {
test: /\.(woff|woff2|eot|ttf|svg)$/,
loader: 'file?name=fonts/[name].[ext]'
}
]
импортируйте файл css шрифта в главную запись app
App.js:
import './fonts/index.css';
и это все. Шрифт по умолчанию вашего приложения теперь должен быть Roboto.
EDIT:какие шрифты Roboto действительно используют Material-UI?
частью этого вопроса является определение право Roboto шрифты для включения в проект, так как вся шрифты Roboto составляет почти 5 Мб.
на README, инструкции для включения Roboto указывают на: fonts.google.com/?selection.family=Roboto:300,400,500. Здесь 300 = Roboto-Light, 400 = Roboto-Regular и 500 = Roboto-Medium. Они соответствуют Весам шрифтов, определенным в типографика.файл JS. Хотя эти три веса шрифтов учитывают использование почти во всей библиотеке, есть одна ссылка на обычный-полужирный в а.js. Если вы не используете DatePicker, вы, вероятно, должны быть в безопасности, чтобы опустить это. Шрифт курсивом стиль не используется нигде в проекте, кроме стиля GitHub markdown.
эта информация является точной на момент написания этой статьи, но это может измениться в будущем.
вы также можете сделать это так, как описано в этой проблеме: https://github.com/callemall/material-ui/issues/6256
npm install typeface-roboto --save
затем, в вашем индексе.js:
import 'typeface-roboto'
работает с webpack / create-react-app.
В случае, если приложение было запущено с create-react-app, у него нет [видимого] файла конфигурации webpack. В этом случае вы можете сделать следующее:
- создать каталог / шрифты в / public
-
create / public / шрифты / шрифты.css, который определяет
@font-faces
@font-face { font-family: 'inglobal'; font-weight: normal; font-style: normal; src: url('./OperatorMono.ttf'); }
копировать файлы шрифтов
добавить
<link rel="stylesheet" href="%PUBLIC_URL%/fonts/fonts.css">
to / public / index.формат HTMLУра!
5 / b. Если по какой-либо причине он все еще не работает, измените расширения шрифтов на .css (также в src: url ('./ OperatorMono.css'))