【问题标题】:How can you float: right in React Native?你怎么能浮动:就在 React Native 中?
【发布时间】:2015-11-08 21:21:03
【问题描述】:

我有一个想要向右浮动的元素,例如

<View style={{width: 300}}>
  <Text style={{backgroundColor: "#DDD"}}>Hello</Text>
</View>

Text 如何浮动/向右对齐?还有,为什么Text 占据了View 的全部空间,而不仅仅是“Hello”的空间?

【问题讨论】:

  • 我想知道您是否找到了答案,因为前 3 个答案都说使用 3 种不同的样式属性! justifyContentalignItemsalignSelf。我想知道哪个是正确的。

标签: react-native


【解决方案1】:

你不应该在 React Native 中使用浮点数。 React Native 利用 flexbox 来处理所有这些内容。

在你的情况下,你可能希望容器有一个属性

justifyContent: 'flex-end'

关于占据整个空间的文本,您需要再次查看您的容器。

这里是 flexbox 上非常棒的指南的链接:A Complete Guide to Flexbox

【讨论】:

    【解决方案2】:

    对我来说,将 alignItems 设置为父母就可以了,比如:

    var styles = StyleSheet.create({
      container: {
        alignItems: 'flex-end'
      }
    });
    

    【讨论】:

      【解决方案3】:

      可以直接指定item的对齐方式,例如:

      textright: {    
        alignSelf: 'flex-end',  
      },
      

      【讨论】:

      • @goodniceweb 你很困惑; React Native 中 没有 内联元素。唯一有效的display 值是'flex''none'
      • 如果父级是 flexDirection: 'row' 则不起作用
      【解决方案4】:
      <View style={{ flex: 1, flexDirection: 'row', justifyContent: 'flex-end' }}>
        <Text>
        Some Text
        </Text>
      </View>
      

      flexDirection:如果要水平(行)或垂直(列)移动

      justifyContent: 你要移动的方向。

      【讨论】:

      • 有点误导; justifyContent 本身并没有选择方向;它提供了一系列关于如何沿主 flex 方向定位和间隔事物的选项。
      【解决方案5】:

      为什么 Text 占据了 View 的全部空间,而不仅仅是“Hello”的空间?

      因为View 是一个弹性容器,默认情况下有flexDirection: 'column'alignItems: 'stretch',这意味着它的子元素应该被拉伸以填充它的宽度。

      (注意,根据the docs,React Native 中的所有 组件默认为display: 'flex',而display: 'inline' 根本不存在。这样,a 的默认行为在 React Native 中 View 内的 Text 与网络上 divspan 的默认行为不同;在后一种情况下,跨度将不会填充div 因为 span 默认是内联元素,React Native 中没有这个概念。)

      文本如何浮动/向右对齐?

      float 属性在 React Native 中不存在,但有加载可供您使用的选项(行为略有不同)可以让您右对齐文本。以下是我能想到的:

      1。在Text 元素上使用textAlign: 'right'

      <View>
        <Text style={{textAlign: 'right'}}>Hello, World!</Text>
      </View>
      

      (这种方法不会改变Text 填充View 的整个宽度的事实;它只是将Text 中的文本右对齐。)

      2。在Text 上使用alignSelf: 'flex-end'

      <View>
        <Text style={{alignSelf: 'flex-end'}}>Hello, World!</Text>
      </View>
      

      这会将Text 元素缩小到容纳其内容所需的大小,并将其放在View 的横向(默认为水平方向)的末端。

      3。在View 上使用alignItems: 'flex-end'

      <View style={{alignItems: 'flex-end'}}>
        <Text>Hello, World!</Text>
      </View>
      

      这相当于在所有View 的孩子上设置alignSelf: 'flex-end'

      4。在View 上使用flexDirection: 'row'justifyContent: 'flex-end'

      <View style={{flexDirection: 'row', justifyContent: 'flex-end'}}>
        <Text>Hello, World!</Text>
      </View>
      

      flexDirection: 'row' 将布局的主方向设置为水平而不是垂直; justifyContentalignItems 类似,但控制主方向而不是交叉方向的对齐方式。

      5。在View 上使用flexDirection: 'row',在Text 上使用marginLeft: 'auto'

      <View style={{flexDirection: 'row'}}>
        <Text style={{marginLeft: 'auto'}}>Hello, World!</Text>
      </View>
      

      这种方法在 Web 和真实 CSS 的上下文中进行了演示,地址为 https://stackoverflow.com/a/34063808/1709587

      6。在Text 上使用position: 'absolute'right: 0

      <View>
        <Text style={{position: 'absolute', right: 0}}>Hello, World!</Text>
      </View>
      

      就像在真正的 CSS 中一样,这会将 Text 设为“不流动”,这意味着它的兄弟姐妹将能够重叠它,并且默认情况下它的垂直位置将位于 View 的顶部(尽管您可以使用top 样式属性显式设置与View 顶部的距离。


      当然,您想使用这些不同方法中的哪一种 - 以及它们之间的选择是否重要 - 将取决于您的具体情况。

      【讨论】:

      • 这些解决方案都不起作用。 :( 我的目标是浮动一个标题,然后来自左边的文字会绕过它。像这样 - stackoverflow.com/q/19179424/1828637 - 所以我希望这样做:&lt;Text&gt;&lt;Text&gt;FLOAT TEXT&lt;/Text&gt;multi line text here which wraps around float text。或者同样的,但有这样的图像:@ 987654385@.
      • 感谢@Mark Amery 的回答!我真的很喜欢第五(5)种方法,因为我不喜欢为视图/容器的高度设置一个常数,因为它会自动调整大小。
      • 没有。 4 对我来说是一种享受。我怀疑任何有问题的人都需要查看视图是如何包含的,这可能会影响子元素的弹性布局。
      • 您的回答非常详细且充满了出色的解决方案,以至于在您给出答案 3 年后仍然有效。干得好!
      【解决方案6】:

      您可以使用 flex 在 react native 中浮动:正确:

       <View style={{flex: 1, flexDirection: 'row'}}>
              <View style={{width: 50, height: 50, backgroundColor: 'powderblue'}} />
              <View style={{width: 50, height: 50, backgroundColor: 'skyblue'}} />
              <View style={{width: 50, height: 50, backgroundColor: 'steelblue'}} />
      </View>
      

      更多详情:https://facebook.github.io/react-native/docs/flexbox.html#flex-direction

      【讨论】:

      • 这只是重复了我已经发布的方法(这是my answer 中的选项 4),我看不到任何附加值。
      【解决方案7】:

      使用弹性

       <View style={{ flexDirection: 'row',}}>
                        <Text style={{fontSize: 12, lineHeight: 30, color:'#9394B3' }}>left</Text>
                        <Text style={{ flex:1, fontSize: 16, lineHeight: 30, color:'#1D2359', textAlign:'right' }}>right</Text>
                     </View>
      

      【讨论】:

        【解决方案8】:

        您可以使用以下这些组件来向右浮动

        alignItems 沿横向对齐子项。例如,如果子元素垂直流动,则 alignItems 控制它们水平对齐的方式。

        alignItems: 'flex-end'
        

        justifyContent 使子项在主要方向上对齐。例如,如果孩子是垂直流动的,justifyContent 控制它们垂直对齐的方式。

        justifyContent: 'flex-end'
        

        alignSelf 控制孩子在横向上的对齐方式,

        alignSelf : 'flex-end'
        

        【讨论】:

          【解决方案9】:

          在视图样式中使用 flex: 1alignItems: 'flex-end'。确保包含flex: 1。这是让元素向右浮动

          的关键

          【讨论】:

          • 这对我有用
          【解决方案10】:

          由于 react 发生了一些变化,它不再支持 float right 类,而是为此创建了一个变量并需要一个值。 使用 marginLeft : "auto"

          【讨论】:

          • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
          猜你喜欢
          • 2021-10-09
          • 1970-01-01
          • 1970-01-01
          • 2018-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多