Skip to content

跨端样式

本节提供 Mpx RN 环境下的样式开发完整说明,涵盖样式语法、处理机制和属性支持。

目录概览

  • 样式处理机制:编译时和运行时的样式转换处理
  • 基础语法:CSS 选择器、样式单位、色值格式的支持说明
  • 样式继承:文本样式在 RN 环境下的继承规则和平台差异
  • 增强功能:简写属性、CSS 函数(var()calc()env())等 Mpx 增强支持
  • 属性参考:详细的样式属性支持列表和使用说明

平台差异背景

RN 样式属性和 Web/小程序中 CSS 样式属性是相交关系:

  • RN 独有属性tintColorwritingDirection 等,CSS 不支持
  • CSS 独有属性clip-pathanimationtransition 等,RN 不支持

因此,在跨平台开发时:

  1. 优先使用交集属性:尽量使用两边都支持的样式属性
  2. 框架抹平差异:Mpx 内部对 RN 样式进行了部分抹平处理

样式处理机制

Mpx 框架在样式处理方面的工作分为两大类:

编译时的 class 类样式转化

  • ✅ 属性名转驼峰
  • ✅ 单位的校验和对齐
  • ✅ 过滤 RN 不支持的属性和属性值
  • ✅ 简写转换
  • ✅ 样式属性差异转换和拉齐

运行时的 style 样式处理

  • ✅ 属性名转驼峰
  • ✅ 单位的计算和处理
  • ✅ 100% 计算
  • ✅ CSS 函数处理:env()calc()var()

CSS 选择器

RN 环境下仅支持单类选择器page选择器:host选择器,不支持类名组合选择器,不过逗号组合的选择器本质上还是单类选择器,是可以支持的。

css
/* ✅ 支持的选择器 */
.classname {
  color: red;
}

.classA, .classB {
  color: red;
}

page {
   color: red
}

:host {
   color: red
}

/* ❌ 不支持的选择器 */
view, text {
  color: red;
}

.classA .classB {
  color: red;
}

样式单位

Mpx 转 RN 支持以下单位,部分单位在特定情况下存在使用限制。

数值类型单位

单位支持情况特殊说明
%✅ 支持百分比单位参考 百分比单位说明
px✅ 支持绝对像素单位
rpx✅ 支持响应式像素,根据屏幕宽度动态计算
vh✅ 支持相对于视口的高度
vw✅ 支持相对视口的宽度

vh 单位使用注意

  • 问题:使用系统默认导航栏时,vh 的计算基准可能会发生变化

    • 页面首次加载:100vh = 屏幕总高度
    • 状态更新后:100vh = 屏幕高度 - 导航栏高度
  • 影响:可能导致布局在运行时突然变化

  • 建议:如需使用 vh 单位,推荐配合自定义导航栏使用,以确保计算基准始终一致

百分比单位说明

RN 原生较多属性不支持百分比,或对百分比的支持存在 bug(如 font-sizetranslate 等),但这些属性在编写 Web/小程序代码时使用较多,所以框架进行了抹平支持。

以下属性在 Mpx 输出 RN 时专门进行了百分比单位的适配:

百分比计算规则

font-size

font-size 百分比计算依赖开发者传入的 parent-font-size 属性:

html
<text parent-font-size="16" style="font-size: 120%;">文本内容</text>

注意事项

font-size 设置为百分比时:

  • 未设置 parent-font-size 属性会报错
  • parent-font-size 属性值非数值会报错
  • 若出现以上两种情况,框架不会计算 font-size,直接返回原值
line-height

和 Web/小程序类似,当设置 line-height: 1.2line-height: 120% 时,实际都按百分比计算。

line-height 的百分比计算基准是 font-size 的大小,所以设置 line-height 为数值或百分比时,要保证同时设置了 font-size 大小。

css
.text {
  font-size: 16px;
  line-height: 1.5; /* 相当于 150% */
}

注意事项

设置 line-height 时要注意区分有无单位:

  • line-height: 12 会按照 line-height: 1200% 来计算处理
  • line-height: 12px 会按照正常单位计算
根据自身宽高计算百分比

translateXtranslateYborder-radius 的百分比都是根据自身宽高来计算的。

css
.self-based {
  transform: translateX(50%); /* 基于自身宽度 */
  transform: translateY(30%); /* 基于自身高度 */
  border-radius: 10%; /* 基于自身宽度 */
}

