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