Skip to content

RN Lez 08: Height, Width e Box Model

Docs: Height and Width, Layout Props

  • Impostare dimensioni fisse e flessibili
  • Usare padding, margin, border
  • Capire la differenza tra dimensioni in RN e nel web

<View style={{ width: 100, height: 100, backgroundColor: 'red' }} />
// ↑ quadrato 100×100

Tutte le dimensioni in RN sono in pixel (senza unità).


<View style={{ flex: 1 }}> {/* 50% */}
<View style={{ flex: 2 }}> {/* 100% (2× rispetto a 1) */}
┌─────────────────────────────┐
│ flex: 1 │ ← 1/3 dello spazio
├─────────────────────────────┤
│ flex: 2 │ ← 2/3 dello spazio
└─────────────────────────────┘
<View style={{ flex: 1 }}>
<View style={{ height: 60, backgroundColor: 'blue' }} /> {/* header fisso */}
<View style={{ flex: 1, backgroundColor: 'white' }} /> {/* content variabile */}
<View style={{ height: 50, backgroundColor: 'grey' }} /> {/* footer fisso */}
</View>

<View style={{ width: '50%', height: '100%', backgroundColor: 'red' }} />

Nota: le percentuali in RN funzionano solo per width/height, non per padding/margin.


┌─────────────────────────────┐
│ margin │ ← spazio esterno
│ ┌───────────────────────┐ │
│ │ border │ │ ← bordo
│ │ ┌─────────────────┐ │ │
│ │ │ padding │ │ │ ← spazio interno
│ │ │ ┌─────────────┐ │ │ │
│ │ │ │ content │ │ │ │
│ │ │ └─────────────┘ │ │ │
│ │ └─────────────────┘ │ │
│ └───────────────────────┘ │
└─────────────────────────────┘
<View style={{
width: 200,
height: 100,
padding: 20, // spazio INTERNO
margin: 10, // spazio ESTERNO
borderWidth: 2, // spessore bordo
borderColor: '#333',
borderRadius: 12, // angoli arrotondati
backgroundColor: 'white',
}}>
<Text>Contenuto</Text>
</View>

padding: 20, // tutti i lati
paddingHorizontal: 20, // left + right
paddingVertical: 10, // top + bottom
paddingTop: 10,
paddingBottom: 10,
paddingLeft: 10,
paddingRight: 10,
margin: 20, // tutti i lati
marginHorizontal: 20,
marginVertical: 10,
marginTop: 10,

In React Native il box-sizing è sempre border-box (come in CSS moderno).

// width = 200 include padding e border
<View style={{
width: 200,
padding: 20, // 40 orizzontale
borderWidth: 2, // 4 orizzontale
// spazio contenuto = 200 - 40 - 4 = 156
}} />

ProprietàDescrizioneEsempio
widthLarghezza fissawidth: 200
heightAltezza fissaheight: 100
flexQuota spazioflex: 1
%Percentualewidth: '50%'
paddingSpazio internopadding: 20
marginSpazio esternomarginVertical: 10
borderWidthSpessore bordoborderWidth: 2
borderRadiusAngoli arrotondatiborderRadius: 12

Crea una card che contiene:

  1. Titolo “Scarpe Sportive” (24px bold)
  2. Prezzo ”€ 89.99” (20px verde)
  3. Descrizione “Scarpe da corsa leggere” (14px grigio)
  4. Padding: 20
  5. Margin bottom: 15
  6. BorderRadius: 15
  7. Ombra (elevation: 3)

Usa solo StyleSheet.create() e box model.