width
, height
and flex-basis
There are two kind of FlexViews
: those with a non-flex parent and those with a flex parent.
div
parent
In the first scenario things are easy: FlexView
will behave as a standard div
with display: block
.
<div>
<FlexView /> // width as its parent, height 0
</div>
FlexView
parent
If a FlexView
is the child of another FlexView
things get much trickier!
- It will no longer behave as a block (
)display: block
- Height and width will be computed by the browser (with some black magic) relative to any other parent, sibling or children!
flex elements have two types of size: main size (direction of main axis) and cross size (direction of cross axis).
To set the main size we must use the flex-basis property. With FlexView this is achieved with the prop basis
.
<FlexView> // row
<FlexView basis={50} /> // width 50px, height 0
</FlexView>
<FlexView column> // column
<FlexView basis={50} /> // height 50px, width 0
</FlexView>
To set the cross size say “welcome back” to width
and height
!
<FlexView>
<FlexView basis={50} style={{ height: 50 }} /> // width 50px, height 50px
</FlexView>
<FlexView column>
<FlexView basis={50} style={{ width: 50 }} /> // height 50px, width 50px
</FlexView>
This means that, to properly size a flex element, you must know its parent.
(Is it a div
or a FlexView
? Is it a row or a column?)
As width
and height
are often needed, FlexView
is kind enough to expose them directly so instead of using style you can simply pass your values as width and height.
<FlexView>
<FlexView basis={50} height={50} /> // width 50px, height 50px
</FlexView>
<FlexView column>
<FlexView basis={50} width={50} /> // height 50px, width 50px
</FlexView>