SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

基礎からはじめるReact Native入門

React Nativeでアプリの見た目を整えよう~スタイルでコンポーネントを装飾する

基礎からはじめるReact Native入門 第6回

レイアウトと装飾

 さて、そろそろ個別のスタイルの解説に入りたいところですが、その前に、本記事におけるスタイルの区別について確認しておきましょう。これは筆者が独自に認識しているものなので、あまり一般的なものではありません。しかし、ここに認識の線を引いておいたほうが学習の助けになると信じて解説します。

 React Nativeのスタイルは、そのほとんどが大きく分けて「レイアウト」と「装飾」のどちらかに分類されます(図3)。

図3:レイアウト(左)と装飾(右)を区別する
図3:レイアウト(左)と装飾(右)を区別する

 レイアウトのためのスタイルは、コンポーネント同士の位置関係を調整し、画面内の適切な場所にコンポーネント配置するためのスタイルです。後述するFlexboxの各種記法や、marginpaddingといったものがこれにあたります。React Nativeにおける重要な特徴として、レイアウトのためのスタイルはほぼすべてのコンポーネントに指定できる点があります。

 一方の装飾のためのスタイルは、コンポーネント自身を変形・着色するためのスタイルです。色を変えたり、枠線を付けたりします。こちらはレイアウトのためのスタイルとは毛色が違っており、Textコンポーネントだけに使えるスタイルがあるため、注意が必要です。

 本記事で「レイアウト」や「装飾」といった言葉が出てきた際には、これらの特徴を意識しながら読んでください。

Viewを装飾する主なプロパティ

 それではまず、Viewコンポーネントを装飾するためのスタイルを見てみましょう。公式ドキュメントから抜粋します。

 数は多めですが、ほとんどは枠線を管理するためのものです。CSSには存在しないStartEndといった記述もありますが、これについては後述します。 

  • 枠線の太さに関するもの
    • borderWidth:すべての辺の太さを指定する
    • borderTopWidth:上辺の太さを指定する
    • borderBottomWidth:下辺の太さを指定する
    • borderLeftWidth:左辺の太さを指定する
    • borderRightWidth:右辺の太さを指定する
    • borderStartWidth:左辺(RTL環境では右辺)の太さを指定する
    • borderEndWidth:右辺(RTL環境では左辺)の太さを指定する
  • 枠線の角の丸みに関するもの
    • borderRadius:すべての角の丸みを指定する
    • borderTopLeftRadius:左上の角の丸みを指定する
    • borderTopRightRadius:右上の角の丸みを指定する
    • borderBottomLeftRadius:左下の角の丸みを指定する
    • borderBottomRightRadius:右下の角の丸みを指定する
    • borderTopStartRadius:左上(RTL環境では右上)の角の丸みを指定する
    • borderTopEndRadius:左上(RTL環境では右上)の角の丸みを指定する
    • borderBottomStartRadius:左下(RTL環境では右下)の角の丸みを指定する
    • borderBottomEndRadius:左下(RTL環境では右下)の角の丸みを指定する
  • 枠線の色に関するもの
    • borderColor:すべての辺の色を指定する
    • borderTopColor:上辺の色を指定する
    • borderLeftColor:左辺の色を指定する
    • borderRightColor:右辺の色を指定する
    • borderStartColor:左辺(RTL環境では右辺)の色を指定する
    • borderEndColor:右辺(RTL環境では左辺)の色を指定する
  • 枠線の形に関するもの
    • borderStyle:枠線を実線と破線のどちらで表示するかを指定する

 他にも、次のプロパティが利用できます。

  • backfaceVisibility:transform等で裏返したときに背面を見えるようにするかどうかを指定する
  • backgroundColor:背景色を指定する
  • opacity:不透明度を指定する

 プロパティの名前がキャメルケースに変わっていますが、CSSのものとほとんど使い方は同じです。

 React Native独自の指定方法として、上下左右の代わりにStartEndが指定されているものがあります。これは、AndroidやiOSが、アラビア語やヘブライ語のように右から左に向かって記述する言語をサポートするために用意された指定方法です。右から左ということで、RTL(Right-To-Left)の名前で呼ばれます。OSの表示設定が英語のように左から記述する(Left-To-Rightな)言語になっているときはStartが左、Endが右になりますし、RTLな言語ではStartが右、Endが左になります。中東地域でも使われるようなグローバルなアプリを作りたい場合には、覚えておくとよいでしょう。

影に関するプロパティはAndroid/iOSで別々に提供

 コンポーネントに影を付けるためのプロパティは、AndroidとiOSで別々のスタイルが用意されています。

  • Android向けのスタイル(ドキュメント
    • elevation:Viewを浮かばせる高さを指定する
  • iOS向けのスタイル(ドキュメント
    • shadowColor:影の色を指定する
    • shadowOffset:影のずらし幅を指定する
    • shadowOpacity:影の不透明度を指定する
    • shadowRadius:影の丸みを指定する

 React Nativeの対応が先行していたiOSでは細かく影の出し方を指定できるAPIが提供されていました。その一方で、Androidのデザイン仕様となったマテリアルデザインでは、Elevationという紙をどのくらい浮かせるかの観点でAPIが作られ、影そのものについては操作しないことになりました。そのため、React Nativeのスタイルにおいても統合されることはなく、別々に用意されることになったと思われます。

transform

 コンポーネントに回転・拡大縮小等の変形をさせるためのtransformも用意されています。少し形は違うものの、CSSのtransformと近い名前のプロパティを指定できます。公式ドキュメントにはいくつかの項目がありますが、現在ではtransformプロパティだけですべての操作ができるようです。

 実際に使用する場合は、リスト5のように、操作したい内容1つにつき1オブジェクトになるよう配列を作成します。

[リスト5]transformを使用する
const styles = StyleSheet.create({
  view: {
    transform: [
      { rotateX: '45deg' }, // X軸を45度回す
      { rotateZ: '0.785398rad' }, // Z軸を0.785398ラジアン回す
      { skewX: '125deg' }, // X軸方向に125度傾斜する
    ]
  },
}

 X軸とZ軸についてViewを回転させ、さらにViewそのものを少し傾斜させました。

 これを縦に並べたViewに適用すると、図4のように変形させることができます。

図4:Viewにtransformを適用する
図4:Viewにtransformを適用する

 ここまでできるのは面白いですね。いろいろと応用が利きそうです。

次のページ
Textを装飾する主なプロパティ

この記事は参考になりましたか?

基礎からはじめるReact Native入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 中川 幸哉(ナカガワ ユキヤ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11864 2019/12/17 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー