What is react-native-size-matters?
The react-native-size-matters package provides utility functions to handle scaling of sizes in a React Native application. It helps in making the app responsive across different screen sizes and resolutions.
What are react-native-size-matters's main functionalities?
Scaling Sizes
This feature allows you to scale sizes based on the device's screen size. The `scale`, `verticalScale`, and `moderateScale` functions help in scaling width, height, and other dimensions respectively. The `ScaledSheet` utility allows you to define styles with scaling directly in the stylesheet.
import { ScaledSheet, moderateScale, verticalScale, scale } from 'react-native-size-matters';
const styles = ScaledSheet.create({
container: {
width: '100@s', // scales the width
height: '50@vs', // scales the height vertically
padding: '10@ms', // scales the padding moderately
},
});
const scaledWidth = scale(100);
const scaledHeight = verticalScale(50);
const scaledPadding = moderateScale(10);
ScaledSheet
The `ScaledSheet` utility allows you to create stylesheets where you can use scaling directly in the style definitions. This makes it easier to maintain and apply consistent scaling across your application.
import { ScaledSheet } from 'react-native-size-matters';
const styles = ScaledSheet.create({
container: {
width: '100@s',
height: '50@vs',
padding: '10@ms',
},
text: {
fontSize: '14@ms',
},
});
Other packages similar to react-native-size-matters
react-native-responsive-screen
The react-native-responsive-screen package provides utility functions to make your React Native app responsive. It offers functions like `widthPercentageToDP` and `heightPercentageToDP` to convert percentage-based dimensions to device pixels. Compared to react-native-size-matters, it focuses more on percentage-based scaling rather than fixed scaling values.
react-native-dimension
The react-native-dimension package provides a simple way to handle responsive design in React Native. It offers functions like `getWidth` and `getHeight` to get dimensions based on the device's screen size. While it provides similar functionality to react-native-size-matters, it is less feature-rich and does not offer moderate scaling or a scaled stylesheet utility.
📐 react-native-size-matters

A lightweight, zero-dependencies, React-Native utility belt for scaling the size of your apps UI across different sized devices.
Installation
npm install --save react-native-size-matters
yarn add react-native-size-matters
Motivation
When developing with react-native, you need to manually adjust your app to look great on a variety of different screen sizes. That's a tedious job.
react-native-size-matters provides some simple tooling to make your scaling a whole lot easier.
The idea is to develop once on a standard ~5" screen mobile device and then simply apply the provided utils.
📖 You can read more about what led to this library on my blog post, which can be found in this repo or at Medium.
API
Scaling Functions
import { scale, verticalScale, moderateScale } from 'react-native-size-matters';
const Component = props =>
<View style={{
width: scale(30),
height: verticalScale(50),
padding: moderateScale(5)
}}/>;
-
scale(size: number)
Will return a linear scaled result of the provided size, based on your device's screen width.
-
verticalScale(size: number)
Will return a linear scaled result of the provided size, based on your device's screen height.
-
moderateScale(size: number, factor?: number)
Sometimes you don't want to scale everything in a linear manner, that's where moderateScale comes in.
The cool thing about it is that you can control the resize factor (default is 0.5).
If normal scale will increase your size by +2X, moderateScale will only increase it by +X, for example:
➡️ scale(10) = 20
➡️ moderateScale(10) = 15
➡️ moderateScale(10, 0.1) = 11
-
moderateVerticalScale(size: number, factor?: number)
Same as moderateScale, but using verticalScale instead of scale.
All scale functions can be imported using their shorthand alias as well:
import { s, vs, ms, mvs } from 'react-native-size-matters';
ScaledSheet
import { ScaledSheet } from 'react-native-size-matters';
const styles = ScaledSheet.create(stylesObject)
ScaledSheet will take the same stylesObject a regular StyleSheet will take, plus a special (optional) annotation that will automatically apply the scale functions for you:
<size>@s
- will apply scale
function on size
.
<size>@vs
- will apply verticalScale
function on size
.
<size>@ms
- will apply moderateScale
function with resize factor of 0.5 on size
.
<size>@mvs
- will apply moderateVerticalScale
function with resize factor of 0.5 on size
.
<size>@ms<factor>
- will apply moderateScale
function with resize factor of factor
on size.
<size>@mvs<factor>
- will apply moderateVerticalScale
function with resize factor of factor
on size.
ScaledSheet also supports rounding the result, simply add r
at the end of the annotation.
Example:
import { ScaledSheet } from 'react-native-size-matters';
const styles = ScaledSheet.create({
container: {
width: '100@s',
height: '200@vs',
padding: '2@msr',
margin: 5
},
row: {
padding: '10@ms0.3',
width: '50@ms',
height: '30@mvs0.3'
}
});