[Next.js] CSS
CSS-IN-JS
看起來 css-in-js似乎是 React的主流寫法,最多人使用 styled-component
也有人反對使用 css-in-js的寫法:
Stop using CSS in JavaScript for web development
作者的理由是,styled-component 的優點被過度神話,他被強調的優點其實 css就已經做的很好(甚至更好),文章裡有很大的篇幅列點一一舉反例證明 css本身就可以達到同樣的目的。作者認為 css-in-js唯一的優勢是「跨平台」的支援更好。
import CSS
載入CSS檔的規則:
- 全域 css檔必須在 pages/_app.js 檔案中引入(其它地方引入會報錯)
- Component level檔案要以 .module.(css|scss|sass) 命名,可以在任意模組中引入
- Component level檔案已經內建了 scope 功能,每個class將分配一個唯一id,不用擔心命名衝突
參考官方文件:Built-In CSS Support
因為使用上還是會有些限制,尤其是在使用 SCSS及 Mixins會有些困難,網路上介紹的套件:
@zeit/next-sass:解決全域性和模組化問題
sass-resources-loader:解決全域性變數和 mixin 問題
介紹網頁(再找時間研究)
延伸閱讀
Component-level scss
import styles from './<MyComponent>.module.scss>';
使用方式
<TheComponent className={styles.someclassselector} />
經過我的測試這樣是吃不到樣式的…
import './<MyComponent>.module.scss>';
<TheComponent className="someclassselector" />
巢狀(nested) scss的使用方式
// scss
.classname{
.childname{
}
}
// jsx
<Grid className={css.classname}>
<Typography className={css.childname}>
</Typography>
</Grid>