React Native で要素に影をつける2021/09/29

React Native で要素に影をつける

React Native でアプリを作る際に、要素に影をつける時の指定方法とその属性の解説です。

StyleSheet を使って簡単に影を表現できますが、OS で実装が異なるのでその部分についてのメモです。 とはいえ簡単に実装できるので、一度やってみたら簡単に覚えられるはずです。

ドキュメント

公式のドキュメントにも詳細書いてあります。

https://reactnative.dev/docs/shadow-props

OS ごとに影の Style の指定方法が異なる部分は要注意です。 異なる OS の指定については無視されるので、OS を指定しての Style 分岐は必要なく両方指定しておけば問題ありません。

iOS の場合

要素に渡せる Style Props として以下のものが用意されています。

shadowColor

影の色を指定できます。web で指定する時の box-shadowcolor プロパティにあたるものです。

const styles = StyleSheet.create({
  button: {
    shadowColor: "#333",
  },
});

shadowOffset

影のオフセットを指定できます。 影の位置みたいなものですが、どの方向に伸びるのかという指定になります。 width が横方向、height が縦方向です。マイナスの値を指定できます。

web で指定する時の box-shadowoffset-x, offset-y プロパティにあたるものです。

const styles = StyleSheet.create({
  button: {
    shadowOffset: { width: 4, height: 4 },
  },
});

shadowOpacity

影の不透明度を指定できます。 shadowColor にて不透明度を指定するのと同じです。両方で指定した場合掛け合わせた数値が表示に反映されます。

const styles = StyleSheet.create({
  button: {
    shadowOpacity: 2,
  },
});

shadowRadius

影のぼかしの大きさを指定できます。 0 を指定した場合はぼかしのないくっきりした影、大きい値を指定するほどぼかしが強くなります。

web で指定する時の box-shadowblur-radius プロパティにあたるものです。

const styles = StyleSheet.create({
  button: {
    shadowRadius: 4,
  },
});

Android の場合

Android の場合はelevation を使います。 web でいう z-index も同時に指定されます。

const styles = StyleSheet.create({
  button: {
    elevation: 4,
  },
});

React Native での影の表現を試せる Web ページを自作しました

上記実際にアプリ作って試せばすぐわかるのですが、簡単に影のStyleを調べたい時があったので、Web 上で React Native の影の表現を試せるページを自作しました。

React Native U-tools / React Native Shadow Simulator

React Native Web で作っているので、React Native のコードが Web の表現に置き換えられて表示されてます。 完全にアプリのものと一致するわけではないですが、影に関するパラメータの挙動確認に役立っています。

おわりに

Web の CSS と似た形での指定になるのでわかりやすいです。この辺が React Native のいいところですね。

OS によって変えないといけない部分は少し厄介ですが、そこさえ理解しておけばいろんな表現ができます。

  • このエントリーをはてなブックマークに追加