styled-jsx 「妥協なしの完全な CSS in JSX」

さらに唯一の心の拠り所であった文香の風俗落ちも目の当たりにしたことで辰也の元々脆かった家族観は完全に壊されてしまった でも母親も文香も男根支配を受けているのは生きていくための妥協点であり今あるバランスが崩れぬための重しだからであり、それを壊れたと感じているのは実のところ辰也だけで
転職は結婚相手を探すのと同じなんだって。完全無欠な人なんていないから、どこまで妥協するかだね。結婚して豹変するのもいるけどね。 会社も同じ。お腹痛い。
同棲、生活習慣やギャップの摺り合わせ云々は聞くけれど、お互いの妥協や協調、折衝能力が完全なプライベート空間でも通用するか確認できるのはでかいメリットだよなぁ..
なぜ僕は、あえて完全協調路線をとらなかったのか。簡単な話で、既存の政党はすべてなんらかの既得権益と結びついています。だから、何かを変えるときには必ずどこかから反発が出る。行政側があらゆる反発にすべて妥協してしまうなら、それは協調とはいわず「馴れ合い」です。
私たちは、反革命に毛の先まで毒されている。生まれ落ちた時から、反革命の教育を受けてきたからだ。反革命は、日常の何気ない仕草や、立ち居振る舞いなど、些細なところに現れる。自己革命をなさなければ、完全なる革命戦士になることはできない。そこには妥協は許されない。
少し妥協したらいくらでもモテるのに声を大にして『モテない!』と言う。 どんだけ理想が高いのだ。 現実を見て、自分のレベルに合った人と仲良くしよう。 ちなみに私は極限まで妥協してるけどモテる兆しが完全に皆無だぜ!(*ノω・*)テヘ(つまり私のレベルは最低だッッ)
80センチくらいあるすっごい大きい傘買おうとしたら完全に馬鹿っぽいっていわれたから75くらいで妥協してやろう
レッグ完全に余り物の妥協ポジじゃないですか
ベストソング、個人の嗜好だけなら完全に涙頃なんだけど絶対少数派だし だったらひめたんの君僕に投票したい 妥協ではないよね
高卒のゴミにはなりないくないから大学には行ったけど完全に妥協やねんなーまあ面白そうやしええけど

React で CSS を使うには styled-components や CSS Modules などの方法があります。

僕は React は修行中の身で styled-components をちょっとかじったくらいなのですが、最近何かの記事で styled-jsx というものを見て勉強中の今だからこそ試してみよう!と思いたちました。

ちょうどパワポカラオケ用のWebアプリで React を使っていたのでこのプロジェクトで試しました。

タイトルの「妥協なしの完全な CSS in JSX」はリポジトリの説明文「Full CSS support for JSX without compromises」の意訳です。

この記事は紹介程度のものなので詳しくはREADMEをご覧ください。

どんなの?

HyperNowZEIT プロダクトです。

コードはREADMEより。英語は意訳してます。

export default () => (
  <div>
    <p>この p タグはスタイルが適用されるよ :)</p>

    { /*子 <Component /> 内部の p タグには適用されない */ }

    <style jsx>{`
      p {
        color: red;
      }
    `}</style>
  </div>
)

コンポーネントの中の jsx 属性をつけた style タグにCSSを書いていく感じですね。
Vue や Shadow DOM の CSS の書き方に似てていいですね!
styled-components のようにスタイリングのために余計なコンポーネントを作る必要もなくなります。

機能

READMEのFeaturesより

  • パフォーマンスに影響しない完全なCSSのサポート
  • 実行時のサイズは3kb (gzipした状態で, 元は12kb)
  • 完全なセレクタ、アニメーション、キーフレームの隔離
  • 組み込みのCSSベンダープレフィックス
  • 早く、最小限で効率的なCSSトランジション高性能ランタイム
  • SSR以外の高パフォーマンスな実行時CSS注入
  • ソースマップ
  • 動的CSSとテーマのサポート
  • プラグインを使ったCSSの処理

使い方

インストール

npmの場合
npm i -S styled-jsx
yarnの場合
yarn add styled-jsx

設定

.babelrcに以下の設定を追記します。

.babelrc
{
  "plugins": [
    "styled-jsx/babel"
  ]
}

完了です!

注:

Create React Appを使用する場合は eject する必要があります。
eject すると package.json"babel"フィールドに Babel の設定があるのでそこに追記してください。

package.json(”babel”だけ抜粋)
  "babel": {
    "presets": [
      "react-app"
    ],
    "plugins": [
      "styled-jsx/babel"
    ]
  },

仕組み

styled-jsx は Babel プラグインでJSX内のクラスを被らないものに変えて、CSSのセレクタもそれに合わせています。

.wrapper → .wrapper.jsx-XXX (XXXはクラスごとに一意の数字)
img → img.jsx-XXX

使ってみた感想

  • やはり<style>で書けるのはきれいで気持ちいい。
  • サードパーティのコンポーネントを使うがちょい汚くなる
  • <style jsx>{ がリンターやフォーマッタに設定によっては引っかかる(自分はignoreしてる)
  • 日本語の情報が全く無いのがつらかった。英語もまだ多いとは言えない……。
  • react-transition-group の CSSTransition がうまく動かない?(自分の書き方が悪いだけ? うまいやり方があればコメントやTwitterで教えてください!)

最後に

QiitaのJSXシンタックスハイライト……

[紹介元] CSSタグが付けられた新着投稿 – Qiita styled-jsx 「妥協なしの完全な CSS in JSX」

  • コメント

    1. 匿名希望
      2018/01/17(水) 14:31:35

      さらに唯一の心の拠り所であった文香の風俗落ちも目の当たりにしたことで辰也の元々脆かった家族観は完全に壊されてしまった でも母親も文香も男根支配を受けているのは生きていくための妥協点であり今あるバランスが崩れぬための重しだからであり、それを壊れたと感じているのは実のところ辰也だけで

    2. 匿名希望
      2018/01/17(水) 14:31:35

      転職は結婚相手を探すのと同じなんだって。完全無欠な人なんていないから、どこまで妥協するかだね。結婚して豹変するのもいるけどね。
      会社も同じ。お腹痛い。

    3. 匿名希望
      2018/01/17(水) 14:31:35

      同棲、生活習慣やギャップの摺り合わせ云々は聞くけれど、お互いの妥協や協調、折衝能力が完全なプライベート空間でも通用するか確認できるのはでかいメリットだよなぁ..

    4. 匿名希望
      2018/01/17(水) 14:31:35

      なぜ僕は、あえて完全協調路線をとらなかったのか。簡単な話で、既存の政党はすべてなんらかの既得権益と結びついています。だから、何かを変えるときには必ずどこかから反発が出る。行政側があらゆる反発にすべて妥協してしまうなら、それは協調とはいわず「馴れ合い」です。

    5. 匿名希望
      2018/01/22(月) 20:54:27

      ベストソング、個人の嗜好だけなら完全に涙頃なんだけど絶対少数派だし
      だったらひめたんの君僕に投票したい
      妥協ではないよね

    記事に戻る

関連記事