在 react-native 中 style 样式和弹性布局

参考官网

一、在组件中使用 style 样式

import React from 'react';
import {View, Text, StyleSheet} from 'react-native';

const App = () => {
  return (
    
       1. style 属性的值可以是对象
      
        2. style 属性的值可以是数组,当属性相同时,后面的属性覆盖前面的属性
      
      
        3. 展开并合并多个样式为一个数组 {JSON.stringify(composeStyle)}
      
      
        4. 展开并合并多个样式为一个对象 {JSON.stringify(flattenStyle)}
      
      5. 1px 宽度
    
  );
};
// 创建样式引用
const styles = StyleSheet.create({
  container: {
    backgroundColor: '#ccc',
    height: '100%',
  },
  content: {
    backgroundColor: 'green',
    padding: 20,
  },
  color_: {
    color: '#fff',
    backgroundColor: 'orange',
  },
  fontSize_: {
    fontSize: 20,
  },
  borderBottom: {
    padding: 20,
    borderBottomWidth: StyleSheet.hairlineWidth,
    borderBottomColor: 'red',
  },
});
const stylesOther = StyleSheet.create({
  bg: {
    backgroundColor: 'red',
  },
  mg: {
    marginTop: 20,
  },
});

// 组合
const composeStyle = StyleSheet.compose([
  styles.content,
  styles.fontSize_,
  stylesOther.bg,
  stylesOther.mg,
]);
// 展开
const flattenStyle = StyleSheet.flatten([
  styles.content,
  styles.fontSize_,
  stylesOther.bg,
  stylesOther.mg,
]);
export default App;

二、 在组件中使用 Flexbox 布局

  1. 在 react-native 中的弹性布局 和 web 的弹性布局使用上略有不同
/* 在 react-native 中 */
1. flexDirection的默认值为column(而不是row)
2. alignContent默认值为 flex-start(而不是 stretch)
3. flexShrink 默认值为0 (而不是1)
4. flex只能指定一个数字值
5. 使用时无需给容器设置 display: flex;
  1. 在组件中使用
import React from 'react';
import {View, Text, StyleSheet} from 'react-native';

const App = () => {
  return (
    
      
         hello world 
         hello world 
         hello world 
      
      
         hello world 
         hello world 
         hello world 
      
    
  );
};
const styles = StyleSheet.create({
  // 包裹器
  container: {
    backgroundColor: '#236788',
    flex: 1,
    padding: 20,
  },
  // 纵向默认
  header: {
    backgroundColor: 'red',
    flex: 1,
    msg: {
      color: '#fff',
    },
  },

  // 横向 - 水平垂直居中
  footer: {
    backgroundColor: 'green',
    flex: 1,
    flexDirection: 'row',
    justifyContent: 'center',
    alignItems: 'center',
    msg: {
      color: 'yellow',
    },
  },
});
export default App;

三、 react-native 独有样式属性和注意事项

  1. 定位 position 属性的值只有:absolute 和 relative,无 static 和 fixed
import React from 'react';
import {View, Text, StyleSheet} from 'react-native';

const App = () => {
  return (
    
      
      
    
  );
};
const styles = StyleSheet.create({
  container: {
    backgroundColor: '#236788',
    height: 200,
    width: 200,
    position: 'relative',
  },
  positionLeft: {
    width: 50,
    height: 50,
    backgroundColor: 'green',
    position: 'absolute',
    left: 50,
    top: 50,
    zIndex: 1001, // 设置层级
  },
  positionRight: {
    width: 50,
    height: 50,
    backgroundColor: 'red',
    position: 'absolute',
    left: 80,
    top: 50,
  },
});
export default App;
  1. margin 外边距,margin只能设置一个值,代表上下左右边距
    {marginHorizontal: 20} 水平左右边距,{marginVertical: 20} 垂直上下边距
import React from 'react';
import {View, Text, StyleSheet} from 'react-native';

const App = () => {
  return (
    
      外边距水平垂直
    
  );
};
const styles = StyleSheet.create({
  container: {
    backgroundColor: '#236788',
    height: 200,
    width: 200,
    margin: 20,
  },

  matginCenter: {
    width: 100,
    height: 100,
    backgroundColor: 'red',
    marginHorizontal: 50, // 水平左右外边距
    marginVertical: 50, // 垂直上下外边距
  },
});
export default App;
  1. padding 内边距,padding只能设置一个值,代表上下左右边距,
    {paddingHorizontal: 20} 水平左右边距,{paddingVertical: 20} 垂直上下边距
import React from 'react';
import {View, Text, StyleSheet} from 'react-native';

const App = () => {
  return (
    
      内边距水平垂直
    
  );
};
const styles = StyleSheet.create({
  container: {
    backgroundColor: '#236788',
    height: 200,
    width: 200,
    padding: 45,
  },

  paddingCenter: {
    width: 100,
    height: 100,
    backgroundColor: 'red',
    paddingHorizontal: 10, // 水平左右内边距
    paddingVertical: 10, // 垂直上下内边距
  },
});
export default App;
  1. ncludeFontPadding 属性,在 Android 中,使用{textAlignVertical:center}设置文字垂直居中时默认情况下文字偏上,需要将ncludeFontPadding设置为false
import React from 'react';
import {View, Text, StyleSheet} from 'react-native';

const App = () => {
  return (
    
      内边距水平垂直
    
  );
};
const styles = StyleSheet.create({
  container: {
    backgroundColor: '#236788',
    height: 200,
    width: 200,
  },
  center: {
    width: 200,
    height: 100,
    backgroundColor: 'red',
    color: '#fff',
    textAlign: 'center', // 水平居中
    textAlignVertical: 'center', // 垂直居中
    includeFontPadding: false, // android 水平垂直居中
  },
});
export default App;
  1. 背景图片,在react-native中没有 backgroundImage 这个属性,所以无法通过style设置背景图片
    需要通过 ImageBackground 组件实现背景图片
import React from 'react';
import {StyleSheet, Text, View, ImageBackground} from 'react-native';
const App = () => {
  return (
    
      
        hello world
      
    
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
  },
  titleWrapper: {
    flex: 0.2,
    backgroundColor: 'rgba(120,14,20,0.2)',
    alignItems: 'center',
    justifyContent: 'center',
  },
  title: {
    fontSize: 28,
    color: '#fff',
  },
});

export default App;

你可能感兴趣的:(在 react-native 中 style 样式和弹性布局)