Submit Search
React で CSS カプセル化の可能性を考える
Oct 16, 2016
3 likes
4,264 views
Yutaro Miyazaki
2016/10/15 秋の JavaScript 祭 in mixi でのスライドです。 https://vwxyutarooo.github.io/slide-js-fes_161015/#/
Read more
1 of 73
Download now
Download to read offline
Ad
Recommended
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁
Yutaro Miyazaki
Vue.js Tokyo v-meetup #5 LT の資料です https://vuejs-meetup.connpass.com/event/65442/
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
Shohei Okada
勉強会「マーケティング事業の開発現場でリアルに使われるJS事情」の発表資料です。 https://connpass.com/event/68449/
Creators'night#12今井
Creators'night#12今井
Daisuke Imai
Creators'night#12のLT資料です。
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
Yasuhito Yabe
「14th Knock!」 第14回Knock! Knock! 勉強会(2013年 4月 19日、B-nest静岡市産学交流センターにて) http://knock3.hamnaly.com/vol14/
Creators'night#13 tech#2今井
Creators'night#13 tech#2今井
Daisuke Imai
Creators'night#13 tech#2のLT資料です。
HTML5 on ASP.NET
HTML5 on ASP.NET
Fujio Kojima
2011-08-27 Tech Party 2011 in 北陸 https://atnd.org/events/18440
osc-nagoya
osc-nagoya
joeswebhosting
openstack presentation slide. Install openstack(icehouse) on ubuntu14.
Vue.js 2.0を試してみた
Vue.js 2.0を試してみた
Toshiro Shimizu
Vue.js: Revolutionary Front-end #1 http://abeja-innovation-meetup.connpass.com/event/38214/
SVG MANIAX Ver.2 - Mars vanilla
SVG MANIAX Ver.2 - Mars vanilla
Naoki Matsuda
「SVG MANIAX - CSS Nite After dark7」 http://www.slideshare.net/ssuser99dc16/svg-maniaxcss-nite-after-dark7-svgmatsuda を再編したものです。いろいろ追加もしました。
introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)
Ryuma Tsukano
Marionette.jsの概要
スマホにおけるWebGL入門
スマホにおけるWebGL入門
Yohta Kanke
スマホにおけるWebGL入門 菅家 洋太 CyberAgent, Inc. -------------------------------- ・WebGLとは ・普及状況 ・セキュリティー問題 ・スマホWebGL対応状況 ・スマホにおけるWebGLの活用方法 ・まとめ
HTML5 と SVG で考える、これからの画像アクセシビリティ
HTML5 と SVG で考える、これからの画像アクセシビリティ
Naoki Matsuda
HTML5とinline SVGで、画像の「中身」をアクセシブルにすることができます。
何が変わった JavaFX 2.0
何が変わった JavaFX 2.0
Yuichi Sakuraba
Japan JavaFX User Group Seminar on 10 Dec. 2011.
チュートリアルではじめるVue.js
チュートリアルではじめるVue.js
小川 昌吾
社内教育用のVue.jsチュートリアル
大規模なJavaScript開発の話
大規模なJavaScript開発の話
terurou
大なごやJS#3(2012/07/21)で使ったスライドです。割と「当たり前のこと」をまとめなおしただけな感じです。
Vue Router + Vuex
Vue Router + Vuex
Kei Yagi
勉強資料に作ったVue.js関連ライブラリ(ルーティング制御を行うVue Router と 状態管理ができる Vuex)の使い方
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Akira Inoue
モテる JavaScript
モテる JavaScript
Osamu Monoe
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
normalian
CLR/H 69回目勉強会でお話しさせて頂いた、ASP.NET MVC での TDD 基礎見直しです。あじゅらーもASP.NET MVC な人も是非ご一読あれ
実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで
Ryuma Tsukano
2014/1/22 gooラボopen tech talkで話したBackbone.jsとMarionette.jsの話です。
Vue.js入門
Vue.js入門
Takuya Sato
Vue.jsについての紹介と、1.0の変更点について
はじめてのVue.js
はじめてのVue.js
Kei Yagi
Vue.js勉強会で使った資料
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
Kiyoshi SATOH
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
Atsushi Tadokoro
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方
Kei Yagi
勉強資料に作ったVue.jsの基礎領域(インスタンス内オプション、ディレクティブ、コンポーネント)とVue CLIの使い方、参考情報について
Start React with Browserify
Start React with Browserify
Muyuu Fujita
春のJavaScript祭 in GMO Yours の資料ですよー
HTML5のCanvas入門 - Img画像を編集してみよう -
HTML5のCanvas入門 - Img画像を編集してみよう -
Toshio Ehara
HTML5+α @福岡 - 第21回 2013/12/18(水) 19:30 LT資料
なんでCSSすぐ死んでしまうん
なんでCSSすぐ死んでしまうん
Hayato Mizuno
Frontrend in Kanazawa -(2014年10月18日開催)で使用したスライドです。 http://labo.dmm.com/frontrend/
Backbone.jsとSASSでモジュールをつくった話
Backbone.jsとSASSでモジュールをつくった話
Yosuke Doke
HTML5 minutes! 2014/09/26
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
Hiroaki Wakamatsu
Ad
More Related Content
What's hot
(19)
SVG MANIAX Ver.2 - Mars vanilla
SVG MANIAX Ver.2 - Mars vanilla
Naoki Matsuda
「SVG MANIAX - CSS Nite After dark7」 http://www.slideshare.net/ssuser99dc16/svg-maniaxcss-nite-after-dark7-svgmatsuda を再編したものです。いろいろ追加もしました。
introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)
Ryuma Tsukano
Marionette.jsの概要
スマホにおけるWebGL入門
スマホにおけるWebGL入門
Yohta Kanke
スマホにおけるWebGL入門 菅家 洋太 CyberAgent, Inc. -------------------------------- ・WebGLとは ・普及状況 ・セキュリティー問題 ・スマホWebGL対応状況 ・スマホにおけるWebGLの活用方法 ・まとめ
HTML5 と SVG で考える、これからの画像アクセシビリティ
HTML5 と SVG で考える、これからの画像アクセシビリティ
Naoki Matsuda
HTML5とinline SVGで、画像の「中身」をアクセシブルにすることができます。
何が変わった JavaFX 2.0
何が変わった JavaFX 2.0
Yuichi Sakuraba
Japan JavaFX User Group Seminar on 10 Dec. 2011.
チュートリアルではじめるVue.js
チュートリアルではじめるVue.js
小川 昌吾
社内教育用のVue.jsチュートリアル
大規模なJavaScript開発の話
大規模なJavaScript開発の話
terurou
大なごやJS#3(2012/07/21)で使ったスライドです。割と「当たり前のこと」をまとめなおしただけな感じです。
Vue Router + Vuex
Vue Router + Vuex
Kei Yagi
勉強資料に作ったVue.js関連ライブラリ(ルーティング制御を行うVue Router と 状態管理ができる Vuex)の使い方
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Akira Inoue
モテる JavaScript
モテる JavaScript
Osamu Monoe
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
normalian
CLR/H 69回目勉強会でお話しさせて頂いた、ASP.NET MVC での TDD 基礎見直しです。あじゅらーもASP.NET MVC な人も是非ご一読あれ
実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで
Ryuma Tsukano
2014/1/22 gooラボopen tech talkで話したBackbone.jsとMarionette.jsの話です。
Vue.js入門
Vue.js入門
Takuya Sato
Vue.jsについての紹介と、1.0の変更点について
はじめてのVue.js
はじめてのVue.js
Kei Yagi
Vue.js勉強会で使った資料
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
Kiyoshi SATOH
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
Atsushi Tadokoro
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方
Kei Yagi
勉強資料に作ったVue.jsの基礎領域(インスタンス内オプション、ディレクティブ、コンポーネント)とVue CLIの使い方、参考情報について
Start React with Browserify
Start React with Browserify
Muyuu Fujita
春のJavaScript祭 in GMO Yours の資料ですよー
HTML5のCanvas入門 - Img画像を編集してみよう -
HTML5のCanvas入門 - Img画像を編集してみよう -
Toshio Ehara
HTML5+α @福岡 - 第21回 2013/12/18(水) 19:30 LT資料
SVG MANIAX Ver.2 - Mars vanilla
SVG MANIAX Ver.2 - Mars vanilla
Naoki Matsuda
introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)
Ryuma Tsukano
スマホにおけるWebGL入門
スマホにおけるWebGL入門
Yohta Kanke
HTML5 と SVG で考える、これからの画像アクセシビリティ
HTML5 と SVG で考える、これからの画像アクセシビリティ
Naoki Matsuda
何が変わった JavaFX 2.0
何が変わった JavaFX 2.0
Yuichi Sakuraba
チュートリアルではじめるVue.js
チュートリアルではじめるVue.js
小川 昌吾
大規模なJavaScript開発の話
大規模なJavaScript開発の話
terurou
Vue Router + Vuex
Vue Router + Vuex
Kei Yagi
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Akira Inoue
モテる JavaScript
モテる JavaScript
Osamu Monoe
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
normalian
実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで
Ryuma Tsukano
Vue.js入門
Vue.js入門
Takuya Sato
はじめてのVue.js
はじめてのVue.js
Kei Yagi
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
Kiyoshi SATOH
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
Atsushi Tadokoro
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方
Kei Yagi
Start React with Browserify
Start React with Browserify
Muyuu Fujita
HTML5のCanvas入門 - Img画像を編集してみよう -
HTML5のCanvas入門 - Img画像を編集してみよう -
Toshio Ehara
Similar to React で CSS カプセル化の可能性を考える
(20)
なんでCSSすぐ死んでしまうん
なんでCSSすぐ死んでしまうん
Hayato Mizuno
Frontrend in Kanazawa -(2014年10月18日開催)で使用したスライドです。 http://labo.dmm.com/frontrend/
Backbone.jsとSASSでモジュールをつくった話
Backbone.jsとSASSでモジュールをつくった話
Yosuke Doke
HTML5 minutes! 2014/09/26
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
Hiroaki Wakamatsu
CSS Design and Programming
CSS Design and Programming
Taku AMANO
Firefox OSアプリ 「ModeView」
Firefox OSアプリ 「ModeView」
Hideki Akiba
「さわってみよう Firefox OS」発表作品
ネストを覚えた人のためのSassの便利な使い方
ネストを覚えた人のためのSassの便利な使い方
Hiroki Shibata
Sassに少し慣れた人のためのSassの便利な使い方の解説。
First sass
First sass
Toshiaki Sasaki
2013年1月11日に行った社内勉強会用スライド。『初めてのSass』的な内容です。
compassで簡単! CSS3を手軽に利用する
compassで簡単! CSS3を手軽に利用する
Kazuya Hiruma
COLOPL FrontNightで登壇した際の資料です。compassを使ってCSS3を手軽に使う方法を紹介しています。
CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩
CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩
Chieko Aihara
WordBench Totyo 2011でのスライド
WordBenchTokyo-20111126
WordBenchTokyo-20111126
webourgeon
WordBench東京でお話させていただいた時のスライド資料です。
Less - first step
Less - first step
Kohki Nakashima
HTML5+α初心者勉強会でしゃべったです。
Css preprocessorの始めかた
Css preprocessorの始めかた
Hiroki Shibata
前知識がない人のためのSassの始めかたです。
WebデザイナーのためのSass/Compass入門
WebデザイナーのためのSass/Compass入門
Koji Ishimoto
HTML/CSSコーディングを取り巻くWeb開発環境は日々進化しています。Sass/LESS/StylusなどのCSSプリプロセッサと呼ばれるCSSをより便利に速く記述できるフレームワークが登場し、Webデザイナーにもプログラミング的な知識を求められるようになってきました。 この授業ではその中でもSassとその拡張フレームワークであるCompassを取り上げて解説します。Sass/Compassを使えば、面倒な記述、タイピングを少なくすることができ、コーディング速度を高めることができます。また、急なデザイン仕様の変更にも変数や継承と言ったSassの機能を使えば柔軟に対応することができます。 ただSassを使用するにあたって、いわゆる『黒い画面』、ターミナルを使って通常のCSSにコンパイル(変換)する作業を伴ったり、変数、ミックスイン、継承といったプログラミング的な概念も必要になってきます。 なにごとも新しいものを取り入れることは苦労を伴いますが、私自身、転職を機にWebデザイナーからWebデベロッパーに職種が変わりました。その時に戸惑いながらも自分なりのペースでSass/Compassを導入していった経験をこの授業を通して共有できれば幸いです。
WebデザイナーのためのSass/Compass入門 先生:石本 光司
WebデザイナーのためのSass/Compass入門 先生:石本 光司
schoowebcampus
ーーーーーーーーーーーーーーーーーーーーーーー schoo WEB-campusは「WEBに誕生した、学校の新しいカタチ」。 WEB生放送の授業を無料で配信しています。 ▼こちらから授業に参加すると、先生への質問や、ユーザーとのチャット、資料の拡大表示等が可能です。 https://schoo.jp/class/228/room ーーーーーーーーーーーーーーーーーーーーーーー
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
takezoe
2010/6/13 Java Cloud Meeting Tokyo 2010 x Seasar Conference 2010
CSS3 Design Recipe
CSS3 Design Recipe
Kazunari Hara
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
Hayato Mizuno
リッチなWebアプリケーションに対するニーズの増加に伴い、JavaScriptで十分なパフォーマンスを担保することが難しくなってきています。とりわけ、スマートフォンのような非力なデバイスでは一層シビアなチューニングが求められるでしょう。本セッションでは、もっともポピュラーなJavaScriptライブラリである「jQuery」を中心とした、いくつかのパフォーマンス解決のためのヒントについてご紹介させていただきます。 http://frontrend.github.com/events/04/#pocotan001
What's Sketch.app
What's Sketch.app
littlebustersreply
Ps / Ai / Fw / Sketch ガチンコバトル勉強会 in 岡山で発表した、Sketch.appのスライドです。発表時はでも中心だったので、それなりに分かるよう加筆しています。
実践Sass 前編
実践Sass 前編
Azusa Tomita
HTML5 Conference 2012で使用したスライドです。
マークアップ講座 02 CSS
マークアップ講座 02 CSS
eiji sekiya
Mu seminor2014 02
なんでCSSすぐ死んでしまうん
なんでCSSすぐ死んでしまうん
Hayato Mizuno
Backbone.jsとSASSでモジュールをつくった話
Backbone.jsとSASSでモジュールをつくった話
Yosuke Doke
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
Hiroaki Wakamatsu
CSS Design and Programming
CSS Design and Programming
Taku AMANO
Firefox OSアプリ 「ModeView」
Firefox OSアプリ 「ModeView」
Hideki Akiba
ネストを覚えた人のためのSassの便利な使い方
ネストを覚えた人のためのSassの便利な使い方
Hiroki Shibata
First sass
First sass
Toshiaki Sasaki
compassで簡単! CSS3を手軽に利用する
compassで簡単! CSS3を手軽に利用する
Kazuya Hiruma
CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩
CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩
Chieko Aihara
WordBenchTokyo-20111126
WordBenchTokyo-20111126
webourgeon
Less - first step
Less - first step
Kohki Nakashima
Css preprocessorの始めかた
Css preprocessorの始めかた
Hiroki Shibata
WebデザイナーのためのSass/Compass入門
WebデザイナーのためのSass/Compass入門
Koji Ishimoto
WebデザイナーのためのSass/Compass入門 先生:石本 光司
WebデザイナーのためのSass/Compass入門 先生:石本 光司
schoowebcampus
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
takezoe
CSS3 Design Recipe
CSS3 Design Recipe
Kazunari Hara
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
Hayato Mizuno
What's Sketch.app
What's Sketch.app
littlebustersreply
実践Sass 前編
実践Sass 前編
Azusa Tomita
マークアップ講座 02 CSS
マークアップ講座 02 CSS
eiji sekiya
Ad
React で CSS カプセル化の可能性を考える
1.
秋のJavaScript 祭in mixi React
で CSS カプセル化の可能性を考える
2.
Yutaro Miyazaki (@vwxyutarooo) ニート フリーランス(Web制作) 会社員(フロントエンド)
7.
React Redux Riot Angular
8.
CSS カプセル化 全てがグローバルスコープ 有効範囲を制限する ScopedCSS
9.
BEM・SMACSS・OOCSS ネームスペースで解決してきた
10.
フロントエンド意外お断り
11.
そんなCSSもWebComponentsライクな JSフレームワークの台頭により変化の兆しが
12.
ShadowDOM(ShadowBoundary) <div> <style> .title { color:
#444; } </style> <h3 class="title">Item name</h3> </div>
13.
ScopedCSS <div> <style scoped> .title {
color: #444; } </style> <h3 class="title">Item name</h3> </div>
14.
encapsulation:ViewEncapsulation.Emulated encapsulation:ViewEncapsulation.Native
15.
Emulated @Component({ selector: 'my-app', encapsulation: ViewEncapsulation.Emulated, styles:
[` .test { padding: 10px; } `], template: ` <div class="test">Test</div> ` }) <body> <my-app _nghost-cmy-1=""> <div _ngcontent-cmy-1="" class="test">Test</div> </my-app> </body> .test[_ngcontent-cmy-1] { padding: 10px; }
16.
Native =ShadowDOM <body> <my-app> ▾ #shadow-root <style> .test {
padding: 10px; } </style> <div class="test"> <div>Test</div> </div> </my-app> </body>
17.
<my-tag> <h3>{ opts.title }</h3> <style
scoped> :scope { display: block; border: 2px } h3 { color: blue } </style> </my-tag> ↓ <style> my-tag { display: block; border: 2px } my-tag h3 { color: blue } </style>
18.
CustomElement風に擬似カプセル化
19.
vue‑loader
20.
<style scoped> .example { color:
red; } </style> <template> <div class="example">hi</div> </template> ↓ <style> .example[_v-f3f3eg9] { color: red; } </style> <template> <div class="example" _v-f3f3eg9>hi</div> </template>
21.
ReactでCSSカプセル化の可能性
22.
前提認識 ネイティブなShadowDOMによるカプセル化は一旦忘れる
23.
前提認識 全てのクラス・スタイルをカプセル化する必要はない
24.
前提認識 グローバルのままがいい Layout要素 Utility カプセル化したい Module要素 コンポーネントで完結するもの
25.
可能性その1 CSSinJS
26.
CSS in JS const
styles = { root: { color: color || avatar.color, backgroundColor: backgroundColor || avatar.backgroundColor, display: 'inline-flex', alignItems: 'center', justifyContent: 'center', fontSize: size / 2, borderRadius: '50%', height: size, width: size } }; return( <div style={ styles.root }></div> );
27.
採用している React Component MaterialUI ReactToolbox reactjs/react‑modal
28.
ない
29.
ない
30.
ない
31.
ない
32.
ない
33.
ない
34.
ない
35.
ない
36.
ない
37.
ない
38.
キモい
39.
嫌だ
40.
ない
41.
ごめん
42.
言いすぎた
43.
CSS in JS
の問題 擬似クラス(:hover,:before,:after) メディアクエリ CSSアニメーション シンタックス
44.
CSS in JS
系リポジトリ cssinjs/jss cssinjs/react‑jss FormidableLabs/radium martinandert/react‑inline smyte/jsxstyle
45.
var Radium =
require('radium'); var React = require('react'); var color = require('color'); @Radium class Button extends React.Component { render() { return ( <button style={[ styles.base, styles[this.props.kind] ]}></button> ); } } var styles = { base: { color: '#fff', ':hover': { background: color('#0074d9').lighten(0.2).hexString() } }, ... };
46.
アップサイド シンタックス意外の問題は解決された Styleの一部はPropで渡せる 考える必要なし
47.
ダウンサイド CSSじゃない→ 導入がハード ロックインし過ぎ カスケーディングしないだけ
48.
(因みに) こうなった @charset 'utf-8'; @import
'core/config'; .datepicker, .timepicker { font-size: 12px !important; display: block !important; overflow: hidden; width: 100px !important; height: auto !important; border-width: 0 !important; > div { &:first-child { line-height: inherit !important; width: auto !important; height: auto !important; } } input { line-height: 2 !important; height: 36px !important; padding: 0 10px !important; text-align: center; color: $colorFont !important; border: 1px solid #ccc !important; background-color: #fff !important; }
49.
可能性その2 CSSModule
50.
特徴 CSSをCSSとして書ける CSSクラスに一意のハッシュを自動で付与
51.
/* volume-slide.scss */ .slider
{ position: relative; height: 100%; &__track { position: absolute; top: 0; right: 0; bottom: 0; left: 0; width: 100%; margin: auto 0; background-color: rgba(255,255,255, .2); } &__handle { position: absolute; top: 0; bottom: 0; left: 0; margin: auto; cursor: pointer; border-radius: 50px; background-color: #fff; &:before { position: absolute; top: 0; bottom: 0;
52.
// volume-slider.react.js import styles
from './volume-slider.scss'; render: <slider className={ styles.slider }> <div className={ styles.slider__track + ' ' + styles.black }></div> <div className={ classnames(styles.slider__handle, styles.black) }></div </slider> 出力: <slider class="volume-slider__slider___2qmBE"> <div class="volume-slider__slider__track___1Okwk volume-slider__black___3-0A8" <div class="volume-slider__slider__handle___X_x8Q volume-slider__black___3-0A8" </slider> ファイル名__クラス名__5桁のハッシュ
53.
アップサイド ファイル分割さえしていれば移行はスムーズ SMACSSのModuleだけを置き換え css‑moduleやめるときも特に何もしなくていい
54.
ダウンサイド WebpackとかBrowserifyの設定が必要 配布側では使えない
55.
Webpack { test: /.css$/, loaders: [ 'style', 'css?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5] 'postcss-loader', ] } Browserify modularify postcss‑modules
56.
可能性その2.5 ReactCSSModule
57.
React CSS Modules CSSModulesだとnotenough
58.
CSS Modules は キャメルケースのクラス名に制限 styleオブジェクトの利用 グローバル,ローカルスコープのクラスの分別 未定義のCSSクラス参照時(エラー出ない)
59.
React CSS Modules
は クラス名はスネークケースもいけるよ classNameにstyleオブジェクト付けなくていいよ グローバル,ローカルスコープのクラスが一目瞭然だよ 定義してないクラスにエラー吐くよ
60.
// volume-slider.react.js import CSSModules
from 'react-css-modules'; import styles from './volume-slider.scss'; render: <div styleName="slider"> <div styleName="slider__track"></div> <div styleName="slider__handle"> </div> </div> export default CSSModules(VolumeSlider, styles); 出力: <div class="volume-slider__slider___2qmBE"> <div class="volume-slider__slider__track___1Okwk volume-slider__black___3-0A8" <div class="volume-slider__slider__handle___X_x8Q"></div> </div>
61.
グローバルなクラス=className render: <div className="global-css-class" styleName="slider"> <div
styleName="slider__track"></div> <div styleName="slider__handle"> </div> </div>
62.
ES7Decoratorがおすすめ @CSSModules(styles, { allowMultiple:
true }) export default class VolumeSlider extends React.Component {}
63.
アップサイド いいかも ES7のDecorator使えば綺麗
64.
ダウンサイド 依存関係が1個増える
65.
可能性その3 CustomElement風
67.
結論 Reactには無い
68.
ただし
69.
コンポーネントを配布する側では使いたい
70.
import Select from
'react-select'; // Be sure to include styles at some point, probably during your bootstrapping import 'react-select/dist/react-select.css'; react‑select・react‑spinner・react‑slider
71.
Reactでやろうとする場合、loaderから =現状だとscss側で対応
72.
ダウンサイド 外部からの影響は受ける グローバルがクリーンである必要 多少ユニークなクラス名が必要 HTMLUnknownElement...?
73.
まとめ: React で
CSS カプセル化は... 実用レベルであり 配布する時はCustomElement風 末端での利用ならばreact-css-module
Download