Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CSS Module・CSS in JS抗争の過去と現在

defunty
April 25, 2021

CSS Module・CSS in JS抗争の過去と現在

社内でのLT資料を外部向けに編集したものです。

defunty

April 25, 2021

Transcript

23 slides
  1. 前置き React ベースで話をします ですがReact の知識は必要ないです CSS Module には⾊々な解釈があります 設計的な意味の概念 Shadow

    DOM でのモジュール化(CSS Scoping Module ) ライブラリの名前(css-modules ) Webpack でのモジュール化 (css-loader )<- 以下これを指す CSS Module ‧CSS in JS 抗争の過去と現在 2
  2. 本スライドのトピック React でのスタイリング What is CSS Module? What is CSS

    in JS? CSS Module vs CSS in JS それぞれのテストについて 個⼈的所感 CSS Module ‧CSS in JS 抗争の過去と現在 3
  3. React 公式ドキュメントでの書き⽅ # className というprops を渡す render() { return <span

    className="menu navigation-menu">Menu</span> } # state やprops に応じて動的にclassName を変更させる render() { let className = 'menu'; if (this.props.isActive) { className += ' menu-active'; } return <span className={className}>Menu</span> } 引⽤:https://reactjs.org/docs/faq-styling.html CSS Module ‧CSS in JS 抗争の過去と現在 5
  4. 通常はグローバルなCSS の参照をscoped にする /* style.css */ .className { color: green;

    } // JS 側でCSS を読み込む import styles from "./style.css"; // import { className } from "./style.css"; element.innerHTML = '<div class="' + styles.className + '">'; CSS Module ‧CSS in JS 抗争の過去と現在 7
  5. // ビルド時、scoped に書き直されたCSS ファイルを出⼒する // 出⼒されるCSS ファイルのコード .xxx_yyy_zzz_className { color:

    green; } 引⽤:https://qiita.com/Quramy/items/a5d8967cdbd1b8575130 CSS Module ‧CSS in JS 抗争の過去と現在 8
  6. What is CSS in JS? CSS Module ‧CSS in JS

    抗争の過去と現在 10
  7. const Text = styled.div` color: white, background: black ` <Text>Hello

    CSS-in-JS</Text> // Component (JS ファイル)にCSS を埋め込むことができ、JS のランタイムで解釈(展開)される <style> .hash136s21 { background-color: black; color: white; } </style> <p class="hash136s21">Hello CSS-in-JS</p> 引⽤:https://mkai.hateblo.jp/entry/2018/08/25/135439 CSS Module ‧CSS in JS 抗争の過去と現在 12
  8. // コンポーネントのフィールド値からロジカルにスタイリングできる const Title = styles.h1` padding: 20px; background-color: #222;

    text-align: center; color: white; font-size: 1.5em; ${props => props.secondary && css` background-color: #fff; color: #000; padding: 10px; font-size: 1em; `} `; 引⽤:https://dev.to/alexsergey/css-modules-vs-css-in-js-who-wins-3n25 CSS Module ‧CSS in JS 抗争の過去と現在 13
  9. React 公式の⾒解 What is CSS-in-JS? “CSS-in-JS” refers to a pattern

    where CSS is composed using JavaScript instead of defined in external files. Note that this functionality is not a part of React, but provided by third-party libraries. React does not have an opinion about how styles are defined; if in doubt, a good starting point is to define your styles in a separate *.css file as usual and refer to them using className. 「使いたければ使えば。迷ってるんなら普通にclassName でやってね」 引⽤:https://reactjs.org/docs/faq-styling.html CSS Module ‧CSS in JS 抗争の過去と現在 14
  10. CSS Module vs CSS in JS CSS Module ‧CSS in

    JS 抗争の過去と現在 16
  11. 2017/2/12 CSS Modules vs Styled Components - Hashnode 「学習コストの差」 2017/5/9

    SPA におけるCSS について、ひとつの解(追記あり) - エンジニアをリングする 「JS とCSS で値共有できる」 2017/6/15 Web サイト開発にCSS in JavaScript を使うのはやめよう | POSTD 「CSS in JS の神話(誤解)」 CSS Module ‧CSS in JS 抗争の過去と現在 18
  12. 2019/3/14 css-modules を⽌めようとしている話(具体的な解決編) - saneyuki_s log 「import の順序やディレクトリ構造などからcascading 順序が変わるのつらい」 2020/2/28

    css-loader のdeprecated ⽰唆 2020/3/11 styled-components (CSS in JS )をやめた理由と、不完全なCSS Modules を愛する⽅ 法 - Qiita 「開発ツールの依存性解決つらい」 2020/6/25 styled-components の採⽤と既存資産を捨てた理由 - Cybozu Inside Out | サイボウズエ ンジニアのブログ 「視認性悪くなりそう」 CSS Module ‧CSS in JS 抗争の過去と現在 19
  13. 2020/12/1 Sass から CSS Modules 、そして styled-components に乗り換えた話|⾷べログ フロ ントエンドエンジニアブログ|

    note 「デザイナーさんと作業分担しやすい」 2021/3/11 CSS Modules vs CSS-in-JS. Who wins? - DEV Community 「それぞれのメリット/ デメリット」 2021/4/9 Real-world CSS vs. CSS-in-JS performance comparison - Tomas Pustelnik's personal website 「styled-components とlinaria の速度⽐較」 CSS Module ‧CSS in JS 抗争の過去と現在 20
  14. それぞれのテストについて CSS Modules をStorybook で適⽤するために必要なwebpack の設定 | MK Dev 【React

    】Jest でSnapshot テストをしたいならCSS Modules をやめてCSS-in-JS に 切り替えよう | LaptrinhX テストツールによって相性がある? 実際に扱っていないので要調査 CSS Module ‧CSS in JS 抗争の過去と現在 21
  15. 個⼈的所感 CSS in JS 開発環境が既存のCSS とは別世界にある チームに学習コストを要求する テストがしやすい? メンバーのポジション‧レベル‧モチベーションから考慮 CSS

    Module Next.js がサポートしている間はどうにかなるのでは CSS もしくはJS に慣れていない⼈を含んだチーム向け CSS in JS よりはハードルが低そう CSS Module ‧CSS in JS 抗争の過去と現在 22

More Decks by defunty

Other Decks in Programming