Tengo un elemento que quiero flotar correctamente, por ejemplo
<View style={{width: 300}}>
<Text style={{backgroundColor: "#DDD"}}>Hello</Text>
</View>
¿Cómo se Text
puede flotar / alinear a la derecha? Además, ¿por qué Text
ocupan el espacio completo de la View
, en lugar de solo el espacio para "Hola"?
react-native
Algún chico
fuente
fuente
justifyContent
,alignItems
,alignSelf
. Me pregunto cuál es la correcta.Respuestas:
Debido a que
View
es un contenedor flexible y por defecto tieneflexDirection: 'column'
yalignItems: 'stretch'
, lo que significa que sus hijos deben estirarse para llenar su ancho.(Tenga en cuenta, según los documentos , que todos los componentes en React Native son
display: 'flex'
por defecto y quedisplay: 'inline'
no existe en absoluto. De esta manera, el comportamiento predeterminado de aText
dentro de aView
en React Native difiere del comportamiento predeterminado despan
dentro de adiv
en la web; en el último caso, el intervalo no ocuparía el ancho dediv
porque aspan
es un elemento en línea de forma predeterminada. No existe ese concepto en React Native).La
float
propiedad no existe en React Native, pero hay muchas opciones disponibles para usted (con comportamientos ligeramente diferentes) que le permitirán alinear correctamente su texto. Estos son los que puedo pensar:1. Uso
textAlign: 'right'
en elText
elemento(Este enfoque no cambia el hecho de que
Text
llena todo el ancho delView
; simplemente alinea correctamente el texto dentro delText
.)2. Uso
alignSelf: 'flex-end'
en elText
Esto reduce el
Text
elemento al tamaño requerido para mantener su contenido y lo coloca al final de la dirección transversal (la dirección horizontal, por defecto) deView
.3. Uso
alignItems: 'flex-end'
en elView
Esto es equivalente a configurar
alignSelf: 'flex-end'
en todos losView
hijos de.4. Uso
flexDirection: 'row'
yjustifyContent: 'flex-end'
en elView
flexDirection: 'row'
establece que la dirección principal del diseño sea horizontal en lugar de vertical;justifyContent
es igual quealignItems
, pero controla la alineación en la dirección principal en lugar de la dirección transversal.5. Uso
flexDirection: 'row'
enView
ymarginLeft: 'auto'
en elText
Este enfoque se demuestra, en el contexto de la web y CSS real, en https://stackoverflow.com/a/34063808/1709587 .
6. Uso
position: 'absolute'
yright: 0
enText
:Al igual que en CSS real, esto elimina el
Text
"fuera de flujo", lo que significa que sus hermanos podrán superponerlo y su posición vertical estará en la parte superior deView
forma predeterminada (aunque puede establecer explícitamente una distancia desde la parte superior de la pantalla).View
usando latop
propiedad de estilo).Naturalmente, cuál de estos diversos enfoques desea utilizar, y si la elección entre ellos es importante, dependerá de sus circunstancias precisas.
fuente
<Text><Text>FLOAT TEXT</Text>multi line text here which wraps around float text
O lo mismo pero con una imagen como esto:<View><Text><Image />multi line text which wrap around float image</Text>
.Puede especificar directamente la alineación del elemento, por ejemplo:
fuente
display
valores válidos son'flex'
y'none'
.Para mí, configurar
alignItems
a un padre hizo el truco, como:fuente
No se supone que uses flotadores en React Native. React Native aprovecha el flexbox para manejar todo eso.
En su caso, probablemente querrá que el contenedor tenga un atributo
Y sobre el texto que ocupa todo el espacio, nuevamente, debe echar un vistazo a su contenedor.
Aquí hay un enlace a una guía realmente excelente en flexbox: una guía completa de Flexbox
fuente
flexDirection
: Si desea moverse horizontalmente (fila) o verticalmente (columna)justifyContent
: la dirección que quieres mover.fuente
justifyContent
no elige una dirección per se; Ofrece un montón de opciones sobre cómo se posicionan y espacian las cosas a lo largo de la dirección principal de flexión.Puede flotar: justo en reaccionar nativo usando flex:
para más detalles: https://facebook.github.io/react-native/docs/flexbox.html#flex-direction
fuente