SHOEISHA iD

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

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

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

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

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

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

widthとheightでサイズを決める

 具体的なスタイルの解説に移っていきましょう。まずは、コンポーネントが自身の大きさを明示するためのプロパティであるwidthheightについて解説します。コンポーネントの幅を指定するのがwidthで、高さを決めるのがheightです。

 React Nativeのスタイルでは、リスト1のように指定します。

[リスト1]widthとheightを指定したコンポーネント
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';

export const WidthHeight = () => (
  <View style={styles.container}>
    <Text>200 x 100</Text>
  </View>
);

const styles = StyleSheet.create({
  container: {
    // (1) 幅200, 高さ100のコンポーネントにする
    width: 200,
    height: 100,
    // 見やすいように枠線をつける
    borderWidth: StyleSheet.hairlineWidth,
    borderColor: '#bbb'
  }
});

 (1)で指定したwidthheightが幅と高さの指定です。前回も解説したとおり、React Nativeではほとんどの場合、長さの指定に単位をつけません。リスト1のコンポーネントを表示すると、図3の見た目になります。

図3:widthとheightを指定した場合の表示
図3:widthとheightを指定した場合の表示

 図3はiPhoneで表示しているので、widthとheightコンポーネントの大きさは、幅が200pt、高さが100ptになりました。

widthとheightに指定できる値

 数値以外にもwidthheightに指定できるものがあります。公式ドキュメントによれば、CSSドキュメントのwidthheightに準拠しており、emなどの単位はサポートしていない、とのことです。ドキュメントをうのみにする分にはautoなどの指定もできそうですが、筆者が実際に動作を確認した範囲で完動するのは次の2パターンでした。

  • 数値を明示する(例:height: 200
  • %で割合を表記する(例:width: '75%'

 この2つがあれば基本的には困らないので、使い分けていきましょう。

最小・最大の幅と高さを指定する

 CSSと同様に、幅と高さの最大値・最小値を指定するためのプロパティも用意されています。伸縮はさせたいが限度は設けたい、という場合に役立ちます。

  • minWidth:幅の最小値を指定する
  • maxWidth:幅の最大値を指定する
  • minHeight:高さの最小値を指定する
  • maxHeight:高さの最小値を指定する

 指定できる値は、前項のwidthheightと同様です。

marginとpaddingで間を空ける

 隙間を空けるためのスタイルとして、marginとpaddingがサポートされています。最も単純な使い方としては、リスト2の形です。

[リスト2]marginとpadding
// 略
export const MarginPadding = () => (
  <View style={styles.container}>
    <Text>コンテンツ</Text>
  </View>
);

const styles = StyleSheet.create({
  container: {
    margin: 72,
    padding: 16,
    // 略
  }
});

 見た目は以下のようになります(図4)。

図4
図4

 境界線はつけてありますが、少し分かりづらいので、色づけしてみましょう(図5)。

図5
図5

 CSSと同様に、境界の内側を広げるのがpadding、外側と距離を取るのがmarginです。CSSと共通しているものとして、次のプロパティが用意されています。

  • marginの指定
    • margin:すべての方向のmarginを指定する
    • marginTop:上方向のmarginを指定する
    • marginBottom:下方向のmarginを指定する
    • marginLeft:左方向のmarginを指定する
    • marginRight:右方向のmarginを指定する
  • paddingの指定
    • padding:すべての方向のmarginを指定する
    • paddingTop:上方向のmarginを指定する
    • paddingBottom:下方向のmarginを指定する
    • paddingLeft:左方向のmarginを指定する
    • paddingRight:右方向のmarginを指定する

 React Nativeで独自に、次のプロパティが用意されています。

  • marginの指定
    • marginStart:左方向(RTL環境では右方向)のmarginを指定する
    • marginEnd:右方向(RTL環境では左方向)のmarginを指定する
    • marginVertical:上下方向のmarginを指定する
    • marginHorizontal:左右方向のmarginを指定する
  • paddingの指定
    • paddingStart:左方向(RTL環境では右方向)のmarginを指定する
    • paddingEnd:右方向(RTL環境では左方向)のmarginを指定する
    • paddingVertical:上下方向のmarginを指定する
    • paddingHorizontal:左右方向のmarginを指定する

 RTL対応のStartとEndについては前回も触れたとおりで、端末側の言語設定によって右と左が入れ替わります。marginとpaddingのために独自に用意されたものとしてmarginVerticalなどの、縦方向や横方向の指定を一度にできるプロパティがあります。

marginとpaddingに指定できる値

 marginやpaddingに指定できる値は、おおむねwidthとheightに準拠しています。ただ、'auto'が指定できる点は、CSSに慣れ親しんだ方にはうれしいかもしれません。

  • 数値を明示する(例:padding: 16
  • %で割合を表記する(例:marginHorizontal: '10%'
  • 'auto'(例:marginLeft: 'auto'

 CSSとの違いとして、CSSではpadding: 5% 10%;といった形で指定できた「ショートハンド(省略)記法」が存在しません。React Nativeでmarginやpaddingを指定する際には、リスト3のように、個別に記述する必要があります。

[リスト3]CSSのショートハンドをReact Nativeで書き直す場合
// CSS
padding: 5% 10%;

// React Native
paddingVertical: '5%',
paddingHorizontal: '10%',

 VerticalとHorizontalの指定があるおかげで、実用上はそこまで気になりませんが、CSS経験者の方は少し煩わしく感じるかもしれません。筆者は、ショートハンドの記述順がなかなか覚えられずに毎回ドキュメントを引き直してしまうので、ショートハンドが現れないことは好ましいと思っています。

次のページ
Flexboxでレイアウトする

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

基礎からはじめる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/11957 2020/02/17 11:00

イベント

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

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

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

メールバックナンバー