Как включить шрифт Roboto в webpack build for Material UI?

на прогрессивное веб-приложение на основе материал UI (реагировать) и построен с Webpack, как правильно включить шрифт(ы) Roboto, чтобы приложение не зависело от серверов Google, и шрифты также работают offline ?

Итак, что такое хорошее и простое решение для связывания право файлы 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 мог их распознавать

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. В этом случае вы можете сделать следующее:

  1. создать каталог / шрифты в / public
  2. create / public / шрифты / шрифты.css, который определяет @font-faces

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

  3. копировать файлы шрифтов

  4. добавить <link rel="stylesheet" href="%PUBLIC_URL%/fonts/fonts.css"> to / public / index.формат HTML

  5. Ура!

5 / b. Если по какой-либо причине он все еще не работает, измените расширения шрифтов на .css (также в src: url ('./ OperatorMono.css'))