ReactNative中样式与布局的书写

样式

const styles = StyleSheet.create({container: {flex: 1,justifyContent: 'center',alignItems: 'center',backgroundColor: '#F5FCFF',},  welcome: {fontSize: 20, textAlign: 'center',margin: 10, },  instructions: {textAlign: 'center',color: '#333333',marginBottom: 5,},  
});

使用-内联样式

注意

1.react-native的样式的属性名,需要使用驼峰方式。
2.react-native的样式应用于某一个组件上的话,该样式不会继承下去,而是只应用于设置该style的节点上(Text相关样式除外,Text嵌套的话,其文字属性也会应用于子元素)。
3.react-native的样式中width/height的单位是DP。并不是PX,这点请同学们注意一下。
4.应用于组件的style属性上的样式,可以不止一个,可以使用多个,以逗号分隔。如 style={styles.a,styles.b}

元素的宽度等于屏幕的宽度

const styles = StyleSheet.create({container: {flex: 1,flexDirection: 'column',width: Dimensions.get('window').width,},
});

react-native中所有能用到的属性

1 背景相关(background)
backfaceVisibility 改元素背面面向屏幕时是否可见
backgroundColor 元素的背景色2 布局相关(flex)
alignItems flex布局元素中,子元素沿纵轴排列方式
alignSelf flex元素中,本项元素的纵轴对其方式
flex 这里指代flex-grow,描述了元素的宽度比例值
flexDirection 指代flex元素的排列方向
flexWrap 指代flex元素的换行方式,取值为 nowrap|wrap|wrap-reverse
justifyContent 指代flex元素在横轴上的排列方式,之后会进行详解。3 布局相关(margin/padding/border)
margin 留白
marginBottom 底部留白
marginLeft 左外留白
marginRight 右外留白
marginTop 上外留白
marginVertical 上下外留白的简写,如果marginTop与marginBottom一样的话,可以直接用这个值代替
marginHorizontal 左右外留白的简写
borderColor 整体边框颜色
borderRadius 整体边框的圆角
borderWidth 整体边框的宽
borderStyle 边框样式 dotted solid double dashed等
borderBottomColor 底边框颜色
borderBottomWidth 底边框宽度
borderLeftColor 左边框颜色
borderLeftWidth 左边框宽度
borderRightColor 右边框颜色
borderRightWidth 右边框宽度
borderTopColor 上边框颜色
borderTopWidth 上边框宽度
borderBottomLeftRadius 左下角圆角边框
borderBottomRightRadius 右下角圆角边框
borderTopLeftRadius 上边框左圆角
borderTopRightRadius 上边框右圆角
padding 内留白
paddingBottom
paddingTop
paddingLeft
paddingRight
paddingHorizontal
paddingVertical
height 元素高度,包含padding与border
width 元素宽度,包含padding与border4 定位相关
position
top
right
bottom
left5 文字相关
color
fontFamily
fontSize
fontStyle
fontWeight
textAlign
textDecorationColor
textDecorationLine
textDecorationStyle
letterSpacing
lineHeight6 阴影相关
shadowColor 阴影色IOS only
shadowOffset 阴影距离IOS only
shadowOpacity 阴影透明度IOS only
shadowRadius 阴影半径 IOS only
elevation 仰角 android only7 其他
opacity
overflow
resizeMode
rotation
scaleX
scaleY
transform
transformMatrix
translateX
translateY
writingDirection

详解-示例

背景相关属性

backgroundColor 元素的背景色

