У меня есть элемент, который я хочу плавать правильно, например
<View style={{width: 300}}>
<Text style={{backgroundColor: "#DDD"}}>Hello</Text>
</View>
Как можно Text
плавать / выравнивать вправо? Кроме того, почему он Text
занимает все пространство View
вместо "Hello"?
react-native
Какой-то парень
источник
источник
justifyContent
,alignItems
,alignSelf
. Интересно, что правильно.Ответы:
Потому что
View
это гибкий контейнер и по умолчанию имеетflexDirection: 'column'
иalignItems: 'stretch'
, что означает, что его дочерние элементы должны быть растянуты, чтобы заполнить его ширину.(Обратите внимание, в соответствии с документами , что все компоненты в React Native
display: 'flex'
по умолчанию являются иdisplay: 'inline'
вообще не существуют. Таким образом, поведение по умолчанию для элементаText
внутриView
в React Native отличается от поведения по умолчанию для элементаspan
внутриdiv
в Интернете; в последнем случае span не будет заполнять ширину,div
потому что aspan
является встроенным элементом по умолчанию. В React Native такого понятия нет.)Это
float
свойство не существует в React Native, но есть множество доступных вам опций (с немного другим поведением), которые позволят вам выровнять текст по правому краю. Вот те, о которых я могу думать:1. Используйте
textAlign: 'right'
наText
элементе(Этот подход не меняет тот факт, что
Text
заполняет всю ширинуView
; он просто выравнивает текст по правому краюText
.)2. Используйте
alignSelf: 'flex-end'
наText
Это сжимает
Text
элемент до размера, необходимого для хранения его содержимого, и помещает его в конец поперечного направления (по умолчанию в горизонтальном направлении)View
.3. Используйте
alignItems: 'flex-end'
наView
Это эквивалентно установке
alignSelf: 'flex-end'
на всехView
дочерних элементах.4. Используйте
flexDirection: 'row'
иjustifyContent: 'flex-end'
наView
flexDirection: 'row'
устанавливает основное направление макета как горизонтальное, а не вертикальное;justifyContent
точно так жеalignItems
, но управляет выравниванием в основном направлении, а не в поперечном направлении.5. Используйте
flexDirection: 'row'
наView
иmarginLeft: 'auto'
наText
Этот подход демонстрируется в контексте Интернета и реального CSS на https://stackoverflow.com/a/34063808/1709587 .
6. Используйте
position: 'absolute'
иright: 0
наText
:Как и в реальном CSS, это берет
Text
«вне потока», то есть его братья и сестры смогут перекрывать его, и его вертикальное положение будетView
по умолчанию сверху (хотя вы можете явно установить расстояние от вершиныView
используяtop
свойство style).Естественно, какой из этих различных подходов вы хотите использовать - и будет ли вообще важен выбор между ними - будет зависеть от ваших конкретных обстоятельств.
источник
<Text><Text>FLOAT TEXT</Text>multi line text here which wraps around float text
Или то же самое, но с изображением, похожим на это:<View><Text><Image />multi line text which wrap around float image</Text>
.Вы можете напрямую указать выравнивание элемента, например:
источник
display
значениями являются'flex'
и'none'
.Для меня установка
alignItems
на родителя сделала свое дело, как:источник
Вы не должны использовать поплавки в React Native. React Native использует flexbox для обработки всего этого.
В вашем случае вы, вероятно, захотите, чтобы контейнер имел атрибут
Что касается текста, занимающего все пространство, опять же, вам нужно взглянуть на свой контейнер.
Вот ссылка на действительно замечательное руководство по flexbox: Полное руководство по Flexbox
источник
flexDirection
: Если вы хотите двигаться горизонтально (строка) или вертикально (столбец)justifyContent
: направление, в котором вы хотите двигаться.источник
justifyContent
не выбирает направление само по себе; он предлагает кучу вариантов того, как все расположено и разнесено вдоль основного направления изгиба.Вы можете использовать float: right в соответствии с native, используя flex:
для получения более подробной информации: https://facebook.github.io/react-native/docs/flexbox.html#flex-direction
источник