الفرق بين المراجعتين لصفحة: «Next.js/built in css support»

من موسوعة حسوب
لا ملخص تعديل
طلا ملخص تعديل
 
(4 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:دعم تنسيقات CSS المدمجة في Next.js}}</noinclude>
<noinclude>{{DISPLAYTITLE:دعم تنسيقات CSS المدمجة في Next.js}}</noinclude>
تتيح إدراج ملفات تنسيق CSS من خلال ملف JavaScript، وهذا ممكن لأن توسِّع مفهوم الإدراج [[JavaScript/import|<code>import</code>]] أكثر مما هو عليه في JavaScript.
تتيح Next.js إدراج ملفات تنسيق [[CSS]] من خلال ملف [[JavaScript]]، وهذا ممكن لأن Next.js توسِّع مفهوم الإدراج [[JavaScript/import|<code>import</code>]] أكثر مما هو عليه في [[JavaScript]].


== إضافة ورقة تنسيقات مورَّثة عامة ==
== إضافة تنسيقات CSS على عموم التطبيق ==
لإضافة ورقة تنسيقات إلى تطبيق، أدرج ملف CSS ضمن الملف <code>pages/_app.js</code>. لنلق نظرة على ورقة التنسيق المورَّث التي تُدعى <code>styles.css</code>:<syntaxhighlight lang="css">
لإضافة ملف تنسيقات stylesheet إلى تطبيق، أدرج ملف CSS ضمن الملف <code>pages/_app.js</code>. ألق نظرة على ملف التنسيق التالي الذي يدعى <code>styles.css</code>:<syntaxhighlight lang="css">
body {
body {
   font-family: 'SF Pro Text', 'SF Pro Icons', 'Helvetica Neue', 'Helvetica',
   font-family: 'SF Pro Text', 'SF Pro Icons', 'Helvetica Neue', 'Helvetica',
سطر 11: سطر 11:
   margin: 0 auto;
   margin: 0 auto;
}
}
</syntaxhighlight>إنشئ الملف [[Next.js/custom app|<code>pages/_app.js</code>]] إن لم يكن موجودًا بعد ثم أدرج الملف <code>styles.css</code> ضمنه باستخدام <code>import</code>:<syntaxhighlight lang="javascript">
</syntaxhighlight>أنشئ الملف [[Next.js/custom app|<code>pages/_app.js</code>]] إن لم يكن موجودًا بعد، ثم أدرج الملف <code>styles.css</code> ضمنه باستخدام <code>import</code>:<syntaxhighlight lang="javascript">
import '../styles.css'
import '../styles.css'


// الجديد `pages/_app.js` هذا التصدير الافتراضي مطلوب لملف.
// الجديد `pages/_app.js` هذا التصدير الافتراضي مطلوب لملف
export default function MyApp({ Component, pageProps }) {
export default function MyApp({ Component, pageProps }) {
   return <Component {...pageProps} />
   return <Component {...pageProps} />
}
}
</syntaxhighlight>ستُطبق قواعد التنسيق التي يضمها الملف على جميع الصفحات و المكوّنات في تطبيقك. ونظرًا للطبيعة العامة للتنسيقات المورَّثة ولتحاشي النزاعات في تطبيقها لا يمكن إدراج هذه التنسيقات إلا ضمن الملف <code>pages/_app.js</code>.  
</syntaxhighlight>ستُطبق قواعد التنسيق التي يضمها الملف على جميع الصفحات والمكوّنات في تطبيقك. ونظرًا للطبيعة العامة لتنسيقات CSS ولتحاشي حصول أي تعارض في تطبيقها، أدرج هذه التنسيقات ضمن الملف <code>pages/_app.js</code> فقط.  


