#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% высоты окна