Skip to main content

StyleSheet

StyleSheet mainly has a method to create an object containing many styles, similar to a CSS StyleSheet. This is helpful to keep style definitions at fewer locations, away from the render function. Separating concerns in your code in this manner should help readability. Named styles might also help differentiate between your components. Finally, allowing components to refer to styles by ID, it also reduces the amount of data transferred over the JS bridge.

There is also a flatten method to merge multiple styles into a single style and several constants for commonly used style definitions.

Methods

create

Takes and returns Js.t<'a> objects, with string keys and Style.t values. Individual styles can be accessed using ##, followed by the name specified as the key.

Note that using Style.array or Style.list to pass array<Style.t> or list<Style.t> is illegal within a StyleSheet, even those are valid style props for components. You may, howevever, use the flatten method to convert array<Style.t> into a valid Style.t object.

create: Js.t<'a> => Js.t<'a>

flatten

Takes an array of styles (of type Style.t) and returns a single style (also of type Style.t). Creates a Style.t object which is valid in a StyleSheet.

flatten: array<Style.t> => Style.t

Constants

hairlineWidth

To ensure the resulting line will look sharp, this specifies an integer number of pixels which should approximate the standard thickness of a thin line on the platform given the screen density.

hairlineWidth: float

absoluteFill

This is the style

{
position: 'absolute',
left: 0,
right: 0,
top: 0,
bottom: 0
}

which is frequently used to create overlays. A common use is to add these props to a style using the spread operator (...), but as ReScript does not allow the operator when fields are not explicitly set, you may use the flatten method instead.

absoluteFill: Style.t

absoluteFillObject

This is identical to absoluteFill when used with pure functions.

absoluteFillObject: Style.t

Example

Please also see the example in documentation of the Style API.

open ReactNative

let borderStyle = {
open Style
style(~borderWidth=StyleSheet.hairlineWidth, ())
}

let styles = {
open Style
StyleSheet.create({
// style may be defined inline
"container": style(~flex=1., ~flexDirection=#column, ()),
"screen": style(~width=windowWidth->dp, ()),
// or already defined elsewhere
"borderStyle": borderStyle,
"overlay": StyleSheet.absoluteFill,
})
}

let flatStyle = StyleSheet.flatten([styles["container"], styles["screen"]])