注意事项

  • 计算基准
    • translateXborder-radius 基于节点的 width 计算
    • translateY 基于节点的 height 计算
    • border-radius-*(top/right/bottom/left)计算逻辑与 border-radius 一致
  • 生效时机:需要在完成渲染后通过 onLayout 获取自身宽高,故属性设置在第一次 onLayout 后生效
  • 动画限制:动画执行不会触发 onLayout,不建议在动画中使用这些属性的百分比
根据父节点宽高计算百分比

除上述特殊规则外,widthleftrightheighttopbottommarginpadding 等属性设置百分比时的计算基准都是父节点的宽高。RN 原生默认支持这些属性的百分比设置,无需框架额外处理。

例外情况:在 calc() 函数表达式中使用百分比,如 width: calc(100% - 10px),这种情况是需要框架额外处理的。

calc() 函数内的百分比使用方式

calc() 函数表达式内使用百分比时,需要开发者设置 parent-widthparent-height 属性:

  • 基于父节点高度计算heighttopbottom 需要传入 parent-height 属性
  • 基于父节点宽度计算widthleftright 需要传入 parent-width 属性
html
<view parent-width="{{ 300 }}" style="width: calc(100% - 20px);">内容</view>
<view parent-height="{{ 400 }}" style="height: calc(80% + 10px);">内容</view>

💡 注意

属性计算基准遵循:纵向以高度为基准,横向以宽度为基准

色值类型支持

支持以下颜色值格式:

格式类型说明示例
Named Color预定义颜色名称redblueorange
Hex Color十六进制颜色#090#009900#090a
RGB/RGBARGB/RGBA 函数rgb(34, 12, 64)rgba(34, 12, 64, 0.6)
HSL/HSLAHSL/HSLA 函数hsl(30, 100%, 50%)hsla(30, 100%, 50%, 0.6)
HWBHWB 函数hwb(90 10% 10%)hwb(90 10% 10% / 0.5)
Color IntsRN 特有格式0xff00ff00

📖 参考文档

更多颜色名称请参考:React Native 颜色枚举值

文本样式继承

平台差异

平台文本节点处理样式设置
Web/小程序div/view 可直接包裹文本可在容器节点上设置文本样式
React Native必须通过 Text 创建文本节点文本样式属性 只能设置给 Text 节点

Mpx 抹平机制

Mpx 框架抹平了平台差异:

  • ✅ 可以使用 view 节点直接包裹文本
  • ✅ 可以在 view 节点上设置文本样式,作用到直接子 text 节点

继承规则

受限于 RN 内 text 的样式继承原则,Mpx 的文本样式继承遵循以下规则:

  1. view → text 继承:只有 view 节点下的直接子 text 节点可以继承 view 节点上的文本样式
  2. text 嵌套继承:父级 text 节点的样式可以被嵌套的子 text 节点继承
  3. 自动包裹view 节点直接包裹文本时,Mpx 编译时会自动添加 text 节点包裹文本

示例

html
<!-- 示例代码 -->
<view class="wrapper">
   文本1
   <text class="content">文本2</text>
   <text class="content"><text>文本3</text></text>
   <view class="content">文本4</view>
   <view class="content"><view>文本5</view></view>
</view>
css
.wrapper {
    font-size: 20px;
}
.content {
    text-align: right;
}

渲染效果对比

文本Web/小程序React Native
文本120px,居右20px
文本220px,居右20px,居右
文本320px,居右20px,居右
文本420px,居右居右
文本520px,居右样式未生效

简写样式属性

Mpx 对通过 class 类定义的样式会按照 RN 的样式规则进行编译处理,其中最重要的功能是将 RN 不支持的简写属性转换成 RN 支持的多属性结构。

支持的简写属性

属性类型简写属性
文本相关text-shadowtext-decoration
布局相关flexflex-flow
间距相关marginpadding
背景相关background
阴影相关box-shadow
边框相关border-radiusborder-widthborder-colorborder
方向边框border-topborder-rightborder-bottomborder-left

示例

css
/* 简写属性示例 */
.shorthand-example {
  /* 边距简写 */
  margin: 10px 20px;        /* 转换为 marginTop, marginRight, marginBottom, marginLeft */
  padding: 15px;            /* 转换为 paddingTop, paddingRight, paddingBottom, paddingLeft */
  
  /* 边框简写 */
  border: 1px solid red;    /* 转换为 borderWidth, borderStyle, borderColor */
  border-radius: 5px;       /* 转换为各个角的 borderRadius */
  
  /* 弹性布局简写 */
  flex: 1 0 auto;          /* 转换为 flexGrow, flexShrink, flexBasis */
}

