Ich weiß, dass Next Glamour und css-in-js verwendet. Aber gibt es eine Möglichkeit, echtes css/less/scss in einem Next-Projekt zu verwenden ... irgendwie? Zumindest für das Bootstrapping eines Projekts?
Meine Argumentation ist folgende: Für einfache Sites, wie die, auf die Next abzielt, werden die meisten vorgefertigten HTML-Designs, die online gekauft werden können, mit reinem HTML und CSS erstellt. Alles, was Sie tun müssen, ist, den HTML-Code in Reaktionskomponenten zu zerlegen, sie in die entsprechenden Seitenordner zu legen, und Sie sind fertig.
Ich würde Next wirklich gerne für mein Projekt verwenden, aber wenn ich nicht in der Lage wäre, fertiges CSS irgendwie zu nutzen, wäre es ein Deal Breaker für mich. Gibt es eine Lösung oder einen Workaround für diesen Anwendungsfall?
/static
-Ordner auf derselben Ebene wie der /pages
-Ordner..css
Dateien abHead
und fügen Sie <link />
zu Ihrem CSS hinzu.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>
)
Auf diese Weise sollte Next.js das Link-Tag im Kopf der Seite rendern, und der Browser lädt das CSS herunter und wendet es an.
Wow, danke für die schnelle Antwort :). Es klappt! Es gibt nur einen Haken: Beim ersten Laden der Seite blitzt das nicht formatierte HTML auf, kurz bevor alles richtig gerendert wird. Ich bin mir nicht sicher, ob es sich um CSS- oder JS-Dateien handelt, die nach der Reaktion geladen wurden. Gäbe es hierfür einen Workaround?
Wie auch immer, ich bin absolut beeindruckt von der Arbeit, die ihr leistet, und nochmals vielen Dank für die schnelle Antwort!
Egal, ich habe die Header-Komponente mit den CSS- und JS-Links auch in die Indexseite importiert, und der Flash ist weg. Darüber hinaus entfernt das Ändern der Anker-Tags in Link-Komponenten alle übrig gebliebenen Sprünge. Der Nachteil ist, dass die Link-Komponente scheinbar alle HTML-Tags von ihren untergeordneten Elementen entfernt (z. B. span-Tags mit Symbolklassen), sodass nur Text übrig bleibt.
Ich weiß, dass dieser Anwendungsfall das Gegenteil von korrekt und optimiert ist, aber er ist wirklich nützlich für Fälle, in denen wir auf schnelle und schmutzige ... Hässlichkeit zurückgreifen müssen :)
Der Workflow zum Integrieren eines vorgefertigten HTML-Designs sieht also folgendermaßen aus:
@manolkalinov können Sie bitte Ihren Code zur einfachen Referenz anhängen? Ich weiß, dass Sie den Workflow geschrieben haben, aber ein Beispielcode erleichtert das Nachvollziehen und Debuggen, wenn ein Problem auftritt.
Das Hinzufügen von CSS im Head-Tag funktioniert auf jeden Fall. Allerdings ist es irgendwie hacky und was ist, wenn wir etwas wie postcss
oder sass
verwenden wollen? Wie konvertiert man vorhandene CSS-Stile in ein glamouröses JSON-Objekt? Außerdem ist es für Designer sehr schwierig, die Seite mit glamor
zu gestalten. Es muss einen besseren Weg geben, dies zu tun.
Übrigens, im Vergleich zu CSS-Modulen, was ist der Vorteil der Verwendung von glamor
?
@andyhu bitte lesen Sie https://github.com/zeit/next.js#faq über die Vorteile der Verwendung von glamor
.
Über postcss
oder sass
würde das Anpassen der Webpack-Konfiguration es Ihnen ermöglichen, sie zu verwenden (https://github.com/zeit/next.js/pull/222), oder ich denke, Sie können es einfach kompilieren Sie diese Dateien in CSS, bevor Sie next
ausführen.
Ich denke es ist gelöst. Fühlen Sie sich frei, wieder zu öffnen, wenn Sie das Problem weiterhin haben. Danke für deine Antwort @sergiodxa !
@nkzawa Ich verwende die Anpassung der Webpack-Konfiguration, damit ich weniger in meinem Projekt verwenden kann. Hier ist mein Code
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
}
dann benötige ich die less-Datei import './index.less'
, aber es tritt ein Fehler auf
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (1:4)
Ich bin mir sicher, dass ich less
, less-loader
, css-loader
, style-loader
installiert habe. Können Sie mir einen Vorschlag machen, danke im Voraus.
Du solltest es versuchen
config.module.rules.push({
test: /\.less$/,
use: [
'style-loader',
{ loader: 'css-loader', options: { importLoaders: 1 } },
'less-loader'
]
})
@kimown Ist es dir gelungen, die Less-Datei zu importieren? Wenn ja, würdest du gerne verraten, wie du es gemacht hast?
@sergiodxa Wie kann ich CSS aus node_modules importieren?
Ich hatte diese Frage selbst bezüglich des Imports von CSS aus einem npm-Paket.
zB rc-slider
import 'rc-slider/assets/index.css'
Gab es darauf eine Antwort? @notrab
@notrab
Versuche dies
In Ihrer Root- oder _document-Komponente
import stylesheet from 'rc-slider/assets/index.css';
<div className='root'>
<style dangerouslySetInnerHTML={{ __html: stylesheet }} />
<Main />
</div>
@saadbinsaeed Ich habe das versucht. Es funktioniert für eigene Komponenten und Seiten. Aber ich möchte es mit Webpack bündeln, anstatt es inline zu haben.
@schoenwaldnils Ich habe es versucht, konnte es aber nicht. Nach meinem Verständnis verwenden wir eine serverseitige Anwendung, sodass wir die separaten CSS-Dateien nicht bündeln und an den Client senden können, da der Server nicht weiß, was CSS ist. Wir müssen das CSS in unser HTML einbetten. Um in Ihrer gesamten Anwendung darauf zuzugreifen, betten Sie es in die Root-Komponente ein oder verlinken Sie es im Header, wie oben von @sergiodxa gezeigt.
Ich habe den @sergiodxa- Ansatz ausprobiert, aber er funktioniert bei mir nicht. Gilt dies immer noch für die neuesten Versionen von Next?
@sergiodxa danke. Ich habe nur gesucht.
@sergiodxa Sie sollten Ihre Antworten ändern. Das ist keine Statik ! Es muss statisch sein
Die Verwendung von CSS-Importen ist jetzt mit https://github.com/zeit/next-plugins einfach
Entschuldigung für die 1 Jahr alte Problembeule. Anscheinend landen die Leute hier über Google.
Die Verwendung von CSS-Importen ist jetzt mit https://github.com/zeit/next-plugins einfach
Entschuldigung für die 1 Jahr alte Problembeule. Anscheinend landen die Leute hier über Google.
Nicht wirklich. Ich kann anscheinend keine einfache Möglichkeit finden, CSS direkt aus dem node_module zu importieren. Ist das beabsichtigt?
Die Verwendung von CSS-Importen ist jetzt mit https://github.com/zeit/next-plugins einfach
Entschuldigung für die 1 Jahr alte Problembeule. Anscheinend landen die Leute hier über Google.Nicht wirklich. Ich kann anscheinend keine einfache Möglichkeit finden, CSS direkt aus dem node_module zu importieren. Ist das beabsichtigt?
Nicht wirklich nach der nächsten Version 7, hast du schon mal reingeschaut? es ist noch einfacher als vorher ;)
@mtrabelsi könnten Sie bitte ein Beispiel geben, wie Sie CSS direkt aus dem Knotenmodul in Next.js 7 importieren, weil ich damit nicht weiterkomme. Ich muss einige Stile aus dem Knotenmodul importieren, kann aber keine funktionierende Lösung finden.
Wir haben dieses Problem durch die Verwendung von copy-webpack-plugin behoben.
In der Webpack-Konfiguration (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')
}
])
);
Sie können einen Fix für den clientseitigen CSS-Fix https://github.com/AmanAgarwal041/next-css-fix auschecken
Ich denke, es gibt einen einfacheren Weg, es zu tun:
3 einfache Schritte:
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';
_Hinweis: Verwenden von Next v 8+_
Hintergrund:
Ich habe ein paar Stunden damit verbracht, einfach ein als node_module installiertes CSS zu importieren, und die verschiedenen Lösungen sind meistens hackige Problemumgehungen, aber wie oben gezeigt, gibt es eine einfache Lösung.
Es wurde von einem der Mitglieder des Kernteams bereitgestellt: https://spectrum.chat/next-js/general/ignoring-folders-files-specifically-fonts~4f68cfd5-d576-46b8-adc8-86e9d7ea0b1f
Wenn jemand die Antwort von @sergiodxa verwendet, wenn Sie den Ordner static
nennen, sollte das Link-Tag auf static
verweisen.
😂 anscheinend lesen die Leute mehr GitHub-Probleme als die offizielle Dokumentation (https://github.com/zeit/next-plugins/tree/master/packages/next-css) 😂
@mtrabelsi , Dieses Problem ist imo wertvoller als die Dokumentation. Wenn Sie CSS direkt verwenden möchten, z. B. import 'bootstrap-css-only/css/bootstrap.min.css';
, wird in der Dokumentation nichts erwähnt, bis ich die Antwort von @Vrq gefunden habe
@timneutkens
Ich versuche, einfach meine eigene normale CSS-Datei zu importieren. Am Ende ist der richtige Weg zum Importieren anhand der Dokumentation in https://github.com/zeit/next-plugins/tree/master/packages/next-css
oder ist der richtige Weg, die @sergiodxa- Antwort von 2017 zu verwenden, die über einen Link im <Head>
-Tag importiert wird?
Hier ist, was ich auf meiner Seite gefunden habe:
Haben Sie eine Idee, wie Sie diesen Flash vermeiden können, ohne mein CSS in die _document-Datei aufnehmen zu müssen?
Bin dankbar.
Siehe #8626 für CSS-Unterstützung für Next.js!
Hilfreichster Kommentar
/static
-Ordner auf derselben Ebene wie der/pages
-Ordner..css
Dateien abHead
und fügen Sie<link />
zu Ihrem CSS hinzu.Auf diese Weise sollte Next.js das Link-Tag im Kopf der Seite rendern, und der Browser lädt das CSS herunter und wendet es an.