You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					114 lines
				
				3.0 KiB
			
		
		
			
		
	
	
					114 lines
				
				3.0 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								# css-to-react-native
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Converts CSS text to a React Native stylesheet object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```css
							 | 
						||
| 
								 | 
							
								font-size: 18px;
							 | 
						||
| 
								 | 
							
								line-height: 24px;
							 | 
						||
| 
								 | 
							
								color: red;
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  fontSize: 18,
							 | 
						||
| 
								 | 
							
								  lineHeight: 24,
							 | 
						||
| 
								 | 
							
								  color: 'red',
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Converts all number-like values to numbers, and string-like to strings.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Automatically converts indirect values to their React Native equivalents.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```css
							 | 
						||
| 
								 | 
							
								text-shadow-offset: 10px 5px;
							 | 
						||
| 
								 | 
							
								font-variant: small-caps;
							 | 
						||
| 
								 | 
							
								transform: translate(10px, 5px) scale(5);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  textShadowOffset: { width: 10, height: 5 },
							 | 
						||
| 
								 | 
							
								  fontVariant: ['small-caps'],
							 | 
						||
| 
								 | 
							
								  // Fixes backwards transform order
							 | 
						||
| 
								 | 
							
								  transform: [
							 | 
						||
| 
								 | 
							
								    { translateY: 10 },
							 | 
						||
| 
								 | 
							
								    { translateX: 10 },
							 | 
						||
| 
								 | 
							
								    { scale: 5 },
							 | 
						||
| 
								 | 
							
								  ]
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Also allows shorthand values.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```css
							 | 
						||
| 
								 | 
							
								font: bold 14px/16px "Helvetica";
							 | 
						||
| 
								 | 
							
								margin: 5px 7px 2px;
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  fontFamily: 'Helvetica',
							 | 
						||
| 
								 | 
							
								  fontSize: 14,
							 | 
						||
| 
								 | 
							
								  fontWeight: 'bold',
							 | 
						||
| 
								 | 
							
								  fontStyle: 'normal',
							 | 
						||
| 
								 | 
							
								  fontVariant: [],
							 | 
						||
| 
								 | 
							
								  lineHeight: 16,
							 | 
						||
| 
								 | 
							
								  marginTop: 5,
							 | 
						||
| 
								 | 
							
								  marginRight: 7,
							 | 
						||
| 
								 | 
							
								  marginBottom: 2,
							 | 
						||
| 
								 | 
							
								  marginLeft: 7,
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Shorthands will only accept values that are supported in React, so `background` will only accept a colour, `backgroundColor`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								There is also support for the `box-shadow` shorthand, and this converts into `shadow-` properties. Note that these only work on iOS.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Shorthand Notes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`border{Top,Right,Bottom,Left}` shorthands are not supported, because `borderStyle` cannot be applied to individual border sides.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# API
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The API is mostly for implementors. However, the main API may be useful for non-implementors. The main API is an array of `[property, value]` tuples.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								import transform from 'css-to-react-native';
							 | 
						||
| 
								 | 
							
								// or const transform = require('css-to-react-native').default;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								transform([
							 | 
						||
| 
								 | 
							
								  ['font', 'bold 14px/16px "Helvetica"'],
							 | 
						||
| 
								 | 
							
								  ['margin', '5px 7px 2px'],
							 | 
						||
| 
								 | 
							
								  ['border-left-width', '5px'],
							 | 
						||
| 
								 | 
							
								]); // => { fontFamily: 'Helvetica', ... }
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								We don't provide a way to get these style tuples in this library, so you'll need to do that yourself. I expect most people will use postCSS or another CSS parser. You should try avoid getting these with `string.split`, as that has a lot of edge cases (colons and semi-colons apearing in comments etc.)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For implementors, there is also a few extra APIs available.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								These are for specific use-cases, and most people should just be using the API above.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								import { getPropertyName, getStylesForProperty } from 'css-to-react-native';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								getPropertyName('border-width'); // => 'borderWidth'
							 | 
						||
| 
								 | 
							
								getStylesForProperty('borderWidth', '1px 0px 2px 0px'); // => { borderTopWidth: 1, ... }
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Should you wish to opt-out of transforming certain shorthands, an array of property names in camelCase can be passed as a second argument to `transform`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								transform([['border-radius', '50px']], ['borderRadius']);
							 | 
						||
| 
								 | 
							
								// { borderRadius: 50 } rather than { borderTopLeft: ... }
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This can also be done by passing a third argument, `false` to `getStylesForProperty`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## License
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Licensed under the MIT License, Copyright © 2019 Krister Kari, Jacob Parker, and Maximilian Stoiber.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								See [LICENSE.md](./LICENSE.md) for more information.
							 |