ReactNative 爬坑之布局跟样式

Style属性介绍

在React Native 中 样式其实使用第JavaScript 的样式来写的。所有的核心组件都接受名为 style属性。这些样式名基本上是遵循了 web 上的 CSS 的命名,只是按照 JS 的语法要求使用了驼峰命名法,例如将 'background-color'改为'backgroundColor'。
style 属性 可以是一个普通的JavaScript 对象 ,这是最简单的用法,在代码实例中是很常见的,你可以传一个数组, 在传数组中的时候, 位置在后面的样式要比前面的样式的优先级要高一些。 这样就可以间接的实现样式的继承关系。 在实际开发中官方建议我们为了以后组件可维护性以及扩展性组件的样式采用StyleSheet.create的方式来声明。

代码栗子:
import React, { Component } from 'react';
// 首先需要从react-native 里面导入 StyleSheet 这个组件
import { View, Text,StyleSheet } from 'react-native';

class TestStyle extends Component {
  constructor(props) {
    super(props);
    this.state = {
    };
  }

  render() {
    return (
      <View>
        <Text style ={styles.style1} > 样式式一 </Text>
        <Text style ={styles.style2} > 样式式二 </Text>
        <Text style ={[styles.style1,styles.style2]} > 样式式一根样式二的结合体 </Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
    style1 :{
        fontSize :20,  //字体大小
        color:'green' //字体颜色
    },
    style2 :{
        fontSize :10,
        color :'red'
    }
});
export default TestStyle;
其他的栗子
在ReactNative 只能使用css 的样式, 就是吧css的命名方式改成驼峰命名。

    'height' :  设置组件的高度
    'width'  :  设置组件的宽度
    'top'    :  是指组件相对于屏幕上方的距离,不是相对于其他组件的距离。
    'marginTop'  是指组件距离父组件的上方距离。
    'paddingTop' 是指组件内容居,内容边框的距离。
    "alignItems",居中对齐弹性盒的各项 <div> 元素

    例:alignItems:'center',
    -> stretch(项目被拉伸以适应容器)
    -> center(项目位于容器的中心)
    -> flex-start(项目位于容器的开头)
    -> flex-end(项目位于容器的结尾)
    -> baseline(项目位于容器的基线上)
    -> initial(设置该属性为它的默认值)
    -> inherit(从父元素继承该属性)
    "alignSelf",居中对齐弹性对象元素内的某个项