使用限制

编译时 vs 运行时

  • class 类样式:考虑到运行时转化的性能开销问题,简写属性只会在编译时转换
  • style 属性:简写属性不会在运行时转换,RN 不支持的简写属性无法使用

CSS 变量限制

  • ❌ 简写属性不支持单个 var() 函数,编译时会报错并原样返回
  • ✅ 多个 var() 函数会按顺序赋值给各个属性
css
/* ❌ 错误用法 */
.error {
  margin: var(--spacing);  /* 会报错,可能会导致 RN 运行时错误 */
}

/* ✅ 正确用法 */
.correct {
  margin: var(--top) var(--right) var(--bottom) var(--left);
}

CSS 函数

var() 函数

var() 函数可以插入自定义属性(CSS 变量)的值,用来代替属性值。

css
/* 定义变量:以 -- 开头 */
:root {
  --main-color: #3498db;
  --spacing: 16px;
}

/* 使用变量:通过 var() 函数 */
.component {
  color: var(--main-color);
  margin: var(--spacing);
}

语法

css
var(<custom-property-name>, <fallback-value>?)
  • 第一个参数:要替换的自定义属性名称
  • 第二个参数:可选的回退值,当自定义属性无效时使用

使用示例

vue
<template>
  <view class="component">
    <view class="header">Header</view>
    <view class="content">Content</view>
    <view class="footer">Footer</view>
  </view>
</template>

<style>
  .component {
    --content-color: #b58df1;
    --header-color: pink;
  }

.header {
  background-color: var(--header-color, blue);    /* 使用 pink */
  }

.content {
  background-color: var(--content-color, black);  /* 使用 #b58df1 */
  }

.footer {
  background-color: var(--footer-color, black);   /* 使用 black(回退值) */
  }
</style>

渲染效果

元素背景色说明
Headerpink使用定义的 --header-color
Content#b58df1使用定义的 --content-color
Footerblack--footer-color 未定义,使用回退值

注意事项

使用限制

  • 回退值逗号:回退值允许包含逗号,如 var(--foo, red, blue) 会将 red, blue 作为完整回退值(在第一个逗号之后到函数结尾前的值都会被认为是回退值)
  • 使用场景var() 函数只能作为属性值使用,不能用作属性名或选择器

calc() 函数

calc() 函数允许在声明 CSS 属性值时执行数学计算,使用表达式的结果作为最终值。

语法

css
calc(expression)

表达式采用标准数学运算法则,支持四则运算:+-*/

运算规则

运算符要求说明
+-两边必须有空格加法和减法运算
*/至少一边是数字乘法和除法运算

注意

  • 乘法运算:乘数中至少有一个必须是 number
  • 除法运算:除数(/ 右边的数)必须是 number
  • 空格要求+- 运算符两边必须有空格,* 和 / 这两个运算符前后不需要空格,但考虑到统一性,仍然推荐加上空格
  • 单位支持:所有能数值化的单位都支持 calc() 函数

使用示例

css
/* 基本用法 */
.basic {
  width: calc(100% - 80px);           /* 百分比减去固定值 */
  height: calc(50vh + 20px);          /* 视口单位加上固定值 */
  margin: calc(1rem * 2);             /* 倍数计算 */
  font-size: calc(16px / 2);          /* 除法计算 */
}

/* 与 CSS 变量结合使用 */
.variables {
  --base-width: 100px;
  --half-width: calc(var(--base-width) / 2);
  --quarter-width: calc(var(--half-width) / 2);
  
  width: var(--quarter-width);        /* 最终结果:25px */
}

/* 复杂表达式 */
.complex {
  font-size: calc(1.5rem + 3vw);      /* 响应式字体大小 */
  padding: calc(10px + 2%);           /* 固定值加百分比 */
}

百分比计算

百分比在 calc() 中的计算逻辑详见 百分比单位说明

css
/* 注意:需要在 template 模板对应元素标签中指定 parent-width 或 parent-height 属性 */
.percentage {
  width: calc(100% - 20px);   /* 需要在模板中指定 parent-width 属性 */
  height: calc(80% + 10px);   /* 需要在模板中指定 parent-height 属性 */
}