يتيح لك التعبير عن التنسيقات بهذا الشكل في مرحلة التطوير أن يُعاد تحميلها مباشرة بمجرد تعديلها، وبالتالي سيُحافظ التطبيق على حالته. وتُوضع جميع ملفات CSS تلقائيًا خلال مرحلة الإنتاج في ملف <code>css.</code> واحد مصغّر.
يتيح لك التعبير عن التنسيقات بهذا الشكل في مرحلة التطوير إعادة تحميلها مباشرة بمجرد تعديلها، وبالتالي سيُحافظ التطبيق على حالته. وتُوضع جميع ملفات CSS تلقائيًا خلال مرحلة الإنتاج في ملف <code>css.</code> واحد مصغّر.


=== إدراج التنسيقات من node_modules ===
=== إدراج التنسيقات من المجلد node_modules ===
انطلاقًا من النسخة 9.5.4، سمحت Next.js بإدراج ملف CSS من وحدات Node أو <code>node_modules</code> في أي مكان من تطبيقك. بينما لابد من إدراج أوراق التنسيق المورَّرثة العامة مثل <code>bootstrap</code> أو <code>nprogress</code> ضمن الملف <code>pages/_app.js</code>. إليك مثالًا: <syntaxhighlight lang="javascript">
سمحت Next.js انطلاقًا من النسخة 9.5.4 إدراج ملف CSS من وحدات Node أو <code>node_modules</code> في أي مكان من تطبيقك. بينما لابد من إدراج ملفات CSS العامة مثل <code>bootstrap</code> أو <code>nprogress</code> ضمن الملف <code>pages/_app.js</code>. إليك مثالًا:<syntaxhighlight lang="javascript">
// pages/_app.js
// pages/_app.js
import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap/dist/css/bootstrap.css'
سطر 30: سطر 30:
   return <Component {...pageProps} />
   return <Component {...pageProps} />
}
}
</syntaxhighlight>عليك إدراج تنسيقات CSS التي يحتاجها مكوِّن يؤمنه طرف آخر بالشكل التالي مثلًا:<syntaxhighlight lang="javascript">
</syntaxhighlight>عليك إدراج تنسيقات CSS التي يحتاج إليها مكوِّن يؤمنه طرف آخر بالشكل التالي مثلًا:<syntaxhighlight lang="javascript">
// components/ExampleDialog.js
// components/ExampleDialog.js
import { useState } from 'react'
import { useState } from 'react'
سطر 57: سطر 57:
</syntaxhighlight>
</syntaxhighlight>


== إضافة تنسيقات CSS على مستوى المكوّنات ==
== إضافة تنسيقات CSS على مستوى المكونات ==
تدعم Next.js وحدات CSS من خلال الصيغة التالية في تسمية الملفات ‎<code>[name].module.css</code> وحدات CSS. تغطي وحدات CSS تطبيق قواعد التنسيق محليًا وبشكل تلقائي عن طريق إنشاء أسماء فريدة للأصناف. يسمح ذلك بتطبيق نفس أصناف CSS في ملفات مختلفة دون أن يحدث أي تضارب، وهذا ما يجعل من هذه الوحدات الطريقة المثالية لإضافة تنسيقات على مستوى المكوّن. يمكن غدراج ملفات وحدات CSS في أي مكان من التطبيق.
تدعم Next.js وحدات CSS من خلال الصيغة التالية ‎<code>[name].module.css</code> في تسمية ملفات وحدات CSS. تغطي وحدات CSS تطبيق قواعد التنسيق محليًا وتلقائيًا عن طريق إنشاء أسماء فريدة للأصناف. يسمح ذلك بتطبيق نفس أصناف CSS في ملفات مختلفة دون أن يحدث أي تضارب، وهذا ما يجعل من هذه الوحدات الطريقة المثالية لإضافة تنسيقات على مستوى المكوّن. كما يمكن إدراج ملفات وحدات CSS في أي مكان من التطبيق.


