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
单位 不写单位(逻辑像素) px、em、rem、% 等
样式级联 不支持 支持
CSS 选择器 不支持 支持
样式复用 StyleSheet.create()、数组合并 class、继承、层叠、选择器

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

相关推荐
传奇开心果编程1 小时前
【现代声明式UI学与练】第7课 组件通信——父传子、子传父、跨层级通信、状态提升与 Context
学习·flutter·react native·ui·swiftui·android jetpack
记得开心一点嘛8 小时前
Trellora:基于 Electron、React 和本地知识库的 AI 知识工作台
人工智能·react.js·electron
500849 小时前
React Native for OpenHarmony 实战:三方库 react-native-url-polyfill 的鸿蒙化适配指南
javascript·react native·react.js·性能优化·electron·harmonyos
传奇开心果编程10 小时前
【现代声明式UI学与练】第9课 性能优化——渲染优化、列表优化、内存优化、启动优化
学习·flutter·react native·ui·性能优化·swiftui·android jetpack
5008413 小时前
React Native for OpenHarmony 实战:三方库 react-native-volume-control 的鸿蒙化适配指南
javascript·react native·react.js·electron·harmonyos
薛一半13 小时前
React-Redux三重优化实战揭秘
javascript·vue.js·react.js
薛一半2 天前
React-Redux核心原理与容器组件实战
前端·javascript·react.js
FungLeo2 天前
成为全栈·Next.js 网站前台篇·评论系统:叠楼、回复、删除与内容审核如何落到前台
react.js·内容审核·next.js·评论系统·树形数据·成为全栈
Alice-YUE3 天前
React 渲染机制速通:Render 树、Fiber 树与更新调度
前端·react.js·前端框架·react·fiber·前端性能·渲染机制
liangshanbo12153 天前
React Fiber:从“解决卡顿”到完整更新链路
前端·javascript·react.js