env() 函数

env() 函数用于将系统定义的环境变量值插入到 CSS 中,主要用于处理设备的安全区域。

语法

css
env(<environment-variable>, <fallback-value>?)
  • 第一个参数:系统环境变量名称
  • 第二个参数:可选的回退值,当环境变量不可用时使用

支持的环境变量

环境变量说明用途
safe-area-inset-top顶部安全距离避开状态栏、刘海屏等
safe-area-inset-right右侧安全距离避开侧边区域
safe-area-inset-bottom底部安全距离避开 Home 指示器等
safe-area-inset-left左侧安全距离避开侧边区域

使用示例

css
/* 基本用法 */
.safe-area {
  padding-top: env(safe-area-inset-top, 20px);
  padding-right: env(safe-area-inset-right, 20px);
  padding-bottom: env(safe-area-inset-bottom, 20px);
  padding-left: env(safe-area-inset-left, 20px);
}

/* 简写形式 */
.safe-area-compact {
  padding: env(safe-area-inset-top, 20px) 
           env(safe-area-inset-right, 20px) 
           env(safe-area-inset-bottom, 20px) 
           env(safe-area-inset-left, 20px);
}

env() vs var() 对比

特性env()var()
定义方式系统定义开发者自定义
作用域全局生效局部作用域
用途系统环境适配样式变量管理

原子类

原子类功能正在开发中,敬请期待后续版本支持。

样式属性参考

以下是 Mpx 转 RN 支持的样式属性详细说明。

position

设置元素的定位方式。

