0Pricing
React Academy · บทเรียน

การตกแต่งด้วย StyleSheet API และ Flexbox

เขียนสไตล์สำหรับมือถือด้วย StyleSheet.create และ Flexbox โดยไม่ใช้ชื่อคลาส CSS

การตกแต่งด้วย StyleSheet API และ Flexbox เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

ไม่มี CSS ใน React Native

React Native ใช้ส่วนติดต่อการจัดสไตล์ด้วย JavaScript โดยไม่มีไฟล์ CSS ไม่มีชื่อคลาส และไม่มีการใช้สไตล์แบบลำดับชั้น สไตล์เป็นออบเจ็กต์ JavaScript ที่นำไปใช้ผ่านพร็อพ style

StyleSheet.create()

ห่อออบเจ็กต์สไตล์ด้วย StyleSheet.create() เพื่อประสิทธิภาพที่ดีขึ้น (สไตล์จะได้รับการตรวจสอบและปรับให้เหมาะสมเพียงครั้งเดียว) และเพื่อให้ IDE เติมโค้ดอัตโนมัติ

import { StyleSheet, View, Text } from 'react-native';

function Card() {
  return (
    <View style={styles.card}>
      <Text style={styles.title}>Hello</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  card: { padding: 16, backgroundColor: '#fff', borderRadius: 8, shadowColor: '#000', shadowOpacity: 0.1, elevation: 2 },
  title: { fontSize: 18, fontWeight: 'bold', color: '#111' },
});

สไตล์แบบอินไลน์

ใช้สไตล์โดยตรงผ่านพร็อพ style ไวยากรณ์แบบอาร์เรย์จะรวมออบเจ็กต์สไตล์หลายรายการเข้าด้วยกัน โดยสไตล์ที่อยู่ถัดไปจะแทนที่สไตล์ก่อนหน้า

<View style={{ padding: 16, backgroundColor: '#f5f5f5' }} />

// Array merging:
<Text style={[styles.base, isActive && styles.active, { marginTop: 8 }]} />

เฟล็กซ์บ็อกซ์ใน React Native

React Native ใช้เฟล็กซ์บ็อกซ์เป็นค่าเริ่มต้นสำหรับการจัดเลย์เอาต์ แต่มีค่าเริ่มต้นแตกต่างจากเว็บ โดย flexDirection มีค่าเริ่มต้นเป็น 'column' (ไม่ใช่ 'row') และ flex: 1 จะขยายเต็มพื้นที่ที่มีอยู่

const styles = StyleSheet.create({
  container: {
    flex: 1,                   // fill available space
    flexDirection: 'column',   // default in RN (web default is 'row')
    justifyContent: 'center',  // main axis alignment
    alignItems: 'center',      // cross axis alignment
  },
});

เลย์เอาต์แบบแถว

ใช้ flexDirection: 'row' เพื่อจัดองค์ประกอบลูกในแนวนอน ซึ่งทำงานคล้ายกับ CSS display: flex; flex-direction: row

const styles = StyleSheet.create({
  row: {
    flexDirection: 'row',
    alignItems: 'center',
    gap: 12, // gap is supported in RN 0.71+
  },
});

<View style={styles.row}>
  <Image source={avatar} />
  <Text>{username}</Text>
</View>

เฟล็กซ์เทียบกับความกว้างและความสูง

ใช้ flex: N เพื่อกำหนดขนาดตามสัดส่วน flex: 1 จะใช้พื้นที่ที่เหลือทั้งหมด ส่วน flex: 2 จะได้รับพื้นที่เป็นสองเท่าขององค์ประกอบพี่น้องที่มี flex: 1

// Sidebar takes 1/3, content takes 2/3:
<View style={{ flexDirection: 'row', flex: 1 }}>
  <View style={{ flex: 1, backgroundColor: '#eee' }}>Sidebar</View>
  <View style={{ flex: 2 }}>Content</View>
</View>

การจัดตำแหน่งแบบสัมบูรณ์

ใช้ position: 'absolute' ร่วมกับ top, right, bottom และ left สำหรับองค์ประกอบแบบซ้อนทับ ซึ่งเหมือนกับการจัดตำแหน่งแบบสัมบูรณ์ของ CSS ภายในองค์ประกอบแม่แบบสัมพัทธ์

const badge = StyleSheet.create({
  badge: {
    position: 'absolute',
    top: -4,
    right: -4,
    width: 16,
    height: 16,
    borderRadius: 8,
    backgroundColor: 'red',
  },
});

สไตล์เฉพาะแพลตฟอร์ม

ใช้ Platform.OS หรือ Platform.select() เพื่อใช้สไตล์ที่แตกต่างกันบน iOS และ Android

import { Platform } from 'react-native';

const styles = StyleSheet.create({
  shadow: {
    ...Platform.select({
      ios: { shadowColor: '#000', shadowOpacity: 0.2, shadowRadius: 4 },
      android: { elevation: 4 },
    }),
  },
});

สี

React Native รองรับสตริงสีแบบ CSS (เลขฐานสิบหก, rgb และชื่อสี) รวมถึงส่วนติดต่อ PlatformColor สำหรับสีของระบบ

import { PlatformColor } from 'react-native';

// System color — adapts to dark mode automatically:
const labelColor = PlatformColor('label', '#000'); // iOS 'label' semantic color

สไตล์แบบไดนามิกด้วยพร็อพ

คำนวณสไตล์จากพร็อพภายในคอมโพเนนต์ ส่งฟังก์ชันให้กับ StyleSheet หรือคำนวณออบเจ็กต์สไตล์แบบอินไลน์

function Badge({ color, size = 16 }: { color: string; size?: number }) {
  return (
    <View
      style={[
        styles.badge,
        { backgroundColor: color, width: size, height: size, borderRadius: size / 2 },
      ]}
    />
  );
}

const styles = StyleSheet.create({ badge: { position: 'absolute' } });

ตรวจสอบความเข้าใจ

ค่าเริ่มต้นของ flexDirection ใน React Native คืออะไร (ซึ่งแตกต่างจากเว็บ)

สรุปทบทวน

ใช้ StyleSheet.create() สำหรับสไตล์ที่ได้รับการปรับให้เหมาะสม และนำไปใช้ผ่านพร็อพ style เฟล็กซ์บ็อกซ์ของ React Native มีค่าเริ่มต้นเป็น flexDirection: 'column' และ flex: 1 จะใช้พื้นที่ที่เหลือ ใช้ Platform.select() สำหรับสไตล์เงาเฉพาะ OS

คำถามที่พบบ่อย

บทเรียน “การตกแต่งด้วย StyleSheet API และ Flexbox” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การตกแต่งด้วย StyleSheet API และ Flexbox” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การตกแต่งด้วย StyleSheet API และ Flexbox”

เขียนสไตล์สำหรับมือถือด้วย StyleSheet.create และ Flexbox โดยไม่ใช้ชื่อคลาส CSS คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การตกแต่งด้วย StyleSheet API และ Flexbox” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม

ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คอมโพเนนต์หลักของ React Native เทียบกับ DOM บนเว็บ
  2. การตกแต่งด้วย StyleSheet API และ Flexbox
  3. การนำทางด้วย Expo Router
  4. การเข้าถึง API ของอุปกรณ์: กล้อง ตำแหน่ง และการแจ้งเตือนแบบพุช
← กลับไปที่ React Academy