ReactstrapNativeWeb
This is project create support library bootstrap on react native and react native web
Table of contents
Installation
If using yarn:
yarn add reactstrap-native-web@beta
If using npm:
npm i reactstrap-native-web@beta
Global Style
Setup
- Create file styles any (recommended use name: theme.style.js or theme.style.ts if you use the typescript in a folder style)
Load theme default
or dynamic theme
you want.
import {buildTheme} from 'reactstrap-native-web';
import {StyleSheet} from 'react-native'
const themes = buildTheme({
lightTheme: {
spacer: 30,
colors: {
primary: 'red',
},
},
});
export const bootstrap = StyleSheet.create(themes.default.styleSheet);
export const lightTheme = StyleSheet.create(themes.lightTheme.styleSheet);
And then you can import global style anywhere
Note
: when we define colors
variable for any theme will auto-generate text color, background color, and border color equivalent
Beside about spacer
variable will auto-generate margin and padding equivalent please reference spacing
Theme defaults similar :root of bootstrap
export default {
spacer: 16,
colors: {
blue: '#007bff',
indigo: '#6610f2',
purple: '#6f42c1',
pink: '#e83e8c',
red: '#dc3545',
orange: '#fd7e14',
yellow: '#ffc107',
green: '#28a745',
teal: '#20c997',
cyan: '#17a2b8',
white: '#fff',
gray: '#6c757d',
grayDark: '#343a40',
primary: '#007bff',
secondary: '#6c757d',
success: '#28a745',
info: '#17a2b8',
warning: '#ffc107',
danger: '#dc3545',
light: '#f8f9fa',
dark: '#343a40',
},
};
Document Structure Dynamic Theme
Name | Description | Default | Type | Required |
---|
colors | Define color for your dynamic theme or override theme default | None | Object | false |
spacer | Number present size please reference spacing | 16 | Number | false |
Text Color
- Generate when we setting
colors
Example:
import {buildTheme} from 'reactstrap-native-web';
import {StyleSheet} from 'react-native'
const themes = buildTheme({
lightTheme: {
spacer: 30,
colors: {
primary: 'red',
},
},
});
export const bootstrap = StyleSheet.create(themes.default.styleSheet);
export const lightTheme = StyleSheet.create(themes.lightTheme.styleSheet);
Auto generate text color
for lightTheme
:
import {StyleSheet} from "react-native";
StyleSheet.create({
textPrimary: {
color: 'red'
}
})
we can access style in code the following:
export const ExampleComponent = () => {
return (
<View style={lightTheme.textPrimary}/>
);
}
Background Color
- Generate when we setting
colors
- Example:
import {buildTheme} from 'reactstrap-native-web';
import {StyleSheet} from 'react-native'
const themes = buildTheme({
lightTheme: {
spacer: 30,
colors: {
primary: 'red',
},
},
});
export const bootstrap = StyleSheet.create(themes.default.styleSheet);
export const lightTheme = StyleSheet.create(themes.lightTheme.styleSheet);
- Auto generate
background color
for lightTheme
: import {StyleSheet} from "react-native";
StyleSheet.create({
bgPrimary: {
backgroundColor: 'red'
}
})
- we can access style in code the following:
export const ExampleComponent = () => {
return (
<View style={lightTheme.bgPrimary}/>
);
}
Border Color
- Generate when we setting
colors
- Example:
import {buildTheme} from 'reactstrap-native-web';
import {StyleSheet} from 'react-native'
const themes = buildTheme({
lightTheme: {
spacer: 30,
colors: {
primary: 'red',
},
},
});
export const bootstrap = StyleSheet.create(themes.default.styleSheet);
export const lightTheme = StyleSheet.create(themes.lightTheme.styleSheet);
- Auto generate
border color
for lightTheme
: import {StyleSheet} from "react-native";
StyleSheet.create({
borderPrimary: {
borderColor: 'red',
},
borderFullPrimary: {
borderWidth: 1,
borderColor: 'red',
borderStyle: 'solid',
},
borderBottomPrimary: {
borderBottomColor: 'red',
borderBottomWidth: 1,
borderStyle: 'solid',
},
borderLeftPrimary: {
borderLeftColor: 'red',
borderLeftWidth: 1,
borderStyle: 'solid',
},
borderRightPrimary: {
borderRightColor: 'red',
borderRightWidth: 1,
borderStyle: 'solid',
},
borderTopPrimary: {
borderTopColor: 'red',
borderTopWidth: 1,
borderStyle: 'solid',
}
})
- we can access style in code the following:
export const ExampleComponent = () => {
return (
<View style={lightTheme.borderFullPrimary}/>
);
}
Border Width
- Generate when we setting
spacer
- Example:
import {buildTheme} from 'reactstrap-native-web';
import {StyleSheet} from 'react-native'
const themes = buildTheme({
lightTheme: {
spacer: 30,
colors: {
primary: 'red',
},
},
});
export const bootstrap = StyleSheet.create(themes.default.styleSheet);
export const lightTheme = StyleSheet.create(themes.lightTheme.styleSheet);
- Auto generate
border width
for lightTheme
: import {StyleSheet} from "react-native";
StyleSheet.create({
border0: {
borderWidth: 0,
},
borderB0: {
borderBottomWidth: 0,
},
borderE0: {
borderEndWidth: 0,
},
borderL0: {
borderLeftWidth: 0,
},
borderR0: {
borderRightWidth: 0,
},
borderS0: {
borderStartWidth: 0,
},
borderT0: {
borderTopWidth: 0,
},
borderX0: {
borderRightWidth: 0,
borderLeftWidth: 0,
},
borderY0: {
borderBottomWidth: 0,
borderTopWidth: 0,
},
... generate => spacer / 2 ,
border15: {
borderWidth: 15,
}
})
- we can access style in code the following:
export const ExampleComponent = () => {
return (
<View style={lightTheme.border3}/>
);
}
Padding
- Generate when we setting
spacer
- Example:
import {buildTheme} from 'reactstrap-native-web';
import {StyleSheet} from 'react-native'
const themes = buildTheme({
lightTheme: {
spacer: 30,
colors: {
primary: 'red',
},
},
});
export const bootstrap = StyleSheet.create(themes.default.styleSheet);
export const lightTheme = StyleSheet.create(themes.lightTheme.styleSheet);
- Auto generate
padding
for lightTheme
according to the rate of spacing of the bootstrap import {StyleSheet} from "react-native";
StyleSheet.create({
p0: {
padding: 0,
},
pb0: {
paddingBottom: 0,
},
pl0: {
paddingLeft: 0,
},
pt0: {
paddingTop: 0,
},
pr0: {
paddingRight: 0,
},
px0: {
paddingHorizontal: 0,
},
py0: {
paddingVertical: 0,
},
... generate => 5,
p5: {
padding: spacer * 3,
}
})
- we can access style in code the following:
export const ExampleComponent = () => {
return (
<View style={lightTheme.p3}/>
);
}
Margin
- Generate when we setting
spacer
- Example:
import {buildTheme} from 'reactstrap-native-web';
import {StyleSheet} from 'react-native'
const themes = buildTheme({
lightTheme: {
spacer: 30,
colors: {
primary: 'red',
},
},
});
export const bootstrap = StyleSheet.create(themes.default.styleSheet);
export const lightTheme = StyleSheet.create(themes.lightTheme.styleSheet);
- Auto generate
margin
for lightTheme
according to the rate of spacing of the bootstrap import {StyleSheet} from "react-native";
StyleSheet.create({
m0: {
margin: 0,
},
mb0: {
marginBottom: 0,
},
ml0: {
marginLeft: 0,
},
mt0: {
marginTop: 0,
},
mr0: {
marginRight: 0,
},
mx0: {
marginHorizontal: 0,
},
my0: {
marginVertical: 0,
},
... generate => 5,
m5: {
margin: spacer * 3,
}
})
- we can access style in code the following:
export const ExampleComponent = () => {
return (
<View style={lightTheme.m3}/>
);
}
Width and Height
Display
Class | Properties |
---|
flex | display: 'flex' |
hidden | display: 'none' |
Overflow
Class | Properties |
---|
overflowVisible | overflow: 'visible' |
overflowHidden | overflow: 'hidden' |
Position
Class | Properties |
---|
relative | position: 'relative' |
absolute | position: 'absolute' |
inset0 | top: 0, bottom: 0, left: 0, right: 0 |
insetY0 | top: 0, bottom: 0 |
insetX0 | left: 0, right: 0 |
top0 | top: 0 |
right0 | right: 0 |
bottom0 | bottom: 0 |
left0 | left: 0 |
ZIndex
Class | Properties |
---|
z0 | zIndex: 0 |
z10 | zIndex: 10 |
z20 | zIndex: 20 |
z30 | zIndex: 30 |
z40 | zIndex: 50 |
z50 | zIndex: 50 |
Font Size
Class | Properties |
---|
textXs | fontSize: 12 |
textSm | fontSize: 14 |
textBase | fontSize: 16 |
textLg | fontSize: 18 |
textXl | fontSize: 20 |
text2xl | fontSize: 24 |
text3xl | fontSize: 30 |
text4xl | fontSize: 36 |
text5xl | fontSize: 48 |
text6xl | fontSize: 64 |
Font Weight
Class | Properties |
---|
fontHairline | fontWeight: 100 |
fontThin | fontWeight: 200 |
fontLight | fontWeight: 300 |
fontNormal | fontWeight: 'normal' |
fontMedium | fontWeight: 500 |
fontSemibold | fontWeight: 600 |
fontBold | fontWeight: 'bold' |
fontExtrabold | fontWeight: 800 |
fontBlack | fontWeight: 900 |
Letter Spacing
Class | Properties |
---|
trackingTighter | letterSpacing: -0.8 |
trackingTight | letterSpacing: -0.4 |
trackingNormal | letterSpacing: 0 |
trackingWide | letterSpacing: 0.4 |
trackingWider | letterSpacing: 0.8 |
trackingWidest | letterSpacing: 1.6 |
Line Height
Class | Properties |
---|
leadingNone | lineHeight: 1 |
leadingTight | lineHeight: 1.25 |
leadingSnug | lineHeight: 1.375 |
leadingNormal | lineHeight: 1.5 |
leadingRelaxed | lineHeight: 1.625 |
leadingLoose | lineHeight: 2 |
Text Align
Class | Properties |
---|
textAuto | textAlign: auto |
textLeft | textAlign: left |
textRight | textAlign: right |
textCenter | textAlign: center |
textJustify | textAlign: justify |
Text Decoration
Class | Properties |
---|
noUnderline | textDecorationLine: 'none' |
underline | textDecorationLine: 'underline' |
lineThrough | textDecorationLine: 'line-through' |
underlineLineThrough | textDecorationLine: 'underline line-through' |
Text Transform
Class | Properties |
---|
normalCase | textTransform: 'none' |
uppercase | textTransform: 'uppercase' |
lowercase | textTransform: 'lowercase' |
capitalize | textTransform: 'capitalize' |
Flex Direction
Class | Properties |
---|
flexRow | flexDirection: 'row' |
flexRowReverse | flexDirection: 'row-reverse' |
flexCol | flexDirection: 'column' |
flexColReverse | flexDirection: 'column-reverse' |
Flex Wrap
Class | Properties |
---|
flexWrap | flexWrap: 'wrap' |
flexWrapReverse | flexWrap: 'wrap-reverse' |
flexNoWrap | flexWrap: 'nowrap' |
Align Items
Class | Properties |
---|
itemsStart | alignItems: 'flex-start' |
itemsEnd | alignItems: 'flex-end' |
itemsCenter | alignItems: 'center' |
itemsStretch | alignItems: 'stretch' |
itemsBaseline | alignItems: 'baseline' |
Align Content
Class | Properties |
---|
contentStart | alignContent: 'flex-start' |
contentEnd | alignContent: 'flex-end' |
contentCenter | alignContent: 'center' |
contentStretch | alignContent: 'stretch' |
contentBetween | alignContent: 'space-between' |
contentAround | alignContent: 'space-around' |
Align Self
Class | Properties |
---|
selfAuto | alignSelf: 'auto' |
selfStart | alignSelf: 'flex-start' |
selfEnd | alignSelf: 'flex-end' |
selfCenter | alignSelf: 'center' |
selfStretch | alignSelf: 'stretch' |
selfBaseline | lignSelf: 'baseline' |
Justify Content
Class | Properties |
---|
justifyStart | justifyContent: 'flex-start' |
justifyEnd | justifyContent: 'flex-end' |
justifyCenter | justifyContent: 'center' |
justifyBetween | justifyContent: 'space-between' |
justifyAround | justifyContent: 'space-around' |
justifyEvenly | justifyContent: 'space-evenly' |
Flex
Class | Properties |
---|
flexNone | flex: 0 |
flexAuto | flex: 1 |
Flex Grow
Class | Properties |
---|
flexGrow | flexGrow: 1 |
flexGrowNone | flexGrow: 0 |
Flex Shrink
Class | Properties |
---|
flexShrink | flexShrink: 1 |
flexShrinkNone | flexShrink: 0 |
Container
Component
Usage
import {Container} from 'reactstrap-native-web';
Document
Name | Description | Default | Type | Required |
---|
fluid | Type container you want: "sm", "md", "lg", "xl", true You can reference link Container bootstrap to know use them | false | String or Boolean | false |
debug | Support debug for container component ( add border around container component ) | false | Boolean | false |
Example with default container and enable debug
import React from 'react';
import {View, Text} from 'react-native';
import {Container} from 'reactstrap-native-web';
export const ContainerWithDebug = () => {
return (
<Container debug>
<View>
<Text>Container</Text>
</View>
</Container>
);
};
Row
Component
Usage
import {Row} from 'reactstrap-native-web';
Document
Col
Component
Usage
import {Col} from 'reactstrap-native-web';
Document
Name | Description | Default | Type | Required |
---|
col | Number column: 1...12 or 'auto' or object: {size: number, offset: number} You can reference link Column Reactstrap | None | String or Number or Object | true |
sm | Number column: 1...12 or 'auto' or object: {size: number, offset: number} You can reference link Column Reactstrap | None | String or Number or Object | false |
md | Number column: 1...12 or 'auto' or object: {size: number, offset: number} You can reference link Column Reactstrap | None | String or Number or Object | false |
xl | Number column: 1...12 or 'auto' or object: {size: number, offset: number} You can reference link Column Reactstrap | None | String or Number or Object | false |
lg | Number column: 1...12 or 'auto' or object: {size: number, offset: number} You can reference link Column Reactstrap | None | String or Number or Object | false |
debug | Support debug | false | Boolean | false |
Example
import React from 'react';
import {Text} from 'react-native';
import {Container, Row, Col} from 'reactstrap-native-web';
export const TestColumn = () => {
return (
<Container fluid>
<Row>
<Col
col={{size: '3', offset: '1'}}
sm={{size: '6', offset: '0'}}
md={{size: '4', offset: '0'}}
debug>
<Text>Col 6</Text>
</Col>
<Col
col={{size: 7, offset: '1'}}
sm={{size: 6, offset: '0'}}
md={{size: 7, offset: '1'}}
debug>
<Text>Col 6</Text>
</Col>
</Row>
</Container>
);
};
Image
Component
Usage
import {Image} from 'reactstrap-native-web';
Document
Use library react-native-fit-image
Example
Please reference link react-native-fit-image
TextShadow Component
Usage
import {TextShadow} from 'reactstrap-native-web';
Document
Name | Description | Default | Type | Required |
---|
children | string text shadow | Text Shadow | String | false |
style | style for text Text Style | None | TextStyleProps | false |
textShadow | string shadow as css text shadow | None | String | true |
Example
import {TextShadow} from 'reactstrap-native-web';
export const TextShadowDemo = () => {
return (
<View style={{flex: 1, backgroundColor: "#232323"}}>
<TextShadow textShadow={'0 0 5px #FFF, 0 0 10px #FFF, 0 0 15px #FFF, 0 0 20px #49ff18, 0 0 30px #49FF18, 0 0 40px #49FF18, 0 0 55px #49FF18, 0 0 75px #49ff18'} style={{color: "#FFFFFF"}} />
</View>
);
};
On Android | On IOS |
---|
| |
Inspired by
Contributing
Pull requests are always welcome! Feel free to open a new GitHub issue for any changes that can be made.
Working on your first Pull Request? You can learn how from this free series How to Contribute to an Open Source Project on GitHub
Author
Pham Minh Hai Au
License
MIT