Oh MyUtils

React Native阴影生成器 - iOS和Android阴影样式 在线工具

为React Native生成跨平台阴影样式,实时双平台预览。支持iOS shadowProps、Android elevation和boxShadow(RN 0.76+)— 100%客户端处理。

通过单个滑块基于Material Design高程自动计算所有阴影属性

计算值

offsetWidth:0offsetHeight:2opacity:0.27radius:3elevation:4

阴影预设

预览设置

px
px
px

预览

iOS

Android

生成的代码

const styles = StyleSheet.create({
  shadow: {
    shadowColor: '#000000',
    shadowOffset: {
      width: 0,
      height: 2,
    },
    shadowOpacity: 0.27,
    shadowRadius: 3,
    elevation: 4,
  },
});

常见问题

什么是React Native阴影生成器?

React Native阴影生成器是一个在线工具,用于为React Native应用创建特定平台的阴影样式。由于React Native在iOS(shadowColor、shadowOffset、shadowOpacity、shadowRadius)和Android(elevation)上使用不同的阴影API,此工具可以为两个平台生成正确的属性,并提供视觉预览,让您准确看到每个设备上阴影的效果。

如何使用此工具?

在快速模式(单一深度滑块)或高级模式(单独属性控制)之间选择。使用滑块或数字输入调整阴影参数。可选择除默认黑色以外的阴影颜色。在iOS和Android模拟预览中实时查看阴影效果。选择您偏好的代码格式(StyleSheet、内联、Platform.select或boxShadow),点击复制将生成的代码粘贴到React Native项目中。

我的数据安全吗?会离开我的浏览器吗?

是的。此工具完全在您的浏览器中使用客户端JavaScript运行。没有任何阴影配置、代码输出或数据会发送到任何服务器。您的工作完全保留在您的设备上。

为什么React Native中iOS和Android的阴影看起来不同?

React Native在每个平台上使用根本不同的阴影渲染引擎。iOS使用Core Animation阴影属性,直接映射到CALayer。Android使用Material Design的elevation属性,根据单个数值深度创建预定义的阴影。这意味着跨平台的像素级完美阴影匹配本质上是有限的,但此工具可帮助您尽可能接近。

React Native 0.76+中的boxShadow属性是什么?

从React Native 0.76开始,New Architecture引入了boxShadow作为符合Web规范的阴影属性,可在iOS和Android上使用。它使用与CSS box-shadow相同的语法,对Web开发者来说很熟悉。此工具可以为使用React Native 0.76或更高版本并启用New Architecture的项目生成boxShadow输出。

elevation和iOS阴影属性有什么区别?

elevation仅限Android使用,接受单个数字(0-24),代表Material Design高程。它自动确定阴影外观,包括偏移、模糊和不透明度。iOS阴影属性提供精细控制:shadowColor设置颜色,shadowOffset控制方向,shadowOpacity控制透明度,shadowRadius控制模糊。通常需要同时设置两者来实现跨平台阴影。

如何选择合适的阴影深度?

参考Material Design高程指南:0-2用于静态卡片和列表项,3-6用于浮动按钮、Snackbar和FAB,8-12用于模态框、底部表单和菜单,16-24用于导航抽屉和侧边栏。使用快速模式中的预设来获取常见阴影深度。

代码示例

// React Native shadow style generator
function generateShadowStyle(depth, color = '#000000') {
  const shadowOpacity = 0.2 + (depth / 24) * 0.4;
  const shadowRadius = Math.max(1, Math.round(depth * 0.8));
  const shadowOffsetHeight = Math.max(1, Math.round(depth * 0.5));

  return {
    shadowColor: color,
    shadowOffset: {
      width: 0,
      height: shadowOffsetHeight,
    },
    shadowOpacity: Math.round(shadowOpacity * 100) / 100,
    shadowRadius: shadowRadius,
    elevation: depth,
  };
}

// Platform-specific shadow
import { Platform } from 'react-native';

function createPlatformShadow(depth, color = '#000000') {
  const shadow = generateShadowStyle(depth, color);
  return Platform.select({
    ios: {
      shadowColor: shadow.shadowColor,
      shadowOffset: shadow.shadowOffset,
      shadowOpacity: shadow.shadowOpacity,
      shadowRadius: shadow.shadowRadius,
    },
    android: {
      elevation: shadow.elevation,
      shadowColor: shadow.shadowColor,
    },
  });
}

// Usage
const cardShadow = generateShadowStyle(4);
console.log(cardShadow);
// { shadowColor: '#000000', shadowOffset: { width: 0, height: 2 },
//   shadowOpacity: 0.27, shadowRadius: 3, elevation: 4 }

相关工具