   例:alignSelf:'center',
   -> auto(默认值。元素继承了它的父容器的 align-items 属性。如果没有父容器则为 "stretch")
   -> stretch(项目被拉伸以适应容器)
   -> center(项目位于容器的中心)
   -> flex-start(项目位于容器的开头)
   -> flex-end(项目位于容器的结尾)
   -> baseline(项目位于容器的基线上)
   -> initial(设置该属性为它的默认值)
   -> inherit(从父元素继承该属性

    "backfaceVisibility",当元素不面向屏幕时是否可见
    例:backfaceVisibility:'visible'
    -> visible (背面是可见的)
    -> hidden  (背面是不可见的)

    "backgroundColor",背景色
    例:backgroundColor:'red'
    例:backgroundColor:'#cccccc'
    -> color   (指定背景颜色。在CSS颜色值近可能的寻找一个颜色值的完整列表)
    -> transparent (指定背景颜色应该是透明的。这是默认)
    -> inherit (指定背景颜色,应该从父元素继承)

    "borderBottomColor",底部边框颜色
    例:borderBottomColor:'red'
    例:borderBottomColor:'#cccccc'
    -> color   (指定背景颜色。在CSS 颜色值 查找颜色值的完整列表)
    -> transparent (指定边框的颜色应该是透明的。这是默认)
    - >inherit (指定边框的颜色,应该从父元素继承)

    "borderStyle",四个边框的样式
    例:borderStyle:'dotted'
    -> none    定义无边框。
    -> hidden  与 "none" 相同。不过应用于表时除外,对于表,hidden 用于解决边框冲突。
    -> dotted  定义点状边框。在大多数浏览器中呈现为实线。
    -> dashed  定义虚线。在大多数浏览器中呈现为实线。
    -> solid   定义实线。
    -> double  定义双线。双线的宽度等于 border-width 的值。
    -> groove  定义 3D 凹槽边框。其效果取决于 border-color 的值。
    -> ridge   定义 3D 垄状边框。其效果取决于 border-color 的值。
    -> inset   定义 3D inset 边框。其效果取决于 border-color 的值。
    -> outset  定义 3D outset 边框。其效果取决于 border-color 的值。
    -> inherit 规定应该从父元素继承边框样式。

    "flexDirection",设置 <div> 元素内弹性盒元素的方向为相反的顺序
    例:flexDirection:'column'
    -> row ((默认值。灵活的项目将水平显示,正如一个行一样)
    -> row-reverse (与 row 相同,但是以相反的顺序)
    -> column  (灵活的项目将垂直显示,正如一个列一样)
    -> column-reverse  (与 column 相同,但是以相反的顺序)
    -> initial (设置该属性为它的默认值。请参阅 initial)
    -> inherit (从父元素继承该属性。请参阅 inherit)

    "flexWrap",让弹性盒元素在必要的时候拆行
    例:flexWrap:'wrap'
    -> nowrap  (默认值。规定灵活的项目不拆行或不拆列)
    -> wrap    (规定灵活的项目在必要的时候拆行或拆列)
    -> wrap-reverse    (规定灵活的项目在必要的时候拆行或拆列,但是以相反的顺序)
    -> initial (设置该属性为它的默认值。请参阅 initial)
    -> inherit (从父元素继承该属性。请参阅 inherit)

    "fontWeight",文本的粗细
    例:fontWeight:'bold'
    -> normal  (默认值。定义标准的字符)
    -> bold    (定义粗体字符)
    -> bolder  (定义更粗的字符)
    -> lighter (定义更细的字符)
    -> 100    (定义由粗到细的字符。400 等同于 normal,而 700 等同于 bold)

    "justifyContent",在弹性盒对象的元素中的各项周围留有空白
    例:justifyContent:'space-between'
    -> flex-start  (默认值。项目位于容器的开头)
    -> flex-end    (项目位于容器的结尾)
    -> center  (项目位于容器的中心)
    -> space-between   (项目位于各行之间留有空白的容器内)
    -> space-around    (项目位于各行之前、之间、之后都留有空白的容器内)

    "textAlign",文本对齐方式
    例:textAlign:'left'
    -> left    把文本排列到左边。默认值:由浏览器决定。
    -> right   把文本排列到右边。
    -> center  把文本排列到中间。
    -> justify 实现两端对齐文本效果

    "textDecorationStyle",显示一条线的样式
    例:textDecorationStyle:'solid'
    -> solid   默认值。线条将显示为单线。
    -> double  线条将显示为双线。
    -> dotted  线条将显示为点状线。
    -> dashed  线条将显示为虚线。
    -> wavy    线条将显示为波浪线

    "position",定位
    例:position:'fixed'
    -> absolute    生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
    -> fixed       生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
    -> relative    生成相对定位的元素,相对于其正常位置进行定位。因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。
    -> static      默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)

    "resizeMode",用户调整大小
    例:resizeMode:'cover'
    -> cover    等比拉伸
    -> strech   保持原有大小
    -> contain  图片拉伸  充满空间

    "textDecorationStyle",显示一条线的样式
    例:textDecorationStyle:'solid'
    -> solid   默认值。线条将显示为单线。
    -> double  线条将显示为双线。
    -> dotted  线条将显示为点状线。
    -> dashed  线条将显示为虚线。
    -> wavy    线条将显示为波浪线

    "textShadowColor",文字阴影颜色
    例:textShadowColor:'red'

    "textShadowOffset",文字阴影偏移量
    例:textShadowOffset:2

    "textShadowRadius",文字阴影圆角
    例:textShadowRadius:3

    "textDecorationColor",下划线文本中下划线的颜色
    例:textDecorationColor:'red'

    "overflow",设置overflow属性进行滚动
    例:overflow:'hidden'
    visible    (默认值。内容不会被修剪,会呈现在元素框之外)
    hidden (内容会被修剪,并且其余内容是不可见的)
    scroll (内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容)

    "opacity",透明度级别
    例:opacity:0.5

Flexbox 介绍

flexbox 是伸缩容器跟伸缩的项目组成,任何一个元素都可以使用flexbox布局 容器默认有两个轴,水平轴跟垂直交叉轴

image.png

水平轴: main axis
垂直轴: cross axis
距左边框: main start
距右边框 :main end
距上边框: cross start
距下边框 :cross end

容器属性

1.flexDirection :(决定主轴的方向)
2.flexFlow :(决定是否在一条直线上)
3.flexWrap :(是flexDirection和flexWrap的简写形式,默认值为 主轴水平、不换行)
4.justifyContent :(定义了主轴上的对齐方式)
5.alignItems :(在交叉轴上如何对齐,只有在flexDirection为column时)
6.alignContent :(定义了多根轴线的对齐方式,如果项目只有一根轴线,该属性不起作用。)

flex当一个元素定义了flex属性时,表示该元素是可伸缩的(flex的属性值大于0的时候才可伸缩)

container: {
    flex:1, //只看中比例,不看重实际数值
}

flexDirection :决定主轴的方向

image.png
 flexDirection:'row', //主轴水平,起点在左,默认值            
    flexDirection:'column', //主轴垂直,起点在上
    flexDirection:'row-reverse', //主轴水平,起点在右,
    flexDirection:'column-reverse', //主轴垂直,起点在下

flexFlow :默认情况下,项目都排在一条直线上,主要定义如果一条直线排不下,如何换行

   flexWrap:'nowrap', // 不换行, 默认
    flexWrap:'wrap', // 换行,第一行在上方
    flexWrap:'wrap-reverse', // 换行,第一行在下方
nowrap.png
wrap.png
wrap-reverse.png

flexFlow :是flexDirection和flexWrap的简写形式,默认值为 主轴水平、不换行

    flexFlow:'flex-direction',
     flexFlow:'flex-wrap',

.justifyContent定义了主轴上的对齐方式

justifyContent:'flex-start', // 左对齐,默认值
    justifyContent:'flex-end', // 右对齐
    justifyContent:'center', // 居中
    justifyContent:'space-between', // 两端对齐,项目之间间隔相等
    justifyContent:'space-around', // 每个项目两端的间隔相等。所以项目间的间隔比项目与边框的间隔大一倍

image.png

alignItems 在交叉轴上如何对齐,只有在flexDirection为column时

alignItems:'flex-start', // 交叉轴起点对齐
    alignItems:'flex-end', // 交叉轴终点对齐
    alignItems:'center', // 交叉轴中点对齐
    alignItems:'baseline', // 项目第一行文字的基线对齐
    alignItems:'stretch', // 如果项目未设置高度或设为auto,将占满整个容器的高度

image.png

alignContent 定义了多根轴线的对齐方式,如果项目只有一根轴线,该属性不起作用。

alignContent:'flex-start', // 与交叉轴的起点对齐
    alignContent:'flex-end', // 与交叉轴的终点对齐
    alignContent:'center', // 与交叉轴的中点对齐
    alignContent:'space-between', // 与交叉轴两端对齐,轴线之间的间距间隔平均分布
    alignContent:'space-around', // 每根轴线两侧的间隔相等
    alignContent:'stretch', // 轴线占满整个交叉轴,默认值

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

推荐阅读更多精彩内容

  • 前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人...
    珍此良辰阅读 4,521评论 2 19
  • 一、css的布局模式 css2.1中定义了四种布局模式,由一个盒与其兄弟、祖先盒的关系决定其尺寸与位置的算法。 块...
    LemonnYan阅读 1,056评论 0 1
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,748评论 1 92
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,466评论 0 6
  • 初恋如何去定义,是第一次恋爱,还是第一个喜欢的人,在此不妨设定为第一个女朋友。 后来你也会再次经历一些清楚或者不清...
    云霄上的蓝枫子阅读 415评论 0 3