值类型relative | absolute | fixed(默认 relative

css
position: absolute;
top: 10px;

top / right / bottom / left

设置元素在不同方向的偏移量。

值类型number,支持所有数值单位

css
position: relative;
top: 10%;
left: 20px;

z-index

控制元素的堆叠覆盖顺序。

值类型number(纯数值,无单位)

css
position: absolute;
z-index: 10;

display

设置元素的布局方式。

值类型flex | none

RN 布局限制

  • 仅支持 flex 布局,不支持 blockgridtable
  • Text 节点默认为行内布局
css
display: flex; /* 弹性布局(默认) */
display: none; /* 隐藏元素 */

opacity

设置元素的不透明度。

值类型number(0-1,0为完全透明,1为完全不透明)

注意

RN 中设置 opacity: 0 的元素不响应触摸事件

css
opacity: 1;   /* 完全不透明 */
opacity: 0.6; /* 半透明 */
opacity: 0;   /* 完全透明 */

overflow

控制元素溢出时的行为。

值类型visible | hidden | scroll

css
overflow: visible; /* 显示溢出内容 */
overflow: hidden;  /* 隐藏溢出内容 */
overflow: scroll;  /* 滚动查看溢出内容 */

pointer-events

控制元素是否响应触摸事件。

值类型auto | none | box-none(仅 RN 支持)| box-only(仅 RN 支持)

💡 RN 特有值

  • box-none:当前元素不响应,但子元素可响应
  • box-only:当前元素响应,但子元素不响应
css
pointer-events: auto;     /* 正常响应事件 */
pointer-events: none;     /* 不响应事件 */
pointer-events: box-none; /* 仅 RN 支持 */

justify-content

设置主轴方向的对齐方式。

值类型flex-start | flex-end | center | space-between | space-around | space-evenly

css
justify-content: flex-start;    /* 起始对齐(默认) */
justify-content: center;        /* 居中对齐 */
justify-content: space-between; /* 两端对齐 */

align-items

设置交叉轴方向的对齐方式。

值类型flex-start | flex-end | center | stretch | baseline

css
align-items: stretch;    /* 拉伸填充(默认) */
align-items: center;     /* 居中对齐 */
align-items: flex-start; /* 起始对齐 */

align-content

设置多行内容在交叉轴的对齐方式。

值类型flex-start | flex-end | center | stretch | space-between | space-around | space-evenly

css
align-content: flex-start;    /* 起始对齐 */
align-content: space-between; /* 行间等距分布 */

align-self

设置单个子元素在交叉轴的对齐方式。

值类型auto | flex-start | flex-end | center | stretch | baseline

css
align-self: auto;      /* 继承父元素 align-items */
align-self: center;    /* 居中对齐 */
align-self: flex-end;  /* 末尾对齐 */

flex-direction

设置主轴方向。

值类型row | row-reverse | column | column-reverse

css
flex-direction: row;          /* 水平排列(默认) */
flex-direction: column;       /* 垂直排列 */
flex-direction: row-reverse;  /* 水平反向排列 */

flex-wrap

设置是否允许换行。

值类型nowrap | wrap | wrap-reverse

注意:当 `flex-wrap: wrap` 时,`align-items: center` 不生效

css
flex-wrap: nowrap; /* 不换行(默认) */
flex-wrap: wrap;   /* 允许换行 */

flex-grow

设置元素的放大系数。

值类型number(≥ 0,默认 0)

css
flex-grow: 0; /* 不放大(默认) */
flex-grow: 1; /* 等比放大 */
flex-grow: 2; /* 放大系数为 2 */

flex-shrink

设置元素的收缩系数。

值类型number(≥ 0,默认 0)

css
flex-shrink: 0; /* 不收缩(默认) */
flex-shrink: 1; /* 允许收缩 */

flex-basis

设置元素在主轴上的初始大小。

值类型auto | number,支持所有数值单位

优先级规则

  • flex-direction: row 时,flex-basis 覆盖 width
  • flex-direction: column 时,flex-basis 覆盖 height
  • flex-basis: auto 时,使用 width/height
css
flex-basis: auto; /* 使用 width/height 值(默认) */
flex-basis: 100px; /* 主轴方向固定为 100px */
flex-basis: 50%;   /* 主轴方向占父容器 50% */

flex

flex-growflex-shrinkflex-basis 的简写属性。

值类型none | auto | initial | <flex-grow> | <flex-grow> <flex-shrink> | <flex-grow> <flex-basis> | <flex-grow> <flex-shrink> <flex-basis>

css
flex: 1;        /* flex: 1 1 0 */
flex: auto;     /* flex: 1 1 auto */
flex: none;     /* flex: 0 0 auto */
flex: 2 1 100px; /* grow: 2, shrink: 1, basis: 100px */

flex-flow

flex-directionflex-wrap 的简写属性。

值类型<flex-direction> | <flex-wrap> | <flex-direction> <flex-wrap>

css
flex-flow: row;         /* 仅设置方向 */
flex-flow: row nowrap;  /* 方向 + 换行 */

gap / row-gap / column-gap

设置行列间距。

值类型number,支持所有数值单位

css
gap: 16px;          /* 行列间距都是 16px */
gap: 20px 10px;     /* 行间距 20px,列间距 10px */
row-gap: 20px;      /* 仅行间距 */
column-gap: 10px;   /* 仅列间距 */

width / height

设置元素的宽度和高度。

值类型auto | number,支持所有数值单位

css
width: auto;  /* 自动宽度 */
width: 100px; /* 固定宽度 */
width: 50%;   /* 百分比宽度 */

max-width / max-height / min-width / min-height

设置元素的最大/最小尺寸。

值类型number,支持所有数值单位

css
max-width: 500px;  /* 最大宽度 */
min-height: 100px; /* 最小高度 */

aspect-ratio

设置元素的宽高比。

值类型auto | number | <width> / <height>

css
aspect-ratio: 1;       /* 正方形 */
aspect-ratio: 16 / 9;  /* 16:9 比例 */
aspect-ratio: auto;    /* 自动比例 */

margin

设置外边距。

值类型auto | number,支持所有数值单位

💡 Mpx 增强

RN 原生仅支持单值 margin,可设置多值是由框架按简写逻辑在编译时处理的,多值语法仅在 class 类中支持

css
margin: 10px;               /* 四边相同(RN 原生支持) */
margin: 10px 20px;          /* 上下 | 左右(Mpx 增强) */
margin: 10px 20px 15px;     /* 上 | 左右 | 下(Mpx 增强) */
margin: 10px 20px 15px 5px; /* 上 | 右 | 下 | 左(Mpx 增强) */

margin-top / margin-right / margin-bottom / margin-left

设置单边外边距。

值类型auto | number,支持所有数值单位

css
margin-top: 10px;    /* 上边距 */
margin-left: auto;   /* 左边距自动 */

padding

设置内边距。

值类型number,支持所有数值单位

💡 Mpx 增强

RN 原生仅支持单值 padding,可设置多值是由框架按简写逻辑在编译时处理的,多值语法仅在 class 类中支持

css
padding: 10px;               /* 四边相同(RN 原生支持) */
padding: 10px 20px;          /* 上下 | 左右(Mpx 增强) */
padding: 10px 20px 15px;     /* 上 | 左右 | 下(Mpx 增强) */
padding: 10px 20px 15px 5px; /* 上 | 右 | 下 | 左(Mpx 增强) */

padding-top / padding-right / padding-bottom / padding-left

设置单边内边距。

值类型number,支持所有数值单位

css
padding-top: 10px;    /* 上内边距 */
padding-left: 20px;   /* 左内边距 */

border

边框的简写属性。

值类型<border-width> <border-style> <border-color>

💡 Mpx 增强

值按固定顺序分别赋值给 border-width border-style border-color,若值个数不够则后置位属性不设置;和所有简写属性一致,仅支持定义在 class 类上

css
border: 1px solid red;    /* 宽度 样式 颜色 */
border: 2px dotted;       /* 宽度 样式(颜色不设置) */
border: 1px;              /* 宽度(样式和颜色不设置) */

border-width

设置边框宽度。

💡 Mpx 增强

RN 原生仅支持设置单值,可设置多值是由框架按简写逻辑在编译时处理的,多值语法仅在 class 类中支持

值类型number,支持所有数值单位

css
border-width: 1px;                /* 四边相同 */
border-width: 1px 2px;            /* 上下 | 左右 */
border-width: 1px 2px 3px 4px;    /* 上 | 右 | 下 | 左 */

border-color

设置边框颜色。

💡 Mpx 增强

RN 原生仅支持设置单值,可设置多值是由框架按简写逻辑在编译时处理的,多值语法仅在 class 类中支持

值类型color,参考色值类型支持

css
border-color: red;              /* 四边相同 */
border-color: red blue;         /* 上下 | 左右 */
border-color: red blue green;   /* 上 | 左右 | 下 */

border-style

设置边框样式。

值类型solid | dotted | dashed

注意

RN 不支持单独设置各边的样式,只能整体设置,所以 RN 上 border-style 不支持简写形式

css
border-style: solid;  /* 实线 */
border-style: dotted; /* 点线 */
border-style: dashed; /* 虚线 */

border-radius

设置圆角半径。

💡 Mpx 增强

RN 原生仅支持设置单值,可设置多值是由框架按简写逻辑在编译时处理的,多值语法仅在 class 类中支持

值类型number,支持所有数值单位

css
border-radius: 5px;           /* 四角相同 */
border-radius: 5px 10px;      /* 对角线 */
border-radius: 5px 10px 15px 20px; /* 左上 | 右上 | 右下 | 左下 */

border-top-left-radius / border-top-right-radius / border-bottom-left-radius / border-bottom-right-radius

设置单个角的圆角大小。

值类型number,支持所有数值单位

css
border-top-left-radius: 5px;     /* 左上角 */
border-top-right-radius: 10px;   /* 右上角 */
border-bottom-left-radius: 2px;  /* 左下角 */
border-bottom-right-radius: 8px; /* 右下角 */

border-top / border-right / border-bottom / border-left

单边边框的简写属性。

值类型<border-width> <border-style> <border-color>

💡 Mpx 增强

值按固定顺序分别赋值,若值个数不够则后置位属性不设置;仅支持定义在 class 类上

css
border-top: 1px solid red;    /* 上边框:宽度 样式 颜色 */
border-left: 2px dotted blue; /* 左边框:宽度 样式 颜色 */

background

背景的简写属性。

值类型<background-image> | <background-color> | <background-size> | <background-repeat> | <background-position>,具体每个属性的支持情况详见各属性的介绍文档

注意

view 组件支持

css
background: url("image.jpg") no-repeat center;
background: linear-gradient(45deg, red, blue);
background: #f0f0f0;

background-color

设置背景颜色。

值类型color,参考色值类型支持

css
background-color: red;
background-color: #ff0000;
background-color: rgba(255, 0, 0, 0.5);

background-image

设置背景图片或渐变。

值类型url() | linear-gradient()

注意

  • 背景图和背景色仅 <view> 组件支持,且需要通过 enable-background 属性开启支持
  • 渐变不支持 turnpx 单位,仅支持百分比
css
background-image: url("https://example.com/image.jpg");
background-image: linear-gradient(45deg, blue, red);
background-image: linear-gradient(to right, blue 0%, red 100%);

background-size

设置背景图片大小。

注意

  • <view> 组件支持
  • 支持一个值,这个值指定图片的宽度,图片的高度隐式的为 auto;支持两个值,第一个值指定图片的宽度,第二个值指定图片的高度;不支持逗号分隔的多个值

值类型cover | contain | auto | number

css
background-size: cover;    /* 覆盖容器 */
background-size: contain;  /* 完整显示 */
background-size: 50% 25%;  /* 宽度 高度 */

background-repeat

设置背景图片重复方式。

值类型no-repeat

注意

view 组件支持

css
background-repeat: no-repeat;

/* 不支持 */
background-repeat: repeat;

background-position

设置背景图片位置。

注意

view 组件支持

值类型center | left | right | top | bottom | number

css
background-position: center;      /* 居中 */
background-position: 10px 20px;   /* x y 坐标 */
background-position: right 10px bottom 10px; /* 右下角偏移 */

/* 不支持 */
background-position: 1cm 2cm;
background-position: 10ch 8em;
background-position: right 3em bottom 10px;

box-shadow

设置阴影颜色、阴影偏移量、阴影模糊半径。

值类型<offset-x> <offset-y> <blur-radius> <spread-radius> <color>

💡 Mpx 增强

RN 旧版本不支持 box-shadow 属性,Mpx 按 RN 支持的 shadowOffsetshadowRadiusshadowColor 属性转换

简写规则

  • offset-x offset-y blur-radius spread-radius color 顺序赋值
  • 不支持的属性会被忽略,值校验不合法时跳过该值继续校验下一个
  • 在设置 box-shadow 有效值的情况下,iOS 下会自动添加 shadowOpacity: 1 来展示阴影

值类型详细说明

css
/* offset-x | offset-y | blur-radius | color */
box-shadow: 0 1px 3px rgba(139, 0, 0, 0.32);

/* offset-x | offset-y | blur-radius | spread-radius | color */
/* spread-radius 不支持,1px 会被忽略 */
box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2);

