React Native 组件样式使用汇总

前言

React Native 的组件样式是 CSS 的一个子集,为此整理了一份 RN 与 CSS 的对应关系以便快去上手。结构没有按照官方分类来划分,目前分为:

  • 基础组件类

    1. Text style
    2. View style
    3. Image style
  • 布局类

    1. Layout style
    2. Flexbox style
  • 效果类

    1. Transform style
    2. Shadow style

写在前面: React Native 的 颜色是支持 CSS3 的规范,color 都是以字符串的形式传入,请参考 React Native Color Reference

Text 样式

用于显示文本的 React Native 组件。支持嵌套、样式和触摸事件处理。
Text 基本可以使用所有的常见样式,但其他组件不一定能使用 Text 的样式。

Text 字体

color string
fontFamily string
fontSize number
fontStyle enum('normal', 'italic')
fontWeight enum('normal', 'bold', '100 ~ 900')

Text 对齐

lineHeight number
letterSpacing number
textAlign enum('auto', 'left', 'right', 'center', 'justify')
指定文本的对齐方式。其中'justify'值仅iOS支持,在Android上会变为left。

Text 下划线

textDecorationStyle enum('solid', 'double', 'dotted', 'dashed')
textDecorationLine enum('none', 'underline', 'line-through', 'underline line-through')
textDecorationColor string

Text 阴影

textShadowColor string
textShadowOffset {width: number, height: number}
textShadowRadius number

样式使用
// 使用方式 1
<Text style={{color: '#d2d2d2', lineHeight: 6}}></Text>

// 使用方式 2
const styles = {
    text: {
      color: '#d2d2d2',
      lineHeight: 6
    }
}
<Text style={styles.text}></Text>
常用属性

numberOfLines 文本行数限制
selectable 用户是否可以长按选择文本,例如复制粘贴

<Text numberOfLines={3}>all contacts</Text>
<Text selectable={true}>all contacts</Text>

注意:以上属性只能用于 Text 组件,样式名称需要首字母小写的驼峰命名,例如lineHeight。另外像阴影不能使用简写方式,只能分开声明样式,在CSS当中的background、border等简写RN中只能分开声明。

文本嵌套/实现继承

前面提到除了 Text 组件,其他不能使用该样式,所以无法像在 HTML 中,给在父级 div 设定 color 后,子节点都继承字体颜色。在 RN 中我们不能给 View 组件设定字体颜色,同时也不能直接把文字放在 View 组件中,文字应该被 Text 组件包裹。如果我们想使用继承,可以通过文本嵌套来实现。

<Text style={{color: 'blue'}}>
  contacts
  <Text> Your name</Text>
  <Text> My name</Text>

</Text>

我们给外面的 Text 组件设置字体颜色为 blue 后,'Your name' 也变成了 blue。

Text 包裹

此时 text 组件默认在一行,如果将最外层的 Text 组件 改为 View 组件,此时会发现,文本自动占据一行。

把 Text 组件 改为 View,同时去掉 View 中的字符和 View 上的样式,代码如下。

<View style={{}}>
  <Text> Your name</Text>
  <Text> My name</Text>
</View>

结果文本将各占一行。

view 包裹

在 RN 中不像 HTML 那么灵活的去改变行内元素,块级元素。如果文本是在一行,设置宽度和高度无效,反之可以,可自行尝试。

View 样式

view 组件还支持布局样式、效果样式。

边框颜色

borderColor string
borderTopColor string
borderRightColor string
borderBottomColor string
borderLeftColor string

边框圆角半径

borderRadius number
borderTopLeftRadius number
borderTopRightRadius number
borderBottomLeftRadius number
borderBottomRightRadius number

边框样式

borderStyle enum('solid', 'dotted', 'dashed')

边框宽度

borderWidth number
borderTopWidth number
borderRightWidth number
borderBottomWidth number
borderLeftWidth number

显示

opacity number
backgroundColor string
backfaceVisibility enum('visible', 'hidden')
overflow enum('visible', 'hidden')

注意:View 组件不支持 Text 样式。

Image 样式

Image 组件还支持布局样式、效果样式。

调整大小模式

resizeMode Object.keys(ImageResizeMode)
该属性可以像 css 中的 background-image 一样,控制他的显示方式,例如裁剪显示,包含显示。

色彩颜色

tintColor string
将所有不透明像素的颜色更改为tintColor。

常用属性

resizeMode 既是 Image 组件的一个样式,也是一个属性,用来初始化该组件的显示方式。
source 等同于 <image> 标签的 src,不同的是 source 是一个对象而不是字符串,支持的格式为png, jpg, jpeg, bmp, gif, webp (仅Android), psd (仅iOS)。

// 使用网络资源:
<Image source={{uri: 'www.baidu.com/logo.png'}}/>
// 使用本地静态资源需要先require:
<Image source={require('./img/check.png')} />

注意:虽然 Image 组件支持 View 样式,但以下样式在 iOS 平台 Image 组件不支持。
borderTopLeftRadius、borderTopRightRadius、borderBottomLeftRadius、borderBottomRightRadius

Layout 样式

宽高

width number
height number

外边距

margin number
marginBottom number
marginLeft number
marginRight number
marginTop number
marginHorizontal number
marginVertical number

内边距

padding number
paddingBottom number
paddingLeft number
paddingRight number
paddingTop number
paddingHorizontal number
paddingVertical number

定位

position enum('absolute', 'relative')
right number
top number
left number
bottom number

FlexBox 样式

与 CSS flex 语法很相近。

flex 布局

flex number
flexDirection enum('row', 'column') 方向
flexWrap enum('wrap', 'nowrap') 包裹方式
alignSelf enum('auto', 'flex-start', 'flex-end', 'center', 'stretch') 自身对齐方式
alignItems enum('flex-start', 'flex-end', 'center', 'stretch') 项目垂直对齐方式
justifyContent enum('flex-start', 'flex-end', 'center', 'space-between', 'space-around') 项目水平对齐方式

Transform 样式

Transform 在 css3 中有许多属性,在 RN 中也是根据 css 来设计的。

过度变化

transform [{perspective: number}, {rotate: string}, {rotateX: string}, {rotateY: string}, {rotateZ: string}, {scale: number}, {scaleX: number}, {scaleY: number}, {translateX: number}, {translateY: number}, {skewX: string}, {skewY: string}]

transform 是以数组的形式来设置属性,例如:

const styles = {
  myTransform: [ // 数组
    {
      rotate: '90deg'
    },
    {
      scale: 1.5
    }
  ]
}

shadow 样式

和css3的shadow-box属性类似,分开书写

shadowColor string
shadowOffset {width: number, height: number}
shadowOpacity number
shadowRadius number

结语

以上是react native 所支持的常见样式,如果你是前端相信能够快速上手,如果你没有前端基础,相信通过分类能够快速掌握。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容