لنأخذ على سبيل المثال المكوّن <code>Button</code> القابل لإعادة الإستخدام والموجود في المجلد<code>components/</code> ‎. لتطبيق وحدة CSS عليه، أنشئ الملف <code>components/Button.module.css</code> وضع فيه المحتوى التالي:<syntaxhighlight lang="css">
لنأخذ على سبيل المثال المكوّن <code>Button</code> القابل لإعادة الإستخدام والموجود في المجلد<code>components/</code> ‎. لتطبيق وحدة CSS عليه، أنشئ الملف <code>components/Button.module.css</code> وضع فيه المحتوى التالي:<syntaxhighlight lang="css">
/* `.module.css` أو ملفات `.css` لا تقلق من التنازع الذي قد يحدث بي ملفات  
/* `.module.css` أو ملفات `.css` لا تقلق من التنازع الذي قد يحدث بين ملفات  
*/
*/
.error {
.error {
سطر 74: سطر 74:
     <button
     <button
       type="button"
       type="button"
       // كخاصية للكائن المُدرج "error" لاحظ كيف يمكن الوصول إلى الصنف  
       // كخاصية للكائن المُدرج "error" لاحظ كيف يمكن الوصول إلى الصنف  
       // styles`.
       // `styles`
       className={styles.error}
       className={styles.error}
     >
     >
سطر 82: سطر 82:
   )
   )
}
}
</syntaxhighlight>تُعد وحدات CSS ميزة اختيارية وتفُعّل فقط للملفات التي تنتهي بالامتداد <code>module.css.</code>، كما تبقى طريقة إدراج التنسيقات النمطية من خلال العنصر <code><link></code> أو ملفات CSS العامة مدعومة أيضًا.
</syntaxhighlight>تُعد وحدات CSS ميزة اختيارية وتفُعّل فقط في الملفات التي تنتهي بالامتداد <code>module.css.</code>، كما تبقى طريقة إدراج التنسيقات النمطية من خلال العنصر <code><link></code> أو ملفات CSS العامة مدعومة أيضًا.


تُجمّع كل وحدات CSS تلقائيًا في مرحلة الإنتاج ضمن عدة ملفات <code>css.</code> مصغّرة ومنفصلة عن الشيفرة. تمثل هذه الملفات مسارات التنفيذ المباشر في تطبيقك لتضمن تحميل الحد الأدنى من تنسيقات CSS في تطبيقك لعرضه.
تُجمّع كل وحدات CSS تلقائيًا في مرحلة الإنتاج ضمن عدة ملفات <code>css.</code> مصغّرة ومنفصلة عن الشيفرة، وتمثل هذه الملفات مسارات التنفيذ المباشر في تطبيقك لتضمن تحميل الحد الأدنى من تنسيقات CSS لعرضه بالشكل المطلوب.


== دعم امتداد sass في Next.js ==
== دعم امتداد sass في Next.js ==
تسمح باستخدام لغة [[Sass]] باستخدام ملفات بأحد الامتداديين <code>scss.</code> و <code>sass.</code>. وباستخدام وحدات CSS، بإمكانك إضافة تنسيقات Sass على مستوى المكوِّن من خلال الملفات التي تنتهي بأحد الامتداديين <code>module.scss.</code> أو <code>module.sass.</code>.  
تسمح Next.js باستخدام لغة [[Sass]] من خلال ملفات تحمل أحد الامتداديين <code>scss.</code> و <code>sass.</code> وبإمكانك باستخدام وحدات CSS إضافة تنسيقات Sass على مستوى المكوِّن من خلال الملفات التي تنتهي بأحد الامتداديين <code>module.scss.</code> أو <code>module.sass.</code> كما شرحنا آنفًا.  


