Какой эквивалент React Native { flex: 1} для React JS?

#javascript #css #reactjs #react-native #flexbox

#javascript #css #reactjs #react-native #flexbox

Вопрос:

Я много программировал на React Native и пытаюсь использовать React js (только веб), но я не знаю, как создать простое представление, которое занимает весь экран, чтобы начать воспроизведение со всеми компонентами.

Позвольте мне объяснить:

В React Native я обрабатываю размеры представления с помощью flex, что-то вроде этого:

 <View style={{ flex: 1 }}>
    <View style={{ flex: 0.5, backgroundColor: 'blue' }}>
      <Text>I'm a blue 50% screen View!</Text>
    </View>
    <View style={{ flex: 0.5, backgroundColor: 'yellow' }}>
      <Text>I'm a yellow 50% screen View!</Text>        
    </View>
</View>
  

Но в React JS мне приходится использовать теги div, которые не распознают flex.
Я имею в виду, я не могу этого сделать:

 <div style={{ flex: 1 }}>
    <div style={{ flex: 0.5, backgroundColor: 'blue' }}>
      <p>I'm a blue 50% screen View!</p>
    </div>
    <div style={{ flex: 0.5, backgroundColor: 'yellow' }}>
      <p>I'm a yellow 50% screen View!</p>        
    </div>
</div>
  

Как я должен использовать эти стили в React js для divs, чтобы получить результаты в процентах?

Комментарии:

1. Что вы имеете в виду, «я должен использовать теги div, которые не распознают flex.» ?

2. Я имею в виду, что я создаю div в стиле flex 1, и ничего не происходит вместо того, что я бы сделал в react native

3. Вы все еще можете использовать div { flex: 1 } в своем css. Это сокращение для flex-grow: 1;flex-shrink: 1; flex-basis: 0%; }

4. Я делаю, и ничего не происходит, div не заполняет весь экран.

Ответ №1:

React Native использует свою собственную реализацию flexbox — https://facebook.github.io/react-native/docs/flexbox

В React вы используете CSS flexbox — https://developer.mozilla.org/en-US/docs/Glossary/Flexbox

Flexbox работает в React Native так же, как и в CSS в Интернете, за несколькими исключениями. Значения по умолчанию разные, в flexDirection по умолчанию используется столбец, а не строка, а параметр flex поддерживает только одно число.

В css вам также необходимо объявить родительский контейнер как

 .flex-container {
  display: flex;
}
  

и это, вероятно, то, чего вам не хватает.

чистая CSS-версия вашего flex, вероятно, будет выглядеть следующим образом (стили как «строковая» версия):

 <div style="display: flex; flex-direction: column; height: 100vh;">
    <div style="flex: 1; background-color: blue;">
      <p>I'm a blue 50% screen View!</p>
    </div>
    <div style="flex: 1; background-color: yellow;">
      <p>I'm a yellow 50% screen View!</p>        
    </div>
</div>
  

Комментарии:

1. Добавление display: flex; сделайте так, чтобы flexDirection работало, но я не могу настроить, чтобы мой div отображал весь экран, как это было бы при настройке flex: 1 в react native

2. @MtgKhaJeskai codepen.io/anon/pen/jJXrLd это то, чего вы хотите?

3. Да, что-то вроде, но это не работает. Если я создам div с flex: 1, то два других div внутри, которые имеют 1 . flex: 0.2, а другой flex: 0.8, должны означать, что первый составляет 20% от родительского div, а другой — 80%, но это не работает. И если вы являетесь родительским div, если у этого div есть flex: 1, он должен заполнять весь экран

4. Вам также нужно задать 100% высоту для элементов body и html . Также родительский элемент должен иметь высоту 100%

5. @MtgKhaJeskai это 0,2 от общего значения flex (0.2 0.8 = 1) => 0.2/1 = > 20% высоты родительского элемента управления — поэтому, если вы хотите использовать его в полноэкранном режиме — ваш родительский элемент управления должен составлять 100% высоты окна