RN 样式特点:Flex 布局默认、没有像素单位、样式不能级联

React Native(RN)的样式系统与 Web CSS 有不少区别,你提到的三点都是 RN 的核心特点:

1. Flex 布局默认(Default Flexbox)

RN 默认采用 Flexbox 进行布局,不需要写 display: flex

css 复制代码
<View style={{
  flex: 1,
  flexDirection: 'column',
}}>
  <View style={{ flex: 1 }} />
  <View style={{ flex: 2 }} />
</View>

特点:

  • 默认就是 display: flex

  • 默认主轴方向是 column(纵向) ,而 Web CSS 默认是 row

  • 常用属性:

    • flex
    • flexDirection
    • justifyContent
    • alignItems
    • alignSelf
    • flexWrap

例如:

css 复制代码
<View style={{
  flexDirection: 'row',
  justifyContent: 'space-between',
  alignItems: 'center',
}}>

2. 没有像素单位(No px)

RN 中所有尺寸都不写单位

例如:

php 复制代码
const styles = StyleSheet.create({
  box: {
    width: 100,
    height: 50,
    marginTop: 20,
    fontSize: 16,
  },
});

而不是:

css 复制代码
width: 100px;

原因:

RN 使用的是逻辑像素(Density-independent Pixels,dp) ,框架会根据不同设备的屏幕密度自动进行适配,因此无需写 px

例如:

less 复制代码
padding: 10
margin: 15
borderRadius: 8

都是合法写法。


3. 样式不能级联(No Cascading)

RN 没有 CSS 的层叠(Cascade)和继承机制

例如 Web:

xml 复制代码
<div class="parent">
    <p>Hello</p>
</div>
css 复制代码
.parent {
    color: red;
}

子元素 <p> 会继承颜色。

但是 RN:

xml 复制代码
<View style={{ backgroundColor: 'red' }}>
    <Text>Hello</Text>
</View>

Text 不会自动继承 大多数样式(只有少数文本相关属性在嵌套 Text 中会继承)。

必须显式写:

scss 复制代码
<Text style={{ color: 'red' }}>
    Hello
</Text>

也没有:

  • .box .title
  • #id
  • div p
  • :hover
  • :before
  • @media

这些 CSS 选择器和规则。

RN 的样式是直接绑定到组件上的:

ini 复制代码
<Text style={styles.title}>

样式组合方式

RN 推荐使用数组组合样式:

scss 复制代码
<Text style={[styles.title, styles.active]}>
    Hello
</Text>

后面的样式会覆盖前面的同名属性,相当于:

复制代码
{
  ...styles.title,
  ...styles.active
}

总结

特点 React Native Web CSS
默认布局 Flexbox(display: flex 默认开启) Block 布局,需要写 display: flex
默认主轴 column row
单位 不写单位(逻辑像素) pxemrem%
样式级联 不支持 支持
CSS 选择器 不支持 支持
样式复用 StyleSheet.create()、数组合并 class、继承、层叠、选择器

这三点可以概括为:RN 默认使用 Flexbox(纵向布局),样式值使用无单位的逻辑像素,样式仅作用于当前组件,不支持 CSS 的层叠和复杂选择器。

相关推荐
白雾茫茫丶3 小时前
Vibecoding 一个主题切换动画库:13 种揭幕方式
前端·vue.js·react.js
西瓜太郎4994 小时前
别再手算 Token 成本:用 React 状态机做一个可追溯的模型费用计算器
react.js·typescript
右耳朵猫AI8 小时前
Web前端周刊2026W37 | Shopify 转原生、React 编译 Rust 化、Vitest 5.0、Rslib 1.0
前端·javascript·react.js·typescript·node.js
csj509 小时前
前端基础之《React(13)—表单绑定、列表渲染》
前端·react.js
csj509 小时前
前端基础之《React(12)—条件渲染》
前端·react.js
晚安日记wanna1 天前
SSR 为什么不适合登录态从水合冲突到缓存串号
前端·react.js·面试
嵩风抚1 天前
一款HK银行APP的业务+技术
android·flutter·react native·html5
liangshanbo12152 天前
React useEffect 与 useLayoutEffect 面试题整理
前端·javascript·react.js
liangshanbo12152 天前
React useState 函数式更新面试题整理
前端·react.js·前端框架
杉氧2 天前
RN 性能调优指南:重渲染(Re-renders)控制与长列表(FlatList)优化
android·前端·react native