cssモジュールでtailwindcssを使用していますが、ページを初めてロードしたときに、すべてのスタイルがロードされていないことに気付きました。 何が起こっているのかを理解しようとして、tailwindcssの例を実行し、cssモジュールからスタイルを追加しました。これは、prod用にビルドされた場合でも発生します。
https://github.com/zeit/next.js/tree/canary/examples/with-tailwindcssから例を実行し
なんらかのスタイルでindex.module.css
ファイルを追加します
index.js
ページのcssモジュールからスタイルを追加します
cssモジュールを使用しない場合、すべてのスタイルが最初はちらつくことなく正常に読み込まれます。 cssモジュールを使用しても同じ動作が期待されます
これは、cssモジュールの自動コード分割と関係があるのではないかと思います🤔
私はコンポーネントにプレーンなcssモジュールを使用し、数ミリ秒後にスタイルが適用されます。
私はコンポーネントにプレーンなcssモジュールを使用し、数ミリ秒後にスタイルが適用されます。
https://stackoverflow.com/a/42969608/943337によると、空のスクリプトタグを追加したところ、最初の読み込み時にサイドバーがポップアップするという問題が解決されました。
https://github.com/vercel/next-plugins/issues/455#issuecomment -489452379
import Document, { Html, Head, Main, NextScript } from 'next/document';
import { GA_TRACKING_ID } from '../utils/anayltics';
class MyDocument extends Document {
static async getInitialProps(ctx) {
const initialProps = await Document.getInitialProps(ctx);
return { ...initialProps };
}
render() {
return (
<Html lang="de">
<Head>
</Head>
<body>
<Main />
<NextScript />
{/* Empty script tag as chrome bug fix, see https://stackoverflow.com/a/42969608/943337 */}
<script> </script>
</body>
</Html>
);
}
}
export default MyDocument;
私はコンポーネントにプレーンなcssモジュールを使用し、数ミリ秒後にスタイルが適用されます。
https://stackoverflow.com/a/42969608/943337によると、空のスクリプトタグを追加したところ、最初の読み込み時にサイドバーがポップアップするという問題が解決されました。
import Document, { Html, Head, Main, NextScript } from 'next/document'; import { GA_TRACKING_ID } from '../utils/anayltics'; class MyDocument extends Document { static async getInitialProps(ctx) { const initialProps = await Document.getInitialProps(ctx); return { ...initialProps }; } render() { return ( <Html lang="de"> <Head> </Head> <body> <Main /> <NextScript /> {/* Empty script tag as chrome bug fix, see https://stackoverflow.com/a/42969608/943337 */} <script> </script> </body> </Html> ); } } export default MyDocument;
@ Adrianjs42に感謝します。飛び出すサイドバーは、クロムで止まりました。
この問題を解決するための回避策があります
カスタム「 _document.js
」を作成し、Htmlコンポーネントにクラス「 no-fouc
」を追加します
カスタム「 _app.js
」を作成し、「 componentDidMount
」に次のコードを追加します
const removeFouc = (foucElement) => {
foucElement.className = foucElement.className.replace('no-fouc', 'fouc')
}
removeFouc(document.documentElement)
追加このスタイルをグローバルスタイルに追加します。
.no-fouc {
visibility: hidden;
opacity: 0;
}
.fouc {
visibility: visible;
opacity: 1;
}
これはnext@^9.4.5-canary.15
で修正する必要があります! アップグレードしてお知らせください。
@Timer 、 next@^9.4.5-canary.18
をインストールしました。 これで、CSSのちらつきは開発モードでは表示されませんが、製品版では同じままです。 製品版にはまだバグがあります。
私はmaterial-ui + cssモジュールを使用していることに注意してください
この問題に直面するために私が取り組んできたアプリのバージョンは次のとおりです: https :
@ Prottoy2938ここでも同じです。 この問題にコメントしましたhttps://github.com/vercel/next.js/issues/13058#issuecomment-654165987
@Timer 、
next@^9.4.5-canary.18
をインストールしました。 これで、CSSのちらつきは開発モードでは表示されませんが、製品版では同じままです。 製品版にはまだバグがあります。私はmaterial-ui + cssモジュールを使用していることに注意してください
この問題に直面するために私が取り組んできたアプリのバージョンは次のとおりです: cluster-11-lwj6nmcgy.vercel.app 。
これは、あなたのケースがcssモジュール/追い風とは無関係であり、material-uiの事前レンダリングの実装を忘れることに関連しているようです: https :
@casperle 、私の場合、問題はサーバー側のレンダリングを行っていたためでした。 私はmaterial-uiからこの
v9.4.5-canary.28では、開発時にちらつきがなく、本番環境でちらつきがありません。
最も参考になるコメント
この問題を解決するための回避策があります
カスタム「
_document.js
」を作成し、Htmlコンポーネントにクラス「no-fouc
」を追加しますカスタム「
_app.js
」を作成し、「componentDidMount
」に次のコードを追加します追加このスタイルをグローバルスタイルに追加します。