首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用NextJS使用自托管字体面板?

如何使用NextJS使用自托管字体面板?
EN

Stack Overflow用户
提问于 2020-05-20 09:11:56
回答 4查看 49.3K关注 0票数 26

使用NextJS的字体

我读过关于如何在NextJS中使用自托管字体的不同主题。

当我这么做的时候,我得到了[ wait ] compiling ...

代码语言:javascript
运行
复制
@font-face {
    font-family: 'montserrat';
    src: url('./mypath/Montserrat-Medium.woff2') format('woff2'),
        url('./mypath/Montserrat-Medium.woff') format('woff'),
        url('./mypath/Montserrat-Medium.ttf') format('truetype'),
        url('./mypath/Montserrat-Medium.svg#Montserrat-Medium') format('svg');
}

没有错误,或者只是编译.我读过( stackoverflow/57590195),它说我们应该使用静态路径,比如

代码语言:javascript
运行
复制
@font-face {
    font-family: 'font';
    src: url('./static/fonts/Montserrat-Medium.woff2') format('woff2');
}

但这一解决方案根本行不通。它似乎工作得很好,因为错误(或令人信服的等待)停止了。但是,如果您仔细观察,您的字体没有加载。

然后我尝试了fontface观察者,我很快就明白了问题是一样的。因为您必须使用font-face,而不能将它与NextJS一起使用。

下载下一个字体后,我已经阅读了文档并查看了github实例

这是我的next.config.js灵感来自他们。

代码语言:javascript
运行
复制
const withSass = require('@zeit/next-sass');
const withCSS = require("@zeit/next-css");
const withFonts = require('next-fonts');

module.exports = withFonts(
    withCSS(
        withSass({
            enableSvg: true,
            webpack(config, options) {
                config.module.rules.push({
                    test: /\.(png|jpg|gif|svg|eot|ttf|woff|woff2)$/,
                    use: {
                        loader: 'url-loader',
                        options: {
                            limit: 100000
                        }
                    }
                });
                return config;
            }
        })
    )
);

我的字体路径public/static/fonts

下面是我试着使用它的方法。

代码语言:javascript
运行
复制
...
function MainIndex() {
    ...
    return (
        <>
        ...
        <style jsx>{`
                @font-face {
                    font-family: 'Montserrat';
                    src: url('./static/fonts/Montserrat-Medium.ttf');
                }
                h1 {
                    font-family: 'Montserrat';
                }
        `}</style>
        </>
    )
}
...

解决方案我找到了

阅读更多的github问题

编辑:

我试着修改杰斯珀我们 的内容。

我创建了/public/static/fonts/fonts.css/public/fonts/allMyfont.ttf,然后在_var.scss中导入sass变量@import“/public/静态/fonts/fonts.css”;导入style.scss my var $font并将" my /path/style.scss“导入到index.js (永久补充)

在我尝试了一种更接近的方法之后,/public/static/fonts/fonts.css仍然将我的字体放在同一个文件夹中。然后在我的index.js里。但那个人什么也没做。

这里是实时CodeSandBox中的代码

EN

Stack Overflow用户

发布于 2020-05-20 13:01:47

我通常是这样做的:

  1. 把字体放在公共/静态的地方。
  2. 与字体放在声明字体的CSS文件相同的文件夹中。

CSS文件示例/public/fonts/style.css

代码语言:javascript
运行
复制
@font-face {
    font-family: 'Italian No1';
    src: url('ItalianNo1-Black.eot');
    src: url('ItalianNo1-Black.eot?#iefix') format('embedded-opentype'), url('ItalianNo1-Black.woff2') format('woff2'), url('ItalianNo1-Black.woff') format('woff');
    font-weight: 900;
    font-style: normal;
}

更新NextJS的最新版本导入CSS文件的适当位置是_app.js (见文件)中的一个import语句。

较早的答案:

_document.js (文档)中导入此css:

代码语言:javascript
运行
复制
render() {
    return (
        <Html>
            <Head>
                <link href="/fonts/style.css" rel="stylesheet"/>
            </Head>

            <body>
                <Main/>
                <NextScript/>
            </body>
        </Html>
    )
}
票数 26
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61909298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档