平台差异与限制

  • Android:仅支持 shadowColor,所以框架在 android 模式下不会添加 shadowOffset/shadowRadius
  • iOS:支持 shadowOffset / shadowRadius / shadowColor / shadowOpacity
  • 均不支持spread-radius(阴影扩散半径)
  • 布局限制:与 overflow: hidden 同时使用时,RN 无法正常展示阴影,需单独新增节点
  • RN 0.76+:新架构支持原生 boxShadow 属性

color

设置文本颜色。

值类型color,参考色值类型支持

💡 提示:遵循文本样式继承规则

css
color: red;
color: #ff0000;
color: rgba(255, 0, 0, 0.8);

font-family

设置字体。

值类型string

注意

css
font-family: PingFangSC-Regular;

font-size

设置字体大小。

值类型number,支持所有数值单位

注意

css
font-size: 16px;
font-size: 1.2rem;
font-size: 120%; /* 需要 parent-font-size 属性 */

font-weight

设置字体粗细。

值类型normal | bold | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900

注意

  • 遵循文本样式继承规则
  • 若在自定义字体图标上加 font-weight,可能会导致在某些安卓机型上不展示图标或者图标展示异常
  • 100,200,300,400,500,600,800,900 在 RN 上是字符串类型而非数值类型,非字符串类型可能会导致某些安卓机型异常
