Arah Flexbox, JustifyContent dan AlignItems
Kawal susunan anak dalam View menggunakan flexDirection, justifyContent dan alignItems untuk memusatkan, menjarakkan serta menyelaraskan elemen.
Arah Flexbox, JustifyContent dan AlignItems ialah pelajaran React Native Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran React Native Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus React Native Academy merangkumi sejumlah 4 pelajaran.
Flexbox ialah Sistem Susun Atur Lalai
React Native menggunakan Flexbox sebagai algoritma susun aturnya untuk setiap komponen View — tiada susun atur blok atau sebaris seperti dalam CSS. Setiap View secara automatik ialah bekas Flex, bermakna anak-anaknya diletakkan mengikut peraturan Flexbox secara lalai. Perbezaan utama daripada Flexbox CSS web ialah flexDirection lalai React Native ialah 'column', bukannya 'row' seperti di web. Ini bermakna anak-anak disusun secara menegak secara lalai, selaras dengan cara kebanyakan skrin mudah alih disusun.
import { View, StyleSheet } from 'react-native';
export default function DefaultFlex() {
return (
// No flexDirection needed — 'column' is the default
<View style={styles.container}>
<View style={styles.box1} />
<View style={styles.box2} />
<View style={styles.box3} />
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1, backgroundColor: '#f5f5f5', padding: 16 },
box1: { height: 60, backgroundColor: '#ff6b6b', marginBottom: 8 },
box2: { height: 60, backgroundColor: '#4f86f7', marginBottom: 8 },
box3: { height: 60, backgroundColor: '#51cf66' },
});flexDirection: row berbanding column
flexDirection menetapkan paksi utama bekas Flex. Dengan 'column' (lalai), anak-anak disusun dari atas ke bawah. Dengan 'row', anak-anak diletakkan dari kiri ke kanan. Nilai 'column-reverse' dan 'row-reverse' membalikkan susunan. Menukar flexDirection juga menukar paksi yang dipengaruhi oleh justifyContent dan alignItems — justifyContent sentiasa berfungsi sepanjang paksi utama, manakala alignItems berfungsi sepanjang paksi silang. Ini ialah sifat Flexbox yang paling memberi kesan untuk difahami.
import { View, StyleSheet } from 'react-native';
export default function DirectionDemo() {
return (
<View style={{ flex: 1, gap: 16, padding: 16 }}>
{/* Column: children stack vertically (default) */}
<View style={{ flexDirection: 'column', height: 120, backgroundColor: '#f0f0f0' }}>
<View style={styles.box} />
<View style={styles.box} />
</View>
{/* Row: children sit side by side */}
<View style={{ flexDirection: 'row', height: 60, backgroundColor: '#f0f0f0' }}>
<View style={styles.box} />
<View style={styles.box} />
</View>
</View>
);
}
const styles = StyleSheet.create({
box: { width: 50, height: 50, backgroundColor: '#4f86f7', margin: 4 },
});justifyContent: Menjajarkan Sepanjang Paksi Utama
justifyContent mengawal cara anak-anak diagihkan sepanjang paksi utama (menegak untuk lajur, mendatar untuk baris). Nilai yang paling berguna ialah: 'flex-start' (himpun di permulaan, lalai), 'flex-end' (himpun di penghujung), 'center' (pusatkan kumpulan), 'space-between' (anak pertama dan terakhir menyentuh tepi, dengan jarak sama antara anak-anak yang lain), 'space-around' (ruang sama di sekeliling setiap anak), dan 'space-evenly' (ruang sama termasuk di tepi). 'space-between' amat biasa digunakan untuk bar navigasi dan baris butang tindakan.
import { View, Text, StyleSheet } from 'react-native';
export default function SpaceBetween() {
return (
<View style={styles.row}>
<Text style={styles.tab}>Home</Text>
<Text style={styles.tab}>Search</Text>
<Text style={styles.tab}>Profile</Text>
</View>
);
}
const styles = StyleSheet.create({
row: {
flexDirection: 'row',
justifyContent: 'space-between', // distribute across full width
paddingHorizontal: 24,
paddingVertical: 16,
backgroundColor: '#fff',
borderTopWidth: 1,
borderTopColor: '#eee',
},
tab: { fontSize: 14, color: '#666' },
});alignItems: Menjajarkan Sepanjang Paksi Silang
alignItems mengawal cara anak-anak diletakkan pada paksi silang (berserenjang dengan paksi utama). Untuk bekas lajur, ia menjajarkan anak-anak secara mendatar; untuk bekas baris, ia menjajarkan anak-anak secara menegak. Nilainya ialah: 'flex-start' (lalai untuk lajur pada Android, item rapat pada permulaan), 'flex-end', 'center' dan 'stretch' (item mengembang untuk memenuhi paksi silang — ini ialah lalai pada iOS dan sesuai untuk susun atur lajur yang memerlukan anak-anak selebar penuh). 'baseline' menjajarkan garis dasar teks anak-anak.
import { View, Text, StyleSheet } from 'react-native';
export default function AlignDemo() {
return (
<View style={styles.container}>
{/* Row: alignItems centers children vertically */}
<View style={styles.row}>
<Text style={styles.smallText}>Small</Text>
<Text style={styles.largeText}>LARGE</Text>
<Text style={styles.smallText}>Small</Text>
</View>
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1, padding: 20 },
row: {
flexDirection: 'row',
alignItems: 'center', // vertically center all items
backgroundColor: '#e8f0fe',
padding: 16,
borderRadius: 8,
},
smallText: { fontSize: 12, color: '#666', marginHorizontal: 8 },
largeText: { fontSize: 28, fontWeight: 'bold', color: '#111', marginHorizontal: 8 },
});Memusatkan Kandungan dengan flex, justify dan align
Corak yang sangat biasa ialah memusatkan kandungan secara menegak dan mendatar — untuk skrin percikan, keadaan kosong atau penunjuk pemuatan. Tetapkan flex: 1 pada bekas supaya ia memenuhi ruang yang tersedia, kemudian gunakan justifyContent: 'center' dan alignItems: 'center'. Memandangkan flexDirection lalai ialah lajur, gabungan ini memusatkan anak-anak di tengah skrin secara menegak dan mendatar. Gabungan tiga sifat ini mungkin merupakan resipi susun atur yang paling banyak digunakan dalam React Native.
import { View, Text, StyleSheet } from 'react-native';
export default function CenteredScreen() {
return (
<View style={styles.container}>
<Text style={styles.emoji}>🎯</Text>
<Text style={styles.title}>Nothing here yet</Text>
<Text style={styles.subtitle}>Add your first item to get started</Text>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center', // vertical center (column main axis)
alignItems: 'center', // horizontal center (column cross axis)
backgroundColor: '#f8f9fa',
},
emoji: { fontSize: 56, marginBottom: 16 },
title: { fontSize: 22, fontWeight: 'bold', color: '#333' },
subtitle: { fontSize: 14, color: '#999', marginTop: 8, textAlign: 'center' },
});alignSelf: Mengatasi Penjajaran Paksi Silang
alignSelf mengatasi alignItems induk untuk anak tertentu. Ia menerima nilai yang sama seperti alignItems: 'auto' (gunakan tetapan induk), 'flex-start', 'flex-end', 'center' dan 'stretch'. Ini berguna apabila kebanyakan adik-beradik berkongsi satu penjajaran tetapi seorang anak memerlukan layanan yang berbeza — contohnya, baris ikon yang salah satunya lebih besar dan perlu dijajarkan ke atas, manakala yang lain dipusatkan. Gunakan alignSelf secara berhemat; melaraskan alignItems induk dan menggunakan View pembalut apabila perlu lebih mudah diselenggara.
import { View, Text, StyleSheet } from 'react-native';
export default function AlignSelfExample() {
return (
<View style={styles.row}>
<View style={styles.boxSmall} />
{/* This box aligns to flex-end independently */}
<View style={[styles.boxSmall, { alignSelf: 'flex-end', backgroundColor: 'red' }]} />
<View style={styles.boxSmall} />
</View>
);
}
const styles = StyleSheet.create({
row: {
flexDirection: 'row',
alignItems: 'center', // default for siblings
height: 100,
backgroundColor: '#e8f0fe',
padding: 8,
gap: 8,
},
boxSmall: { width: 50, height: 50, backgroundColor: '#4f86f7', borderRadius: 6 },
});gap, rowGap dan columnGap
Daripada menambah margin pada setiap anak, gunakan gap pada bekas untuk menetapkan jarak seragam antara anak Flex. gap menetapkan kedua-dua jarak baris dan lajur, manakala rowGap dan columnGap mengawalnya secara berasingan. Ini menghapuskan keperluan menggunakan marginBottom pada semua anak kecuali anak terakhir, atau helah menambah margin negatif pada bekas. Sokongan gap ditambahkan dalam React Native 0.71 (tersedia dalam Expo SDK 48+), jadi semak versi RN anda sebelum menggunakannya dalam projek lama.
import { View, StyleSheet } from 'react-native';
export default function GapExample() {
return (
<View style={styles.container}>
{[1, 2, 3, 4].map(n => (
<View key={n} style={styles.card} />
))}
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: 'row',
flexWrap: 'wrap',
gap: 12, // equal gap between all children
padding: 16,
backgroundColor: '#f5f5f5',
},
card: {
width: '47%', // two columns
height: 100,
backgroundColor: '#4f86f7',
borderRadius: 10,
},
});flexWrap: Membalut Anak ke Baris Seterusnya
Secara lalai, anak Flex mengecut supaya muat dalam satu baris dan tidak pernah dibalut. Tetapkan flexWrap: 'wrap' pada bekas supaya anak-anak boleh dibalut ke baris seterusnya (untuk arah baris) atau lajur seterusnya (untuk arah lajur) apabila ruang tidak lagi mencukupi. Ini ialah asas untuk awan tag, susun atur seperti grid dengan lebar peratusan dan sebarang UI yang itemnya perlu mengalir ke baris seterusnya secara semula jadi. 'nowrap' ialah lalai; 'wrap-reverse' membalut dalam arah bertentangan.
import { View, Text, StyleSheet } from 'react-native';
const tags = ['React Native', 'Mobile', 'iOS', 'Android', 'JavaScript', 'Flexbox', 'Expo'];
export default function TagCloud() {
return (
<View style={styles.container}>
{tags.map(tag => (
<View key={tag} style={styles.tag}>
<Text style={styles.tagText}>{tag}</Text>
</View>
))}
</View>
);
}
const styles = StyleSheet.create({
container: { flexDirection: 'row', flexWrap: 'wrap', gap: 8, padding: 16 },
tag: { backgroundColor: '#e8f0fe', paddingHorizontal: 12, paddingVertical: 6, borderRadius: 16 },
tagText: { color: '#4f86f7', fontSize: 13, fontWeight: '500' },
});Susun Atur Pengepala Praktikal
Gunakan pengetahuan Flexbox anda untuk membina corak aplikasi mudah alih yang biasa: pengepala navigasi dengan butang kembali di sebelah kiri, tajuk berpusat dan ikon menu di sebelah kanan. Gunakan flexDirection: 'row' dan alignItems: 'center' pada bekas pengepala. Berikan flex: 1 kepada tajuk supaya ia mengembang untuk memenuhi ruang yang tinggal dan memusatkan dirinya antara ikon sisi yang lebarnya tetap. Cara ini lebih kemas daripada menggunakan position: 'absolute' untuk pemusatan dan mengendalikan panjang tajuk yang berbeza dengan betul.
import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
export default function Header({ title, onBack, onMenu }) {
return (
<View style={styles.header}>
<TouchableOpacity style={styles.sideBtn} onPress={onBack}>
<Text style={styles.icon}>←</Text>
</TouchableOpacity>
<Text style={styles.title} numberOfLines={1}>{title}</Text>
<TouchableOpacity style={styles.sideBtn} onPress={onMenu}>
<Text style={styles.icon}>⋯</Text>
</TouchableOpacity>
</View>
);
}
const styles = StyleSheet.create({
header: {
flexDirection: 'row',
alignItems: 'center',
paddingHorizontal: 16,
paddingVertical: 12,
backgroundColor: '#fff',
borderBottomWidth: StyleSheet.hairlineWidth,
borderBottomColor: '#ddd',
},
sideBtn: { width: 40, alignItems: 'center' },
title: { flex: 1, fontSize: 18, fontWeight: '600', color: '#111', textAlign: 'center' },
icon: { fontSize: 22, color: '#333' },
});Menyahpepijat Susun Atur Flexbox
Ralat Flexbox biasa berlaku semasa membangunkan susun atur. Teknik nyahpepijat yang berguna termasuk: tambahkan backgroundColor sementara pada setiap View supaya sempadannya kelihatan, gunakan React DevTools untuk memeriksa susun atur yang dikira dalam pepohon komponen, semak sama ada flex: 1 tiada pada bekas leluhur (bekas tanpa flex: 1 akan mengecut kepada ketinggian sifar dan menyebabkan anak-anaknya tidak kelihatan), serta sahkan bahawa flexDirection ialah nilai yang anda kehendaki (ingat, lalai React Native ialah lajur, bukan baris). Membuang semua gaya dan menambahnya semula satu demi satu ialah cara yang boleh dipercayai untuk mengasingkan ralat susun atur.
// Debug technique: color-code your Views temporarily
const debugStyles = StyleSheet.create({
container: { flex: 1, backgroundColor: 'rgba(255,0,0,0.1)' }, // red tint
inner: { backgroundColor: 'rgba(0,0,255,0.1)' }, // blue tint
text: { backgroundColor: 'rgba(0,255,0,0.1)' }, // green tint
});
// Then you can see exactly where each View starts and ends
// Remove these debug colors before shipping!Baris dengan Ikon, Teks dan Tindakan
Salah satu corak UI mudah alih yang paling biasa ialah baris senarai dengan ikon di sebelah kiri, teks di tengah dan butang tindakan di sebelah kanan. Laksanakannya dengan flexDirection: 'row' pada bekas, alignItems: 'center' untuk menjajarkan semua anak secara menegak, View ikon bersaiz tetap di sebelah kiri, kawasan teks dengan flex: 1 di tengah (supaya mengembang untuk memenuhi ruang yang tersedia), dan butang tindakan bersaiz tetap di sebelah kanan. Corak ini muncul dalam skrin tetapan, senarai kenalan dan sebarang paparan jadual yang padat dengan data dalam aplikasi mudah alih.
import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
export default function SettingsRow({ icon, label, subtitle, onPress }) {
return (
<TouchableOpacity style={styles.row} onPress={onPress}>
{/* Left: icon */}
<View style={styles.iconContainer}>
<Text style={{ fontSize: 22 }}>{icon}</Text>
</View>
{/* Middle: text content — flex: 1 fills space */}
<View style={{ flex: 1 }}>
<Text style={styles.label} numberOfLines={1}>{label}</Text>
{subtitle && <Text style={styles.subtitle} numberOfLines={1}>{subtitle}</Text>}
</View>
{/* Right: chevron */}
<Text style={styles.chevron}>›</Text>
</TouchableOpacity>
);
}
const styles = StyleSheet.create({
row: { flexDirection: 'row', alignItems: 'center', paddingHorizontal: 16, paddingVertical: 12, backgroundColor: '#fff', gap: 12 },
iconContainer: { width: 36, height: 36, borderRadius: 8, backgroundColor: '#f0f4ff', alignItems: 'center', justifyContent: 'center' },
label: { fontSize: 16, color: '#222' },
subtitle: { fontSize: 13, color: '#999', marginTop: 2 },
chevron: { fontSize: 22, color: '#ccc', fontWeight: '300' },
});Semakan Pantas
Uji pemahaman anda tentang konsep Pembangunan Mudah Alih React Native daripada pelajaran ini.
Imbas Kembali Pelajaran
Dalam pelajaran ini, anda telah mempelajari: flexDirection menetapkan paksi utama (lajur secara lalai dalam React Native, bukan baris), justifyContent mengagihkan elemen anak sepanjang paksi utama, dan alignItems menjajarkan elemen anak pada paksi silang. Seterusnya, kita akan meneroka sifat flex serta saiz responsif merentas dimensi skrin.
Pelajari JavaScript dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Arah Flexbox, JustifyContent dan AlignItems” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran React Native Academy, termasuk “Arah Flexbox, JustifyContent dan AlignItems”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus React Native Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Arah Flexbox, JustifyContent dan AlignItems”?
Kawal susunan anak dalam View menggunakan flexDirection, justifyContent dan alignItems untuk memusatkan, menjarakkan serta menyelaraskan elemen. Anda berlatih React Native Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan React Native Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran React Native Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Arah Flexbox, JustifyContent dan AlignItems” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran React Native Academy ini?
Ya. Setiap pelajaran React Native Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- StyleSheet.create dan Gaya Sebaris
- Arah Flexbox, JustifyContent dan AlignItems
- flex, flexGrow dan Saiz Responsif
- Membina Grid Kad Responsif