J'ai un élément que je veux bien flotter, par exemple
<View style={{width: 300}}>
<Text style={{backgroundColor: "#DDD"}}>Hello</Text>
</View>
Comment la Text
peut-elle être flottée/alignée à droite? Aussi, pourquoi la Text
occupe-t-elle tout l'espace de la View
, au lieu de l'espace réservé à "Hello"?
pourquoi le texte occupe-t-il la totalité de l'espace de la vue au lieu de l'espace réservé à "Bonjour"?
Parce que View
est un conteneur flexible et que, par défaut, flexDirection: 'column'
et alignItems: 'stretch'
, ce qui signifie que ses enfants doivent être étirés pour remplir sa largeur. .
(Notez, par les documents , que tous les composants de React Native sont _display: 'flex'
_ par défaut et que _display: 'inline'
_ n'existe pas du tout. De cette manière, le comportement par défaut de Text
dans un View
dans React Native diffère du comportement par défaut de span
dans un div
sur le Web; dans ce dernier cas, l'envergure ne remplira pas la largeur de div
car un span
est un élément en ligne par défaut. Ce concept n'existe pas dans React Native.)
Comment le texte peut-il être flotté/aligné à droite?
La propriété float
n'existe pas dans React Native, mais il y a des charges d'options disponibles (avec des comportements légèrement différents ) qui vous permettra d’aligner correctement votre texte. Voici ceux auxquels je peux penser:
textAlign: 'right'
sur l'élément Text
_<View>
<Text style={{textAlign: 'right'}}>Hello, World!</Text>
</View>
_
(Cette approche ne change pas le fait que Text
remplit toute la largeur de View
; elle aligne simplement le texte à l'intérieur de Text
.)
alignSelf: 'flex-end'
sur le Text
_<View>
<Text style={{alignSelf: 'flex-end'}}>Hello, World!</Text>
</View>
_
Cela réduit l'élément Text
à la taille requise pour contenir son contenu et le place à la fin de la direction transversale (la direction horizontale, par défaut) de View
.
alignItems: 'flex-end'
sur le View
_<View style={{alignItems: 'flex-end'}}>
<Text>Hello, World!</Text>
</View>
_
Cela équivaut à définir _alignSelf: 'flex-end'
_ sur tous les enfants de View
.
flexDirection: 'row'
et justifyContent: 'flex-end'
sur le View
_<View style={{flexDirection: 'row', justifyContent: 'flex-end'}}>
<Text>Hello, World!</Text>
</View>
_
_flexDirection: 'row'
_ définit la direction principale de la mise en page pour être horizontale au lieu de verticale; justifyContent
est identique à alignItems
, mais contrôle l'alignement dans la direction principale au lieu de la direction transversale.
flexDirection: 'row'
sur le View
et marginLeft: 'auto'
sur le Text
_<View style={{flexDirection: 'row'}}>
<Text style={{marginLeft: 'auto'}}>Hello, World!</Text>
</View>
_
Cette approche est démontrée, dans le contexte du Web et du CSS réel, à l’adresse https://stackoverflow.com/a/34063808/1709587 .
position: 'absolute'
et right: 0
sur Text
:_<View>
<Text style={{position: 'absolute', right: 0}}>Hello, World!</Text>
</View>
_
Comme dans le vrai CSS, cela prend le "débit" de Text
, ce qui signifie que ses frères et sœurs pourront le chevaucher et que sa position verticale sera au sommet du View
par défaut (bien que vous puissiez définir explicitement une distance à partir du haut). View
en utilisant la propriété de style top
).
Naturellement, laquelle de ces différentes approches vous voulez utiliser - et si le choix entre elles compte le plus - dépend de votre situation précise.
Vous pouvez directement spécifier l'alignement de l'élément, par exemple:
textright: {
alignSelf: 'flex-end',
},
Pour moi, paramétrer alignItems
à un parent a fait l'affaire, comme ceci:
var styles = StyleSheet.create({
container: {
alignItems: 'flex-end'
}
});
Vous n'êtes pas censé utiliser de flottants dans React Native. React Native utilise la flexbox pour gérer tout cela.
Dans votre cas, vous voudrez probablement que le conteneur ait un attribut
justifyContent: 'flex-end'
Et à propos du texte prenant tout l'espace, encore une fois, vous devez regarder votre conteneur.
Voici un lien vers un très bon guide sur flexbox: n guide complet sur Flexbox
<View style={{ flex: 1, flexDirection: 'row', justifyContent: 'flex-end' }}>
<Text>
Some Text
</Text>
</View>
flexDirection
: si vous souhaitez vous déplacer horizontalement (ligne) ou verticalement (colonne)
justifyContent
: la direction que vous souhaitez déplacer.