css
font-weight: normal; /* 400 */
font-weight: bold;   /* 700 */
font-weight: 600;

font-style

设置字体样式。

值类型normal | italic

css
font-style: normal;
font-style: italic;

line-height

设置行高。

值类型number,支持所有数值单位

注意

css
line-height: 20px;   /* 固定行高 */
line-height: 1.5;    /* 相对倍数 */
line-height: 150%;   /* 百分比 */

text-align

设置文本对齐方式。

值类型left | right | center | justify

css
text-align: left;    /* 左对齐 */
text-align: center;  /* 居中对齐 */
text-align: justify; /* 两端对齐 */

vertical-align

设置行内文本的垂直对齐方式。

值类型auto | top | bottom | middle

注意

css
vertical-align: middle; /* 垂直居中 */
vertical-align: top;    /* 顶部对齐 */

text-decoration

文本装饰线的简写属性。

值类型<text-decoration-line> <text-decoration-style> <text-decoration-color>

注意

  • <text-decoration-line><text-decoration-style><text-decoration-color> 顺序赋值
  • 赋值过程中,如遇到不支持的属性会忽略该属性;若属性值校验不合法,则忽略该值,继续校验下一个值是否合法,合法则赋值,不合法则继续校验下一个值
  • RN 原生不支持 text-decoration 简写,可使用是由框架编译时处理,所以仅支持定义在 class 类上
  • android 下仅转换<text-decoration-line><text-decoration-style>/<text-decoration-color> 因不支持不会添加
  • 遵循文本样式继承规则
