ReactのCSSスタイルについてお話しします
5664 ワード
Angular,Vueとは異なり,ReactはReactでどのようにスタイルの公式案を書くかはなく,コミュニティの多くの案に頼っている.コミュニティで提供されるシナリオは、CSS Modules、styled-components、styles jsxなど多くあります.
次に、これらのシナリオを詳しく説明します.これらのシナリオを話す前に、まずReactが公式に提供している構築ツールcreate-react-appが構築したプロジェクトでcssを使用する問題について説明します.
create-react-appで作成したプロジェクトをcssファイルに導入する問題
create-react-appを使用してプロジェクトを構築すると、index.js、index.css、App.jsなどのファイルがあり、問題を説明するためにApp 1.jsファイルを新規作成し、ファイルの内容を簡単に削除するためにいくつか変更しました.
index.css
たとえばコンポーネントAppの背景色を赤にしたい場合、index.cssではちょうどこのように設定されていますが、App 1の背景色も赤に変わります.
creat-react-appがプロジェクトを作成した後、importを直接使用してcssファイルを導入する問題について説明し、次にコミュニティで提供されるさまざまなシナリオについて説明します.
CSS Modules
CSS Modulesのコア
CSS Modulesのもっと詳しい紹介はチェン一峰先生のCSS Modulesの使い方のチュートリアルを参考にすることができます.
CSSのルールはグローバルであるため、どのコンポーネントのスタイルルールもページ全体に有効であり、多くの競合を引き起こす可能性があります.たとえば、私が2つのcssファイルを持っていて、それらの中のいくつかのスタイル名が同じであれば、上書きされます.簡単な解決策は、スタイルの名前を複雑にし、重複しないことですが、スタイルが多くなっても重複を避けることが難しく、名前が複雑になります.
CSS Modulesはこの問題を解決し、1つのコンポーネントに導入されたクラスは構築ツールによってコンパイルされた後、ユニークなハッシュ文字列になる.
次はAppコンポーネントです
このように、このクラスにはローカルドメインの概念があり、コンパイルされたハッシュ文字列の他のコンポーネントは知らないため、他のコンポーネントがこのindex.cssファイルを使用しないと、このクラスのスタイルに適用されません.
一般的には、
ローカルスタイルファイル
グローバルスタイルファイル
ネーミング方式
xxx.module.css
xxx.css
導入方式
import xxx from './xxx.mouule.css'
import './xxx.css'
使い方
huisiyuan
huisiyuan
styled-components
styled-components見名知義はスタイル付きコンポーネントである.
Reactのコンセプトの1つは
Styled Componentはreactのサードパーティライブラリであり、CSS in JSの優れた実践と代表であり、CSSをJSに書くことで、従来のCSSでは処理しにくい論理複雑、関数方法、多重化、干渉を避けることができる.
使用方法:
まずstyle-components,
次のコードでは、Divはスタイル付きコンポーネント(スタイル付きDiv)です.
styled-componentsは、コンポーネントのプロパティを取得し、スタイルを定義するときにいくつかの論理操作を行うこともできます.
styled jsx
見名知義はスタイル付きJSXで、一般的には次の3つの形式があります.
1)行内スタイル
行内スタイルは最も基本的な書き方で、HTMLに書かれている要素とのインラインスタイルの差は多くありませんが、設定されているスタイルはオブジェクトです.
次に、これらのシナリオを詳しく説明します.これらのシナリオを話す前に、まずReactが公式に提供している構築ツールcreate-react-appが構築したプロジェクトでcssを使用する問題について説明します.
create-react-appで作成したプロジェクトをcssファイルに導入する問題
create-react-appを使用してプロジェクトを構築すると、index.js、index.css、App.jsなどのファイルがあり、問題を説明するためにApp 1.jsファイルを新規作成し、ファイルの内容を簡単に削除するためにいくつか変更しました.
index.css
.huisiyuan {
background: red
}
index.js import App from './App';
import App1 from './App1';
import './index.css';
ReactDOM.render(
,
document.getElementById('root')
);
App.js import React, { Component } from 'react';
class App extends Component {
render() {
return App
}
}
export default App;
App1.js import React, { Component } from 'react';
class App1 extends Component {
render() {
return App1
}
}
export default App1;
index.jsに導入されたindex.cssはブラウザでheadラベルの下に表示されるstyleラベルの下にあるため、index.jsで使用されるコンポーネントはindex.cssのスタイルを使用することができます.たとえばコンポーネントAppの背景色を赤にしたい場合、index.cssではちょうどこのように設定されていますが、App 1の背景色も赤に変わります.
creat-react-appがプロジェクトを作成した後、importを直接使用してcssファイルを導入する問題について説明し、次にコミュニティで提供されるさまざまなシナリオについて説明します.
CSS Modules
CSS Modulesのコア
CSS Modulesのもっと詳しい紹介はチェン一峰先生のCSS Modulesの使い方のチュートリアルを参考にすることができます.
CSSのルールはグローバルであるため、どのコンポーネントのスタイルルールもページ全体に有効であり、多くの競合を引き起こす可能性があります.たとえば、私が2つのcssファイルを持っていて、それらの中のいくつかのスタイル名が同じであれば、上書きされます.簡単な解決策は、スタイルの名前を複雑にし、重複しないことですが、スタイルが多くなっても重複を避けることが難しく、名前が複雑になります.
CSS Modulesはこの問題を解決し、1つのコンポーネントに導入されたクラスは構築ツールによってコンパイルされた後、ユニークなハッシュ文字列になる.
次はAppコンポーネントです
import React, { Component } from 'react';
import xxx from 'index.css';
class App extends Component {
render() {
return App
}
}
export default App;
上記のcssファイルとは異なり、index.cssファイルはxxxオブジェクトに入力され、xxx.huisiyuan
はclassを表します..huisiyuan {
background: red;
}
構築ツールはxxx.huisiyuan
をハッシュ文字列にコンパイルし、同じindex.cssファイルの.huisiyuan
も同じハッシュ文字列にコンパイルし、このクラス名はユニークになります.このように、このクラスにはローカルドメインの概念があり、コンパイルされたハッシュ文字列の他のコンポーネントは知らないため、他のコンポーネントがこのindex.cssファイルを使用しないと、このクラスのスタイルに適用されません.
一般的には、
ローカルスタイルファイル
グローバルスタイルファイル
ネーミング方式
xxx.module.css
xxx.css
導入方式
import xxx from './xxx.mouule.css'
import './xxx.css'
使い方
huisiyuan
huisiyuan
styled-components
styled-components見名知義はスタイル付きコンポーネントである.
Reactのコンセプトの1つは
all in JS
で、styled-componentsはスタイルをコンポーネントに直接書き込み、スタイルのコンポーネントを得て、コンポーネントを呼び出すときにスタイルを持っています.Styled Componentはreactのサードパーティライブラリであり、CSS in JSの優れた実践と代表であり、CSSをJSに書くことで、従来のCSSでは処理しにくい論理複雑、関数方法、多重化、干渉を避けることができる.
使用方法:
まずstyle-components,
npm install style-components --save
を取り付ける.次のコードでは、Divはスタイル付きコンポーネント(スタイル付きDiv)です.
import React, { Component } from 'react';
import styled from 'styled-components';
const Div = styled.div`
color: red;
`;
class App extends Component {
render() {
return (
hello world
)
}
}
export default App;
右の図からstyled-componentsはdivにclassを自動的に追加したことがわかります.styled-componentsは、コンポーネントのプロパティを取得し、スタイルを定義するときにいくつかの論理操作を行うこともできます.
const Div1 = styled.div`
color: red;
${(props)=> props.big&&`
font-size: 72px
`}
`;
const Div2 = styled.div`
color: blue;
${(props)=> props.small&&`
font-size: 30px
`}
`;
class App extends Component {
render() {
return (
hello world
hello world
)
}
}
Div 1コンポーネントにbig属性がある場合、font-size: 72px
が設定され、結果は下図のようになります.styled jsx
見名知義はスタイル付きJSXで、一般的には次の3つの形式があります.
1)行内スタイル
行内スタイルは最も基本的な書き方で、HTMLに書かれている要素とのインラインスタイルの差は多くありませんが、設定されているスタイルはオブジェクトです.
hello
?
JSX JS , ,{style} JS 。 JS JSX , style , style 。
2)
, render style , , css 。
3)スタイルファイルのconst style = { color: red, background: blue } class App extends Components { render() { return (
hello) } }
はこれはCSS Modulesの のグローバルスタイルファイルの で、ここでもう って、 い は に で、スタイルファイルをimport を じて して、 はページの のすべてのコンポーネントがこのファイルの のスタイルを することができます.
App.cssApp.js.huisiyuan { color: red; background: blue; }
APP1.jsimport React, { Components } from 'react'; import './App.css'; import App1 from './App1'; class App extends Components { render() { return (
) } } App.jsにはApp.cssが されていますが、App 1.jsには・ されていませんが、App 1コンポーネントの では としてApp.cssのスタイルが でき、App 1コンポーネントのimport React, { Components } from 'react'; class App1 extends Components { render() { return (
hello) } }hello
にはApp.cssのスタイルが されます.
まとめ:
まとめた3つの は、CSS Modulesやstyled-componentsを して、 から さなdemoを るときにstyled jsxを する をお めします.
わったら、 なところがあれば してください.