LiSMO techの小谷です。
今回はReact.jsのスタイリング方法についてです!
今回の記事では、Reactの書き方や考え方をある程度知っている前提で記事を書きます。React.jsについて、あまり慣れていない方や復習したい方は以下の記事も書いたので、参考にしてみて下さい。
また、今回紹介する実装例はすべてcreate-react-app(3.4.0)で作成したものを元に実装してます。
webpackのcss-loaderを利用したものです。loaderは他にもscss loaderなどもあり、scssとかも利用出来るように設定可能です。
create-react-appのバージョンが2.0以降のもので作成した場合は初めからCSS Moduleが利用出来るような形になっているようです。
HTMLに別ファイルのCSSを呼んで画面のスタイリングするように、JSに別ファイルのCSSを呼んで画面のスタイリングします。CSSファイルを切り分けて実装出来るので、Reactを使わない従来のHTMLに別ファイルのCSSを呼んで画面のスタイリングすることになれている方にはおすすめです。
また、この方法だとCSSをピュアなCSSで書けるものよい点です。後に紹介するJSファイル内にスタイルを書く方法ですと、プロパティ名をキャメルケースで書く必要がありますので、Reactに慣れていない方にはよりいっそうこのCSS Moduleはいいかもしれませんね。
①xxx.module.cssを用意し、中に適当にスタイルを定義する
.test {
background-color: red;
}
②用意したxxx.module.cssを使用したいjsファイルでインポートする
import styles from './xxx.module.css';
※stylesでなくも名前は任意のもので大丈夫です。
③当てはめる要素のClassName属性に定義した名前をセット
何らかのライブラリを使用して買います。主なライブラリとしては以下のようなものがあります。
以下はmaterial-ui(5.5.1)を使った例です。書き方は公式のこのページを参考にしてます。
①material-uiをインストール
npm install @mui/material
②使用するjsファイルでstyledをインポートする
import { styled } from '@mui/system';
③styledを使ってコンポーネントを定義する
const MyComponent = styled('div')({
backgroundColor: 'aliceblue',
});
※ここでのcssのプロパティ名はキャメルケースで書きます。
④定義したコンポーネントを配置する
Styled div
これをメインのスタイルの書き方とするのはよくないとされています。ですが、ちょっとした条件で動的にスタイル切り分けたい箇所で書くのはそこそこ見かけますね。
①jsファイルにスタイル定義を用意
const divStyle = {
color: 'blue',
backgroundImage: 'url(' + imgUrl + ')',
};
②用意した定義を要素のstyle属性にセット
;
この例のように画像のURLをAPIで取ってきた値や別で定義したものをあてはめるとかもできますね。
①要素に直接書く
;
この例のように三項演算子を使って、持っているpropsの状態に応じて動的にスタイルを変えることもできますね。
フレームワークを使ってスタイリングする方法です。
使用するフレームワークによるかもしれませんが、大体のものはフレームワークが用意してくれたclassName名props名をコンポーネントにつけていくことでスタイリングできるものとなっています。
主なライブラリとしては以下のものがあります。
npm install react-bootstrap bootstrap
import 'bootstrap/dist/css/bootstrap.min.css';
import { Button } from 'react-bootstrap';
今回はReactのスタイリング方法について、簡単な実装例を交えて紹介していきました。
最後に、まとめとして、それぞれのメリット・デメリットを上げて終わりにしようと思います!
jsファイルとcssファイルを分けて書くこと出来て分かりやすい。ピュアなCSSで書ける。
jsの変数をcssに渡すことが出来ない。
jsの変数をcssに入れることが出来る。
jsファイルにcssを書くので一つのファイルが少し長くなったり、ごちゃごちゃする。
ライブラリを入れなくても手軽に実装できる。
各要素の書いていく方法なので、要素が読み辛くなる。タグにpropsもあるならなおさら。
NEXTGATE LiSMOtechでは中小企業を中心にブランディング・WEBマーケティングを活用したWEB戦略を提供しています。
企業課題・問題に関するご相談、WEBサイト制作やグラフィックデザイン制作のクリエイティブに関するご相談やご質問、お見積りなどお気軽にお問い合わせください。
平日10:00〜19:00
© NEXTGATE LiSMOtech All rights reserved