css
text-decoration: underline;           /* 下划线 */
text-decoration: line-through;        /* 删除线 */
text-decoration: underline dotted red; /* 样式 + 颜色(iOS) */

text-transform

设置文本大小写转换。

值类型none | uppercase | lowercase | capitalize

css
text-transform: uppercase;  /* 大写 */
text-transform: lowercase;  /* 小写 */
text-transform: capitalize; /* 首字母大写 */

/** 不支持 **/
text-transform: full-width;
text-transform: full-size-kana;
text-transform: math-auto;

letter-spacing

设置字符间距。

值类型number,支持所有数值单位

css
letter-spacing: 2px;   /* 字符间距 2px */
letter-spacing: 2rpx; /* 字符间距 2rpx */

text-shadow

设置文本阴影偏移量、模糊半径和颜色。

值类型<offset-x> <offset-y> <blur-radius> <color>

💡 Mpx 增强

RN 不支持 text-shadow 属性,Mpx 按 RN 支持的 textShadowOffsettextShadowRadiustextShadowColor 属性转换

简写规则

  • offset-x offset-y blur-radius color 顺序赋值
  • 不支持的属性会被忽略,值校验不合法时跳过该值继续校验下一个
  • 遵循文本样式继承规则

值类型详细说明

css
/* offset-x | offset-y | blur-radius | color */
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);

/* offset-x | offset-y | color(省略模糊半径) */
text-shadow: 2px 2px #000;

font-variant

设置字体变体。

值类型small-caps | oldstyle-nums | lining-nums | tabular-nums | proportional-nums

css
font-variant: small-caps;     /* 小型大写字母 */
font-variant: tabular-nums;   /* 等宽数字 */

direction

设置文本书写方向。

值类型ltr | rtl | inherit

css
direction: ltr; /* 从左到右 */
direction: rtl; /* 从右到左 */

user-select

控制用户是否可以选择文本。

值类型auto | text | none | contain | all

css
user-select: none; /* 禁止选择 */
user-select: text; /* 允许选择 */

transform

设置元素变换。

值类型string | array

css
/* CSS 字符串格式 */
transform: translateX(50px) rotate(45deg);
transform: scale(1.2) skewX(10deg);

/* RN 数组格式,仅 rn 支持 */
transform: [{translateX: 50}, {rotate: '45deg'}];

transform-origin

设置视图变换的原点,默认情况下,变换的原点是中心。

值类型

  • 单值:该值必须是 px、百分比或关键字 leftcenterrighttopbottom 之一
  • 双值:第一个值代表 X 偏移,必须是 px、百分比或关键字 leftcenterright 之一;第二个值代表 Y 偏移,必须是 px、百分比或关键字 topcenterbottom 之一
  • 三值:前两个值与双值语法相同,第三个值代表 Z 偏移,必须是 px
css
/* 单值 */
transform-origin: center;        /* 关键字 */
transform-origin: 50%;           /* 百分比 */
transform-origin: 10px;          /* px 值 */

/* 双值 */
transform-origin: left top;      /* 关键字组合 */
transform-origin: 50% 50%;       /* 百分比 */
transform-origin: 10px 20px;     /* px 值 */

/* 三值 */
transform-origin: 50% 50% 30px;  /* X Y Z 坐标 */
transform-origin: left top 10px; /* 关键字 + Z 偏移 */

backface-visibility

设置背面可见性。

注意

<view> 组件支持

值类型visible | hidden

css
backface-visibility: hidden; /* 背面隐藏 */

object-fit

设置替换元素的内容应该如何适应到其使用高度和宽度确定的框。

注意

<view> 组件支持

值类型cover | contain | fill | scale-down

css
object-fit: fill;       /* 拉伸填满,可能变形 */
object-fit: contain;    /* 完整显示,保持比例 */
object-fit: cover;      /* 覆盖填充,保持比例,可能裁剪 */
object-fit: scale-down; /* 缩小显示 */