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 的层叠和复杂选择器。

相关推荐
张元清8 小时前
React useDisclosure Hook:管理模态框和抽屉的打开关闭状态 (2026)
javascript·react.js
学高数就犯困8 小时前
React:常见的性能优化手段
前端·react.js
濮水大叔8 小时前
为什么 AI 最擅长 React/Next.js,却很少看到真正好用的 Next.js 开源项目?
react.js·node.js·next.js
Cloud_bread11 小时前
从ReAct到自主闭环:Agentic Coding核心执行引擎的技术演进
前端·react.js·前端框架
Darling噜啦啦13 小时前
React 组件进化论:从状态混乱到 UI = fn(props) 的三次重构
react.js
无人生还14 小时前
从 Vue3 到 React · 快速上手系列第 10 篇:路由
前端·vue.js·react.js
deepThinking14 小时前
从项目里回看 React 生态:React 18/19 新特性、我们踩过的坑,以及那些"用旧写法写出的新思想
react.js
FogLetter14 小时前
我真的写了个“诈尸式”缓存组件:手撕React KeepAlive
前端·react.js·面试
LaughingZhu15 小时前
Product Hunt 每日热榜 | 2026-08-02
前端·神经网络·react.js·搜索引擎·前端框架
无人生还2 天前
从 Vue3 到 React · 快速上手系列第 9 篇:自定义 Hook(对标 Composables)
前端·vue.js·react.js