Eu sei que Next usa Glamour e css-in-js. Mas, existe alguma maneira de usar css/less/scss real em um próximo projeto... de alguma forma? Pelo menos para inicializar um projeto?
Meu raciocínio é este - para sites simples, como os que o Next é direcionado, a maioria dos temas html pré-fabricados que podem ser comprados on-line são feitos usando html puro e css. Então, tudo que você precisa fazer é dividir o HTML em componentes react, colocá-los nas pastas de página apropriadas e pronto.
Eu realmente adoraria usar o Next para o meu projeto, mas se eu não conseguir alavancar de alguma forma o CSS pronto, seria um problema para mim. Existe uma solução ou uma solução alternativa para este caso de uso?
/static
no mesmo nível da pasta /pages
..css
Head
e adicione um <link />
ao seu 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>
)
E pronto, desta forma o Next.js deve renderizar a tag do link no cabeçalho da página e o navegador irá baixar o CSS e aplicá-lo.
Uau, obrigado pela resposta rápida :). Funciona! Há apenas um problema - ao carregar a página pela primeira vez, há um flash do html sem estilo antes de tudo ser renderizado corretamente. Não tenho certeza se é de arquivos css ou js carregados post-react. Teria alguma solução para isso?
De qualquer forma, estou absolutamente impressionado com o trabalho que vocês estão fazendo e obrigado novamente pela resposta rápida!
Não importa, eu importei o componente de cabeçalho com os links css e js na página de índice também, e o flash desapareceu. Além disso, alterar as tags de âncora para componentes Link remove qualquer salto restante. A desvantagem é que o componente Link parece remover quaisquer tags html de seus filhos (como tags span com classes de ícones), de modo que apenas o texto seja deixado.
Eu sei que esse caso de uso é o oposto de correto e otimizado, mas é muito útil para casos em que temos que recorrer ao rápido e sujo...feiúra :)
Portanto, o fluxo de trabalho para integrar um tema html pré-fabricado é este:
@manolkalinov você pode anexar seu código para facilitar a referência? Eu sei que você escreveu o fluxo de trabalho, mas um código de exemplo facilita o acompanhamento e a depuração se ocorrer um problema.
Adicionar CSS na tag head funciona com certeza. No entanto, é meio hacky e se quisermos usar algo como postcss
ou sass
? Como converter estilos CSS existentes em objeto JSON glamour? Também é muito difícil para os designers estilizar a página usando glamor
. Deve haver uma maneira melhor de fazer isso.
A propósito, comparado aos Módulos CSS, qual é o benefício de usar glamor
?
@andyhu leia https://github.com/zeit/next.js#faq sobre o benefício de usar glamor
.
Sobre postcss
ou sass
, personalizar a configuração do webpack permitiria que você os usasse (https://github.com/zeit/next.js/pull/222), ou acho que você pode apenas compile esses arquivos para css antes de executar next
.
Acho que está resolvido. Sinta-se à vontade para reabrir se ainda tiver o problema. Obrigado pela resposta @sergiodxa !
@nkzawa Eu uso customizar a configuração do webpack, então posso usar menos no meu projeto. aqui está meu código
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
}
então eu exijo o arquivo menos import './index.less'
, mas ocorre um erro
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (1:4)
Tenho certeza que instalei less
, less-loader
, css-loader
, style-loader
, você pode dar alguma sugestão, obrigado antecipadamente.
Você deveria tentar
config.module.rules.push({
test: /\.less$/,
use: [
'style-loader',
{ loader: 'css-loader', options: { importLoaders: 1 } },
'less-loader'
]
})
@kimown Você conseguiu importar o arquivo less? Se sim, você se importaria de compartilhar como você fez isso?
@sergiodxa Como posso importar css de node_modules?
Eu mesmo tive essa pergunta sobre a importação de CSS de um pacote npm.
Por exemplo, rc-slider
import 'rc-slider/assets/index.css'
Havia uma resposta para isso? @notrab
@notrab
Tente isso
Em seu componente root ou _document
import stylesheet from 'rc-slider/assets/index.css';
<div className='root'>
<style dangerouslySetInnerHTML={{ __html: stylesheet }} />
<Main />
</div>
@saadbinsaeed Eu tentei isso. Funciona para componentes e páginas próprias. Mas eu quero agrupá-lo com o webpack, em vez de tê-lo em linha.
@schoenwaldnils Tentei fazer isso, mas não consegui. De acordo com meu entendimento, estamos usando um aplicativo do lado do servidor para que não possamos agrupar os arquivos css separados e enviá-los ao cliente porque o servidor não sabe o que é css. temos que incorporar o css em nosso html. Para acessá-lo em todo o seu aplicativo, incorpore-o no componente raiz ou vincule-o no cabeçalho, conforme mostrado acima por @sergiodxa.
Eu tentei a abordagem @sergiodxa , mas não funciona para mim. Isso ainda é aplicável com as versões mais recentes do Next?
@sergiodxa obrigado. Só eu estava procurando.
@sergiodxa Você deve alterar suas respostas. Não é estática ! Deve ser estático
Usar importações de CSS é simples agora usando https://github.com/zeit/next-plugins
Desculpe pelo problema de 1 ano. Aparentemente, as pessoas acabam aqui através do google.
Usar importações de CSS é simples agora usando https://github.com/zeit/next-plugins
Desculpe pelo problema de 1 ano. Aparentemente, as pessoas acabam aqui através do google.
Na verdade, não. Não consigo encontrar uma maneira fácil de importar css diretamente do node_module. Isso é por design?
Usar importações de CSS é simples agora usando https://github.com/zeit/next-plugins
Desculpe pelo problema de 1 ano. Aparentemente, as pessoas acabam aqui através do google.Na verdade, não. Não consigo encontrar uma maneira fácil de importar css diretamente do node_module. Isso é por design?
Não muito depois da próxima versão 7, você já deu uma olhada? é ainda mais fácil do que antes ;)
@mtrabelsi você poderia dar um exemplo de como você importa css diretamente do módulo de nó no Next.js 7 porque estou preso a ele. Eu preciso importar alguns estilos do módulo de nó, mas não consigo encontrar uma solução que funcione.
Corrigimos esse problema usando copy-webpack-plugin.
Na configuração do 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')
}
])
);
você pode verificar uma correção para a correção css do lado do cliente https://github.com/AmanAgarwal041/next-css-fix
Acho que existe uma maneira mais simples de fazer isso:
3 passos simples:
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';
_Observação: Usando Próximo v 8+_
Fundo:
Passei algumas horas tentando simplesmente importar um CSS instalado como node_module e as várias soluções são principalmente soluções alternativas, mas, como mostrado acima, existe uma solução simples.
Foi fornecido por um dos membros da equipe principal: https://spectrum.chat/next-js/general/ignoring-folders-files-specifically-fonts~4f68cfd5-d576-46b8-adc8-86e9d7ea0b1f
Se alguém estiver usando a resposta de @sergiodxa , se você nomear a pasta static
a tag do link deve referenciar static
.
😂 parece que as pessoas lêem os problemas do GitHub mais do que a documentação oficial (https://github.com/zeit/next-plugins/tree/master/packages/next-css) 😂
@mtrabelsi , Este problema é mais valioso do que a documentação imo, se você quiser usar css diretamente, por exemplo import 'bootstrap-css-only/css/bootstrap.min.css';
, não há menção na documentação até encontrar a resposta do @Vrq
@timneutkens
Estou tentando apenas importar meu próprio arquivo css normal. No final está a maneira correta de importá-lo usando a documentação em https://github.com/zeit/next-plugins/tree/master/packages/next-css
ou é a maneira correta de usar a resposta do @sergiodxa de 2017, que importa através de um link na tag <Head>
?
Aqui está o que eu encontrei no meu final:
Alguma ideia de como evitar esse flash, sem precisar incluir meu css no arquivo _document?
Aprecie isso.
Veja #8626 para suporte CSS chegando ao Next.js!
Comentários muito úteis
/static
no mesmo nível da pasta/pages
..css
Head
e adicione um<link />
ao seu CSS.E pronto, desta forma o Next.js deve renderizar a tag do link no cabeçalho da página e o navegador irá baixar o CSS e aplicá-lo.