我知道 Next 使用 Glamour 和 css-in-js。 但是,有没有办法在 Next 项目中使用真正的 css/less/scss ......不知何故? 至少是为了引导一个项目?
我的理由是——对于简单的网站,例如 Next 所针对的网站,大多数可以在线购买的预制 html 主题都是使用纯 html 和 css 制作的。 因此,您需要做的就是将 HTML 拆分为 react 组件,将它们放在适当的页面文件夹中,然后就完成了。
我真的很想在我的项目中使用 Next,但如果我不能以某种方式利用现成的 css,那对我来说将是一个交易破坏者。 此用例是否有解决方案或解决方法?
/pages
文件夹的同一级别创建/static
文件夹。.css
文件Head
并将<link />
添加到您的 CSS。import React from 'react';
import Head from 'next/head';
export default () => (
<div>
<Head>
<title>My styled page</title>
<link href="/static/styles.css" rel="stylesheet" />
</Head>
<p className="some-class-name">
Hello world!
</p>
</div>
)
就是这样,这样 Next.js 应该在页面头部呈现链接标签,浏览器将下载 CSS 并应用它。
哇,谢谢你的快速回复:)。 有用! 只有一个障碍——第一次加载页面时,在所有内容都正确呈现之前,会有一个无样式的 html 闪现。 我不确定它是来自反应后加载的 css 还是 js 文件。 会有解决方法吗?
无论如何,你们所做的工作给我留下了深刻的印象,再次感谢你们的快速回复!
没关系,我在 index 页面中也导入了带有 css 和 js 链接的 header 组件,并且 flash 消失了。 此外,将锚标签更改为链接组件,可以消除任何剩余的跳跃。 缺点是 Link 组件似乎从其子项中剥离了任何 html 标记(例如带有图标类的 span 标记),因此只剩下文本。
我知道这个用例是正确和优化的反面,但它对于我们不得不求助于快速和肮脏的情况非常有用......丑陋:)
所以集成预制 html 主题的工作流程是这样的:
@manolkalinov您能否附加您的代码以便于参考? 我知道您编写了工作流程,但如果出现问题,示例代码可以更容易地跟踪和调试。
在 head 标签中添加 CSS 确实有效。 但是,这有点 hacky,如果我们想使用postcss
或sass
之类的东西怎么办? 如何将现有的 css 样式转换为魅力 JSON 对象? 设计师也很难使用glamor
来设置页面样式。 必须有更好的方法来做到这一点。
顺便说一句,与 CSS 模块相比,使用glamor
有什么好处?
@andyhu请阅读https://github.com/zeit/next.js#faq了解使用glamor
的好处。
关于postcss
或sass
,自定义 webpack 配置将允许您使用它们(https://github.com/zeit/next.js/pull/222),或者我认为您可以在执行next
之前将这些文件编译为 css。
我认为它已经解决了。 如果您仍然有问题,请随时重新打开。 感谢您的回答@sergiodxa !
@nkzawa我使用自定义 webpack 配置,所以我可以在我的项目中使用更少。这是我的代码
next.config.js
/* eslint-disable */
export default {
webpack: (webpackConfig) => {
const newConfig = { ...webpackConfig };
newConfig.module.preloaders.push({
test: /\.less$/,
loader:'style-loader!css-loader!less-loader'
});
return newConfig;
},
cdn: false
}
然后我需要较少的文件import './index.less'
,但发生错误
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (1:4)
我确定我已经安装less
, less-loader
, css-loader
, style-loader
,你能提供一些建议吗,在此先感谢。
你应该试试
config.module.rules.push({
test: /\.less$/,
use: [
'style-loader',
{ loader: 'css-loader', options: { importLoaders: 1 } },
'less-loader'
]
})
@kimown您是否成功导入了较少的文件? 如果是这样,您介意分享您是如何做到的吗?
@sergiodxa如何从 node_modules 导入 css?
我自己有这个关于从 npm 包中导入 CSS 的问题。
例如 rc-slider
import 'rc-slider/assets/index.css'
有答案吗? @notrab
@notrab
试试这个
在您的根或 _document 组件中
import stylesheet from 'rc-slider/assets/index.css';
<div className='root'>
<style dangerouslySetInnerHTML={{ __html: stylesheet }} />
<Main />
</div>
@saadbinsaeed我试过这个。 它适用于自己的组件和页面。 但我想将它与 webpack 捆绑在一起,而不是内联。
@schoenwaldnils我试图这样做但做不到。 根据我的理解,我们正在使用服务器端应用程序,因此我们无法捆绑单独的 css 文件并将它们发送到客户端,因为服务器不知道 css 是什么。 我们必须将 css 嵌入到我们的 html 中。 要在整个应用程序中访问它,请将其嵌入根组件中或将其链接到标题中,如上面@sergiodxa 所示。
我尝试过@sergiodxa方法,但它对我不起作用。 这仍然适用于最新版本的 Next 吗?
@sergiodxa谢谢。 只是我一直在寻找。
@sergiodxa你应该改变你的答案。 这不是静态的! 它必须是静态的
现在使用https://github.com/zeit/next-plugins使用 CSS 导入很简单
抱歉 1 岁的问题。 显然,人们最终通过谷歌来到这里。
现在使用https://github.com/zeit/next-plugins使用 CSS 导入很简单
抱歉 1 岁的问题。 显然,人们最终通过谷歌来到这里。
并不真地。 我似乎找不到直接从 node_module 导入 css 的简单方法。 这是设计使然吗?
现在使用https://github.com/zeit/next-plugins使用 CSS 导入很简单
抱歉 1 岁的问题。 显然,人们最终通过谷歌来到这里。并不真地。 我似乎找不到直接从 node_module 导入 css 的简单方法。 这是设计使然吗?
不是真的在下一个版本 7 之后,你已经看过了吗? 它比以前更容易;)
@mtrabelsi您能否举个例子,您如何直接从 Next.js 7 中的节点模块导入 css,因为我坚持使用它。 我需要从节点模块导入一些样式,但找不到有效的解决方案。
我们通过使用 copy-webpack-plugin 解决了这个问题。
在 webpack 配置(next.config.js)中:
config.plugins.push(
new CopyWebpackPlugin([
{
from: path.join(__dirname,'node_modules/react-datepicker/dist/react-datepicker.css'),
to: path.join(__dirname, 'static/react-datepicker.css')
}
])
);
您可以检查客户端 css 修复的修复https://github.com/AmanAgarwal041/next-css-fix
我认为有一种更简单的方法可以做到这一点:
3个简单的步骤:
npm install --save @zeit/next-css
// next.config.js
const withCSS = require('@zeit/next-css')
module.exports = withCSS({
cssLoaderOptions: {
url: false
}
})
import 'bootstrap-css-only/css/bootstrap.min.css';
_注意:使用 Next v 8+_
背景:
我花了几个小时试图简单地导入作为 node_module 安装的 CSS,各种解决方案大多是 hacky 解决方法,但如上所示,有一个简单的解决方案。
它由核心团队成员之一提供: https ://spectrum.chat/next-js/general/ignoring-folders-files-specifically-fonts~4f68cfd5-d576-46b8-adc8-86e9d7ea0b1f
如果有人使用@sergiodxa的答案,如果您将文件夹命名为static
,则链接标签应引用为static
。
😂 似乎人们阅读 GitHub 问题的次数超过了官方文档 (https://github.com/zeit/next-plugins/tree/master/packages/next-css) 😂
@mtrabelsi ,这个问题比文档imo更有价值,如果你想直接使用css,例如import 'bootstrap-css-only/css/bootstrap.min.css';
,文档中没有提及,直到我找到@Vrq的答案
@timneutkens
我正在尝试只导入我自己的普通 css 文件。 最后是使用https://github.com/zeit/next-plugins/tree/master/packages/next-css中的文档导入它的正确方法
还是使用 2017 年的@sergiodxa答案的正确方法,它通过<Head>
标签中的链接导入?
这是我最后发现的:
知道如何避免这种闪光,而无需将我的 css 包含在 _document 文件中吗?
欣赏它。
有关 Next.js 的 CSS 支持,请参阅 #8626!
最有用的评论
/pages
文件夹的同一级别创建/static
文件夹。.css
文件Head
并将<link />
添加到您的 CSS。就是这样,这样 Next.js 应该在页面头部呈现链接标签,浏览器将下载 CSS 并应用它。