React Native: свойство 'top' ведет себя так, как ожидается, но свойство bottom не имеет - PullRequest
0 голосов
/ 06 января 2020

В моем приложении React Native есть следующий код:

<View
  style={{
    width: 50,
    height: 50,
    borderWidth: 1,
  }}
>
  <View style={{
    width: 5,
    height: 5,
    backgroundColor: 'red',
    top: 10,
    left: 10
  }}></View>
</View>

Как и ожидалось, это приводит к:

enter image description here

Однако, если я поменяю top на bottom, я получу это:

enter image description here

Если я изменю дочерний элемент на position: absolute, это работает как ожидалось:

enter image description here

Что я хочу знать:

1) Почему красный точка go над черным квадратом на втором изображении?

2) Поскольку красная точка является единственным потомком черного квадрата, почему добавление position: absolute что-то меняет?

3 ) Почему top ведет себя так, как ожидается на всех трех изображениях, а bottom ведет себя так, как ожидается, только на третьем?

Ответы [ 2 ]

2 голосов
/ 06 января 2020

1) Потому что без указания position: absolute все команды положения относятся к тому месту, в котором элемент находится изначально.

2) Изменяется способ интерпретации команд положений (вверху, слева, справа, снизу) относительно родительский элемент

3) Поскольку top относится к одному и тому же месту, независимо от того, на что установлено значение position, но buttom может относиться к другому месту в зависимости от того, установлено ли для position значение относительный или абсолютный

2 голосов
/ 06 января 2020

В React-Native каждый элемент макета по умолчанию относительно позиционирован, поэтому 10px относительно нижней части начальной позиции располагается вне контейнера, это правильное поведение.

Установите абсолютную позицию дочернего элемента, если вы хотите расположить точку напротив границ контейнера.

    <View
      style={{
        width: 50,
        height: 50,
        borderWidth: 1,
        position: 'relative' // by default anyway
      }}
    >
      <View
        style={{
          width: 5,
          height: 5,
          backgroundColor: "red",
          bottom: 10,
          left: 10,
          position: 'absolute'
        }}
      />
    </View>
...