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
						
					
					
				| # 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.
 |