تأكد من تثبيت <code>[https://github.com/sass/sass sass]</code> قبل أن تستفيد من الدعم المدمج للغة في Next.js: <syntaxhighlight lang="bash">
تأكد من تثبيت <code>[https://github.com/sass/sass sass]</code> قبل أن تستفيد من الدعم المدمج له في Next.js: <syntaxhighlight lang="bash">
npm install --save-dev sass
npm install --save-dev sass
</syntaxhighlight>لهذه اللغة ميزات الدعم المدمج نفسها التي ناقشناها سابقًا لتنسيقات CSS.<blockquote>ملاحظة: تدعم صيغتان قواعديتان مختلفتان ولكل منهما امتداده الخاص. إذ يتطلب منك استخدام اللاحقة استخدام صياغة [[Sass#.D8.A7.D9.84.D8.B5.D9.8A.D8.A7.D8.BA.D8.A9%20.28Syntax.29|SCSS]] بينما يتطلب استخدام اللاحقة استخدام الصياغة الإزاحية [[Sass#.D8.A7.D9.84.D8.B5.D9.8A.D8.A7.D8.BA.D8.A9%20.28Syntax.29|Sass]].
</syntaxhighlight>لهذه اللغة ميزات الدعم المدمج نفسها التي ناقشناها سابقًا لتنسيقات CSS.
 
إن لم تكن متأكدًا من خياراتك، استخدم صياغة SCSS فهي مجموعة قواعد توّسع CSS وتشابهها ولا تتطلب منك أن تتعلم الصياعة الإزاحية</blockquote>


'''ملاحظة:''' تدعم Next.js [https://sass-lang.com/documentation/syntax صيغتان قواعديتان مختلفتان] ولكل منهما امتداده الخاص. إذ يتطلب منك استخدام اللاحقة <code>scss.</code> استخدام صياغة [[Sass#.D8.A7.D9.84.D8.B5.D9.8A.D8.A7.D8.BA.D8.A9%20.28Syntax.29|SCSS]] بينما يتطلب استخدام اللاحقة <code>sass.</code> استخدام الصياغة الإزاحية [[Sass#.D8.A7.D9.84.D8.B5.D9.8A.D8.A7.D8.BA.D8.A9%20.28Syntax.29|Sass]]. إن لم تكن متأكدًا من خياراتك، استخدم صياغة SCSS فهي مجموعة قواعد توّسع CSS وتشابهها ولا تتطلب منك أن تتعلم الصياغة الإزاحية Indented Syntax.
=== تخصيص خيارات Sass ===
=== تخصيص خيارات Sass ===
بإمكانك تهيئة مصرِّف Sass -إن أردت- باستخدام الخاصية <code>sassOptions</code> في ملف التهيئة <code>next.config.js</code>. يمكنك مثلً إضافة <code>includePaths</code>:<syntaxhighlight lang="javascript">
بإمكانك تهيئة مصرِّف Sass -إن أردت- باستخدام الخاصية <code>sassOptions</code> في ملف التهيئة <code>next.config.js</code>. يمكنك مثلًا إضافة <code>includePaths</code>:<syntaxhighlight lang="javascript">
const path = require('path')
const path = require('path')


سطر 107: سطر 106:


=== متغيرات Sass ===
=== متغيرات Sass ===
تدعم Next.js متغيرات المُصدَّرة من ملفات وحدات CSS. لاحظ على سبيل المثال كيف يُستخدم المتغير المُصدَّر <code>primaryColor</code>:<syntaxhighlight lang="sass">
تدعم Next.js متغيرات Sass المُصدَّرة من ملفات وحدات CSS. لاحظ على سبيل المثال كيف يُستخدم المتغير المُصدَّر <code>primaryColor</code>:<syntaxhighlight lang="sass">
/* variables.module.scss */
/* variables.module.scss */
$primary-color: #64FF00
$primary-color: #64FF00
سطر 126: سطر 125:
</syntaxhighlight>
</syntaxhighlight>


== التنسيق بصيغة  CSS-in-JS ==
== التنسيق بكتابة تعليمات CSS ضمن شيفرة JavaScript ==
بالإمكان الاستفادة من أية حلول تستخدم الصياغة CSS-in-JS وأبسطها التنسيق السطري:<syntaxhighlight lang="javascript">
بالإمكان الاستفادة من أية حلول تستخدم الصياغة CSS-in-JS أي كتابة تعليمات CSS ضمن شيفرة JavaScript وأبسطها التنسيق السطري:<syntaxhighlight lang="javascript">
function HiThere() {
function HiThere() {
   return <p style={{ color: 'red' }}>hi there</p>
   return <p style={{ color: 'red' }}>hi there</p>
سطر 133: سطر 132:


export default HiThere
export default HiThere
</syntaxhighlight>تُجمَّع عناصر styled-jsx لدعم تنسيقات CSS المعزولة والمحدودة (ضمن مكوّن معين مثلًا) والهدف من ذلك دعم "شجرة CSS الخفية" بشكل مشابه لمكوّنات ويب التي لا تدعم التصيير من جانب الخادم.
</syntaxhighlight>تُجمَّع عناصر styled-jsx (إضافة التنسيقات ضمن ملف jsx) لدعم تنسيقات CSS المعزولة والمحدودة (ضمن مكوّن معين مثلًا) والهدف من ذلك دعم "شجرة CSS الخفية" shadow CSS بشكل مشابه لمكوّنات ويب التي لا تدعم التصيير من جانب الخادم. يبدو المكوّن الذي يستخدم أسلوب styled-jsx كالتالي:<syntaxhighlight lang="javascript">
 
يبدو المكوّن الذي يستخدم <code>styled-jsx</code> كالتالي:<syntaxhighlight lang="javascript">
function HelloWorld() {
function HelloWorld() {
   return (
   return (
سطر 164: سطر 161:


export default HelloWorld
export default HelloWorld
</syntaxhighlight>
</syntaxhighlight>انظر توثيق [https://github.com/vercel/styled-jsx styled-jsx] لمزيد من التفاصيل.


== أسئلة متكررة ==
== أسئلة متكررة ==


=== هل تعمل CSS عندما تُعطَّل JavaScript؟ ===
=== هل تعمل تعليمات CSS عندما تُعطَّل JavaScript؟ ===
نعم، وستُحمّل شيفرة CSS في نسخة الإنتاج (<code>next start</code>).
نعم، وستُحمّل شيفرة CSS في نسخة الإنتاج (عند تنفيذ الأمر <code>next start</code>). لكننا نحتاج في مرحلة التطوير لتقديم أفضل تجربة عمل للمطورين عن طريق تقنية التحديث السريع [[Next.js/fast refresh|Fast Refresh]].
 
== انظر أيضًا ==
 
* [[Next.js/customizing postcss config|إعدادات مخصصة للمصرّف PostCSS في Next.js]]
 
== المصادر ==


لكننا نحتاج في مرحلة التطوير لتقديم أفضل تجربة عمل للمطورين عن طريق تقنية التحديث السريع Fast Refresh.
* الصفحة [https://nextjs.org/docs/basic-features/built-in-css-support Built-in CSS Support] من توثيق Next.js الرسمي.
[[تصنيف:Next.js|{{SUBPAGENAME}}]]
[[تصنيف:Next.js Basic Features|{{SUBPAGENAME}}]]

المراجعة الحالية بتاريخ 17:15، 3 يناير 2023

تتيح Next.js إدراج ملفات تنسيق CSS من خلال ملف JavaScript، وهذا ممكن لأن Next.js توسِّع مفهوم الإدراج import أكثر مما هو عليه في JavaScript.

إضافة تنسيقات CSS على عموم التطبيق

لإضافة ملف تنسيقات stylesheet إلى تطبيق، أدرج ملف CSS ضمن الملف pages/_app.js. ألق نظرة على ملف التنسيق التالي الذي يدعى styles.css:

body {
  font-family: 'SF Pro Text', 'SF Pro Icons', 'Helvetica Neue', 'Helvetica',
    'Arial', sans-serif;
  padding: 20px 20px 60px;
  max-width: 680px;
  margin: 0 auto;
}

أنشئ الملف pages/_app.js إن لم يكن موجودًا بعد، ثم أدرج الملف styles.css ضمنه باستخدام import:

import '../styles.css'

// الجديد `pages/_app.js` هذا التصدير الافتراضي مطلوب لملف
export default function MyApp({ Component, pageProps }) {
  return <Component {...pageProps} />
}

ستُطبق قواعد التنسيق التي يضمها الملف على جميع الصفحات والمكوّنات في تطبيقك. ونظرًا للطبيعة العامة لتنسيقات CSS ولتحاشي حصول أي تعارض في تطبيقها، أدرج هذه التنسيقات ضمن الملف pages/_app.js فقط.

يتيح لك التعبير عن التنسيقات بهذا الشكل في مرحلة التطوير إعادة تحميلها مباشرة بمجرد تعديلها، وبالتالي سيُحافظ التطبيق على حالته. وتُوضع جميع ملفات CSS تلقائيًا خلال مرحلة الإنتاج في ملف css. واحد مصغّر.

إدراج التنسيقات من المجلد node_modules

سمحت Next.js انطلاقًا من النسخة 9.5.4 إدراج ملف CSS من وحدات Node أو node_modules في أي مكان من تطبيقك. بينما لابد من إدراج ملفات CSS العامة مثل bootstrap أو nprogress ضمن الملف pages/_app.js. إليك مثالًا:

// pages/_app.js
import 'bootstrap/dist/css/bootstrap.css'

export default function MyApp({ Component, pageProps }) {
  return <Component {...pageProps} />
}

عليك إدراج تنسيقات CSS التي يحتاج إليها مكوِّن يؤمنه طرف آخر بالشكل التالي مثلًا:

// components/ExampleDialog.js
import { useState } from 'react'
import { Dialog } from '@reach/dialog'
import VisuallyHidden from '@reach/visually-hidden'
import '@reach/dialog/styles.css'

function ExampleDialog(props) {
  const [showDialog, setShowDialog] = useState(false)
  const open = () => setShowDialog(true)
  const close = () => setShowDialog(false)

  return (
    <div>
      <button onClick={open}>Open Dialog</button>
      <Dialog isOpen={showDialog} onDismiss={close}>
        <button className="close-button" onClick={close}>
          <VisuallyHidden>Close</VisuallyHidden>
          <span aria-hidden>×</span>
        </button>
        <p>Hello there. I am a dialog</p>
      </Dialog>
    </div>
  )
}

إضافة تنسيقات CSS على مستوى المكونات

تدعم Next.js وحدات CSS من خلال الصيغة التالية ‎[name].module.css في تسمية ملفات وحدات CSS. تغطي وحدات CSS تطبيق قواعد التنسيق محليًا وتلقائيًا عن طريق إنشاء أسماء فريدة للأصناف. يسمح ذلك بتطبيق نفس أصناف CSS في ملفات مختلفة دون أن يحدث أي تضارب، وهذا ما يجعل من هذه الوحدات الطريقة المثالية لإضافة تنسيقات على مستوى المكوّن. كما يمكن إدراج ملفات وحدات CSS في أي مكان من التطبيق.

لنأخذ على سبيل المثال المكوّن Button القابل لإعادة الإستخدام والموجود في المجلدcomponents/ ‎. لتطبيق وحدة CSS عليه، أنشئ الملف components/Button.module.css وضع فيه المحتوى التالي:

/* `.module.css` أو ملفات `.css` لا تقلق من التنازع الذي قد يحدث بين ملفات 
*/
.error {
  color: white;
  background-color: red;
}

أنشئ بعد ذلك الملف components/Button.js ثم أدرج واستخدم ملف CSS السابق:

import styles from './Button.module.css'

export function Button() {
  return (
    <button
      type="button"
      // كخاصية للكائن المُدرج "error" لاحظ كيف يمكن الوصول إلى الصنف 
      // `styles`
      className={styles.error}
    >
      Destroy
    </button>
  )
}

تُعد وحدات CSS ميزة اختيارية وتفُعّل فقط في الملفات التي تنتهي بالامتداد module.css.، كما تبقى طريقة إدراج التنسيقات النمطية من خلال العنصر <link> أو ملفات CSS العامة مدعومة أيضًا.

تُجمّع كل وحدات CSS تلقائيًا في مرحلة الإنتاج ضمن عدة ملفات css. مصغّرة ومنفصلة عن الشيفرة، وتمثل هذه الملفات مسارات التنفيذ المباشر في تطبيقك لتضمن تحميل الحد الأدنى من تنسيقات CSS لعرضه بالشكل المطلوب.

دعم امتداد sass في Next.js

تسمح Next.js باستخدام لغة Sass من خلال ملفات تحمل أحد الامتداديين scss. و sass. وبإمكانك باستخدام وحدات CSS إضافة تنسيقات Sass على مستوى المكوِّن من خلال الملفات التي تنتهي بأحد الامتداديين module.scss. أو module.sass. كما شرحنا آنفًا.

تأكد من تثبيت sass قبل أن تستفيد من الدعم المدمج له في Next.js:

npm install --save-dev sass

لهذه اللغة ميزات الدعم المدمج نفسها التي ناقشناها سابقًا لتنسيقات CSS.

ملاحظة: تدعم Next.js صيغتان قواعديتان مختلفتان ولكل منهما امتداده الخاص. إذ يتطلب منك استخدام اللاحقة scss. استخدام صياغة SCSS بينما يتطلب استخدام اللاحقة sass. استخدام الصياغة الإزاحية Sass. إن لم تكن متأكدًا من خياراتك، استخدم صياغة SCSS فهي مجموعة قواعد توّسع CSS وتشابهها ولا تتطلب منك أن تتعلم الصياغة الإزاحية Indented Syntax.

تخصيص خيارات Sass

بإمكانك تهيئة مصرِّف Sass -إن أردت- باستخدام الخاصية sassOptions في ملف التهيئة next.config.js. يمكنك مثلًا إضافة includePaths:

const path = require('path')

module.exports = {
  sassOptions: {
    includePaths: [path.join(__dirname, 'styles')],
  },
}

متغيرات Sass

تدعم Next.js متغيرات Sass المُصدَّرة من ملفات وحدات CSS. لاحظ على سبيل المثال كيف يُستخدم المتغير المُصدَّر primaryColor:

/* variables.module.scss */
$primary-color: #64FF00

:export {
  primaryColor: $primary-color
}
// pages/_app.js
import variables from '../styles/variables.module.scss'

export default function MyApp({ Component, pageProps }) {
  return (
    <Layout color={variables.primaryColor}>
      <Component {...pageProps} />
    </Layout>
  )
}

التنسيق بكتابة تعليمات CSS ضمن شيفرة JavaScript

بالإمكان الاستفادة من أية حلول تستخدم الصياغة CSS-in-JS أي كتابة تعليمات CSS ضمن شيفرة JavaScript وأبسطها التنسيق السطري:

function HiThere() {
  return <p style={{ color: 'red' }}>hi there</p>
}

export default HiThere

تُجمَّع عناصر styled-jsx (إضافة التنسيقات ضمن ملف jsx) لدعم تنسيقات CSS المعزولة والمحدودة (ضمن مكوّن معين مثلًا) والهدف من ذلك دعم "شجرة CSS الخفية" shadow CSS بشكل مشابه لمكوّنات ويب التي لا تدعم التصيير من جانب الخادم. يبدو المكوّن الذي يستخدم أسلوب styled-jsx كالتالي:

function HelloWorld() {
  return (
    <div>
      Hello world
      <p>scoped!</p>
      <style jsx>{`
        p {
          color: blue;
        }
        div {
          background: red;
        }
        @media (max-width: 600px) {
          div {
            background: blue;
          }
        }
      `}</style>
      <style global jsx>{`
        body {
          background: black;
        }
      `}</style>
    </div>
  )
}

export default HelloWorld

انظر توثيق styled-jsx لمزيد من التفاصيل.

أسئلة متكررة

هل تعمل تعليمات CSS عندما تُعطَّل JavaScript؟

نعم، وستُحمّل شيفرة CSS في نسخة الإنتاج (عند تنفيذ الأمر next start). لكننا نحتاج في مرحلة التطوير لتقديم أفضل تجربة عمل للمطورين عن طريق تقنية التحديث السريع Fast Refresh.

انظر أيضًا

المصادر