class hellowReact extends Component {constructor(props) {super(props);}   render() {return (<View style={styles.container}><View style={[styles.colorBlock, styles.back1]}></View><View style={[styles.colorBlock, styles.back2]}></View><View style={[styles.colorBlock, styles.back3]}></View><View style={[styles.colorBlock, styles.back4]}></View></View>);  }   
}const styles = StyleSheet.create({container: {flex: 1,flexDirection: 'column',backgroundColor: '#fff',},  colorBlock: {height: 100,width: 100,},  back1: {// 普通的16进制值backgroundColor: '#000'},  back2: {// 颜色名称的简写backgroundColor: 'blue'},  back3: {// 颜色的RGB表示backgroundColor: 'rgb(255, 0, 255)',},  back4: {// 颜色的RGBA表示backgroundColor: 'rgba(255, 0, 255, 0.5)',},
});

 backfaceVisibility 改元素背面面向屏幕时是否可见

class hellowReact extends Component {constructor(props) {super(props);}   render() {return (<View style={styles.container}><View style={[styles.rotateBlock, styles.back1]}><Text>Hello</Text></View><View style={[styles.rotateBlock, styles.back2]}><Text>Hello</Text></View><View style={[styles.rotateBlock, styles.back3]}><Text>Hello</Text></View></View>);  }
}const styles = StyleSheet.create({container: {flex: 1,flexDirection: 'column',backgroundColor: '#fff',},  rotateBlock: {marginTop: 50,height: 100,width: 100,backgroundColor: '#0f0',},back1: {transform: [{rotateY: '135deg'}],backfaceVisibility: 'visible'},back2: {backfaceVisibility: 'hidden',transform: [{rotateY: '180deg'}],},back3: {backfaceVisibility: 'hidden',transform: [{rotateY: '360deg'}],},
});

 布局相关(margin/padding/border)

传统的网页设计的,使用css的盒子模型,来搭建元素的布局

一个元素由,内容、填充(内留白)、边框、边界(外留白)组成。对应上了我们这一组 布局相关的属性

class hellowReact extends Component {constructor(props) {super(props);}render() {return (<View style={styles.container}><View style={[styles.rotateBlock, styles.back1]}><Text>Hello</Text></View></View>);  }   
}const styles = StyleSheet.create({container: {flex: 1,flexDirection: 'column',backgroundColor: '#fff',},  rotateBlock: {height: 100,width: 100,backgroundColor: '#0f0',},back1: {},
});

 为其加上50的padding

 发现其宽高并没有变,表明我们这里的盒子模型其实有别与传统的盒子模型。它的宽高是包含了padding(内留白)在内的。

const styles = StyleSheet.create({container: {flex: 1,flexDirection: 'column',backgroundColor: '#fff',},  rotateBlock: {height: 100,width: 100,padding: 30,borderWidth: 10,borderColor: '#000',backgroundColor: '#0f0',},back1: {},
});

 react-native的盒模型,可以认为是border-box的模型。即,width或者height的设定值,包含了padding、border和content。

const styles = StyleSheet.create({container: {flex: 1,flexDirection: 'column',backgroundColor: '#fff',},  rotateBlock: {height: 100,width: 100,padding: 30,borderWidth: 10,borderColor: '#000',margin: 10,backgroundColor: '#0f0',},back1: {},
});

 看到margin并不会被算到width、height的值当中。而是产生了外部留白

特殊属性解释

这里请注意,marginvVerticl,marginHorizontal这两个属性是(marginTop,marginBottom)与(marginLeft,marginRight)的简写。
同理可证,paddingVertical,paddingHorizontal。这几个属性在css中没有,但是react提供了更为简洁的设置方法。
borderStyle,这个属性是设置border的展现样式的。其可取的值有:
'solid'(默认), 'dotted', 'dashed',但是经过本人实验,在android环境下,几个属性貌似不能用

定位相关

一个元素如果不设定position去定位话,默认会形成文档流。每个元素会按顺序出现在文档流中,排到自己的位置上

class hellowReact extends Component {constructor(props) {super(props);}   render() {return (<View style={styles.container}><View style={[styles.rotateBlock, styles.back1]}><Text>Hello1</Text></View><View style={[styles.rotateBlock, styles.back2]}><Text>Hello2</Text></View><View style={[styles.rotateBlock, styles.back3]}><Text>Hello3</Text></View></View>);  }   
}const styles = StyleSheet.create({container: {flex: 1,backgroundColor: '#fff',},  rotateBlock: {height: 100,width: 100,backgroundColor: '#0f0',},  back1: {},  back2: {},  back3: {},  
});

 将第二个view的定位设定为absolute(绝对定位)

第二个view不见了,那么它去哪儿了呢?它已经脱离了我们的文档流,留下1和3,还规规矩矩的排在那里。我们为了找到第二个view,目前到底在哪儿,来尝试着更改其top和left。top/right/bottom/left决定了定位元素的位置。我们先调整其left为20

back2: {position: 'absolute',backgroundColor: '#f00',left: 30,
}, 

 可见第二个元素虽然脱离了文档流但是还是在原先的位置上。只不过是被后面的第三个view给盖住了。这和我们在前端的常识不同。不过也可以理解为,此时的top与left。设定为了与自己未脱离文档流时候的top和left一致。

如果两个元素都设定为position:absolute,我们会看到排列顺序是按照文档流出现的顺序,下面的盖住上面的。但是如果我们像调整一下覆盖的顺序呢?我们在这里要介绍一下elevation,这个属性,这个属性比较奇特,他不仅可以控制覆盖顺序(就像z-index那样),同时会产生一个阴影特效

class hellowReact extends Component {constructor(props) {super(props);}   render() {return (<View style={styles.container}><View style={[styles.shadowBlock, styles.back1]}><Text>Hello1</Text></View><View style={[styles.shadowBlock, styles.back2]}><Text>Hello2</Text></View></View>);  }   
}const styles = StyleSheet.create({container: {flex: 1,backgroundColor: '#fff',},  shadowBlock: {height: 100,width: 100,backgroundColor: '#0f0',},  back1: {position: 'absolute',},  back2: {position: 'absolute',},  
});

 文档流中后出现的hello2覆盖掉了hello1。那么我们将两个元素都设置上elevation属性

back1: {position: 'absolute',elevation: 1,
},
back2: {position: 'absolute',
},

剧情发生了反转,有elevation的hello1,覆盖住了在文档流中后出现的hello2。其实hello2的elevation值,我们可以认为是0,

结论:当两个元素,显示上有重叠的时候,elevation大的元素,会覆盖掉elevation值较小的元素。

相应的例子代码,在本文例子中的index.android.js.elevation文件里

如果position设定为relative的话,会怎样呢

const styles = StyleSheet.create({container: {flex: 1,backgroundColor: '#fff',},  rotateBlock: {height: 100,width: 100,backgroundColor: '#0f0',},  back1: {},  back2: {position: 'relative',backgroundColor: '#f00',},  back3: {},  
});

 并没有发生什么异样,文档流还是那个文档流,but,如果此时,我们设置了left: 20的话

back2: {position: 'relative',left: 20,backgroundColor: '#f00',
},

 第二个view并未脱离文档流,而是按照自己之前的位置,进行了偏移。

如上述所示,其实各位发现react的定位,并不复杂。另外,元素默认的position,是relative,所以其实上面的例子,我们不用指定position,也能得到同样的效果

back2: {left: 20,backgroundColor: '#f00',
},  

阴影相关

阴影可以让我们的应用变得更加的立体,呈现出更好的展示效果

shadowColor

shadowOffset

shadowOpacity

shadowRadius

这些属性,目前只适用于IOS系统,android的话,有一个替代属性elevation,这个属性影响着元素的z-index,就是绝对定位时的覆盖顺序(上面我们提到过),也会在元素上产生一个阴影。

class hellowReact extends Component {constructor(props) {super(props);}   render() {return (<View style={styles.container}><View style={[styles.shadowBlock, styles.back1]}><Text>Hello1</Text></View></View>);  }   
}const styles = StyleSheet.create({container: {flex: 1,backgroundColor: '#fff',},  shadowBlock: {height: 100,width: 100,backgroundColor: '#0f0',},  back1: {elevation: 5,},  
});

可以利用这个属性来设定阴影,elevation的值会影响阴影的offset

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/633392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

七省数据局密集挂牌,期待规范引领数据行业蓬勃发展

今年开年以来&#xff0c;新一轮机构改革逐步在省级层面落地&#xff1a;多个省级数据局纷纷挂牌&#xff0c;全国各省市数据要素化市场加速推动。 1月10日&#xff0c;江苏省数据局率先正式挂牌&#xff0c;这是2023年国家数据局正式揭牌后&#xff0c;第一个成立的省级数据局…

AE/PR/达芬奇视频去闪烁插件---Flicker Free

Flicker Free是一款视频处理工具&#xff0c;主要用于去除视频中的闪烁和闪光问题&#xff0c;提高视频质量。它可以帮助用户快速、方便地处理视频&#xff0c;使其更加流畅、清晰。Flicker Free可以作为After Effects、Premiere Pro、Final Cut Pro、Avid、Resolve或Vegas的插…

C++ Linux动态库的编译和调用

一、C动态库编译 采用g编译C动态库&#xff0c;命令如下&#xff1a; g -fPIC -shared -o 动态库名 cpp文件名1.1 关于fPIC选项 首先了解动态库的载入时重定位。 一般linux的可执行文件都是elf格式&#xff08;一种二进制文件格式&#xff09;&#xff0c;在可执行文件的头部包…

【GaussDB数据库】序

参考链接1&#xff1a;国产数据库华为高斯数据库&#xff08;GaussDB&#xff09;功能与特点总结 参考链接2&#xff1a;GaussDB(DWS)介绍 GaussDB简介 官方网站&#xff1a;云数据库GaussDB GaussDB是华为自主创新研发的分布式关系型数据库。该产品支持分布式事务&#xff0c;…

Unity之射线检测

不知道大家有没有玩过红色警戒 —— 一款即时战略游戏&#xff0c;和罪恶都市一样小编小学的时候就开始玩了&#xff0c;这款游戏控制单位角色移动是通过鼠标的点击来实现。 同样的操作方法还有英雄联盟等很多游戏&#xff0c;那本篇文章小编就通过简单小实例来讲解这种操作在U…

2024最新Java高频面试题总结(附答案PDF)春招面试必备!

《Java面试全解析》1000道 面试题大全详解 本人是 2009 年参加编程工作的&#xff0c;一路上在技术公司摸爬滚打&#xff0c;前几年一直在上海&#xff0c;待过的公司有 360 和游久游戏&#xff0c;因为自己家庭的原因&#xff0c;放弃了阿里钉钉团队的 offer 回到了西安。 从…

openfire源码篇(一)检出源码并运行

openfire源码篇&#xff08;一&#xff09;检出源码并运行 源码检出 官方github地址 https://github.com/igniterealtime/Openfire 检出源码到本地&#xff08;请注意你的java版本&#xff0c;我检出的openfire 为 4.9.0-SNAPSHOT 此时jdk版本应为11&#xff09; 将源码检出…

通过OpenIddict设计一个授权服务器02-创建asp.net项目

在这一部分中&#xff0c;我们将创建一个ASPNET核心项目&#xff0c;作为我们授权服务器的最低设置。我们将使用MVC来提供页面&#xff0c;并将身份验证添加到项目中&#xff0c;包括一个基本的登录表单。 创建一个空的asp.net core项目 正如前一篇文章中所说&#xff0c;授权…

苹果Find My可查找添加32件物品,伦茨科技ST17H6x芯片加速产品赋能

苹果最近更新的支持文档证实&#xff0c;从 iOS 16 开始&#xff0c;"Find My"可查找添加物品从16件增加到32件&#xff0c;AirTag 和“查找”网络中的物品利用“查找”网络的强大功能来发挥作用&#xff0c;这个网络由数亿台加密的匿名 Apple 设备构成。“查找”网络…

数据结构之栈的基本操作

该顺序栈涉及到了存储整型数据的顺序栈还有存储字符型数据的顺序栈 实现的功能有&#xff1a;入栈、出栈、判断是否为空栈、求栈的长度、清空栈、销毁栈、得到栈顶元素 此外根据上述功能&#xff0c;编写了数值转换&#xff08;十进制转化八进制&#xff09;方法、括号匹配方法…

Spring Boot - 利用Resilience4j-Circuitbreaker实现断路器模式_防止级联故障

文章目录 PreResilience4j概述Resilience4j官方地址Resilience4j-Circuitbreaker应用场景微服务演示Address servicePOMModelRepositoryServiceControllerData InitProperties测试 Order serviceModelRepositoryServiceSet UpProperties测试 探究断路器调用order-service API 2…

卷积和滤波对图像操作的区别

目录 问题引入 解释 卷积 滤波 问题引入 卷积和滤波是很相似的&#xff0c;都是利用了卷积核进行操作 那么他们之间有什么区别呢&#xff1f; 卷积&#xff1a;会影响原图大小 滤波&#xff1a;不会影响原图大小 解释 卷积 我们用这样一段代码来看 import torch.nn as …

【AI接口】语音版、文心一言大模型和AI绘图、图片检测API

文章目录 一、语音版大模型AI1、接口2、请求参数3、请求参数示例4、接口返回示例 二、AI图片鉴黄合规检测API1、接口2、请求参数3、请求参数示例4、接口返回示例5、报错说明6、代码开源 三、人工智能AI绘画API1、接口2、请求参数3、请求参数示例4、接口返回示例5、AI绘画成果展…

Gin 框架之用户密码加密

文章目录 一、引入二、密码加密位置三、如何加密四、bcrypt 库加密4.1 介绍4.2 优点&#xff1a;4.3 使用 五、小黄书密码加密实践 一、引入 Gin是一个用Go语言编写的Web框架&#xff0c;而用户密码的加密通常是在应用程序中处理用户身份验证时的一个重要问题。 通常敏感信息…

3D可视化:陶瓷烧制的未来之路

陶瓷&#xff0c;这一古老的艺术形式&#xff0c;见证了中华文明的辉煌。然而&#xff0c;随着时代的变迁&#xff0c;传统的陶瓷烧制过程正面临着诸多挑战。如何将这门千年技艺传承下去&#xff0c;并在现代社会中焕发新的光彩&#xff1f;3D可视化技术为我们打开了一扇通往未…

基于springboot+vue的蜗牛兼职网的设计与实现系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

第02章_变量与运算符(关键字,标识符,变量,基本数据类型,进制,运算符,字符集)

文章目录 第02章_变量与运算符本章专题与脉络1. 关键字&#xff08;keyword&#xff09;2. 标识符( identifier)3. 变量3.1 为什么需要变量3.2 初识变量3.3 Java中变量的数据类型3.4 变量的使用3.4.1 步骤1&#xff1a;变量的声明3.4.2 步骤2&#xff1a;变量的赋值 4. 基本数据…

Elastic Stack 8.12:通过对 ES|QL 等的改进增强了向量搜索

作者&#xff1a;来自 Elastic Tyler Perkins, Shani Sagiv, Gilad Gal, Ninoslav Miskovic Elastic Stack 8.12 构建于 Apache Lucene 9.9&#xff08;有史以来最快的 Lucene 版本&#xff09;之上&#xff0c;基于我们对标量量化和搜索并发性的贡献&#xff0c;为文本、向量和…

仿“今日头条”的开源多媒体资讯发布系统

伴随着互联网的普及、用户的时间碎片化&#xff0c;使得信息传播方式发生了巨大变化&#xff0c;因此我们看到微信、微博、今日头条、抖音、快手等平台迅速崛起。这些新的信息传播方式给广大用户带来了极大的便利&#xff0c;同时也给每个人的思想和生活带来了潜移默化的影响。…

代码随想录 Leetcode459. 重复的子字符串(KMP算法)

题目&#xff1a; 代码&#xff08;首刷看解析 KMP算法 2024年1月18日&#xff09;&#xff1a; class Solution { public:void getNext(string& s,vector<int>& next) {int j 0;next[0] j;for (int i 1; i < s.size(); i) {while (j > 0 && s…