StyleSheet — nedir, React Native'de stil oluşturma

Yazar: IT Sectr Yayınlanma: 2026-07-06 Okuma süresi: 10 dk

StyleSheet — web geliştirmedeki CSS stil sayfalarına benzer şekilde, bileşen stilleri oluşturmak ve yönetmek için bir React Native API'si. StyleSheet.create, stil nesnelerini sayısal tanımlayıcılara dönüştürerek ve JavaScript-Native köprüsü üzerinden veri aktarımını azaltarak performansı optimize eder. Inline stillerin aksine, create ile oluşturma modül başlatma sırasında bir kez gerçekleşir. API hakkında daha fazla bilgi için Meta belgelerine bakın.

Önemli Noktalar

  • StyleSheet — sayısal tanımlayıcılarla optimizasyon ile bildirimsel stil oluşturma API'si
  • StyleSheet.create bir stil nesnesini ID'lere dönüştürür, JS-Native köprüsü üzerinden aktarılan verileri azaltır
  • Inline stiller her render'da yeni nesneler oluşturur, StyleSheet.create — modül yüklemesinde bir kez
  • Flexbox — React Native'de düzenin temeli: flexDirection, alignItems, justifyContent ve flex
  • Modüler organizasyon StyleSheet.flatten ile kompozisyon yoluyla stilleri ayrı dosyalara çıkarmayı önerir

StyleSheet nedir?

StyleSheet — bileşen stillerini tanımlamak için yerleşik bir React Native API'si. Web geliştirmedeki CSS'nin aksine, RN stilleri tanımlamak için JavaScript nesneleri kullanır. StyleSheet.create — ana yöntem — bir stil nesnesi alır ve sayısal tanımlayıcılarla bir nesne döndürür.

StyleSheet, React Native çekirdeğinin bir parçasıdır ve ek paket kurulumu gerektirmez. Meta'ya (2026) göre, React Native projelerinin %95'i statik stiller için StyleSheet.create kullanır. Alternatifler: styled-components, Emotion, NativeWind (RN için Tailwind) — ancak yerleşik StyleSheet çekirdek için standart olmaya devam ediyor.

Tarih ve evrim

React Native'in (2015) ilk sürümlerinde, stiller yalnızca inline nesneler olarak tanımlanıyordu. StyleSheet.create, RN 0.4'te bir optimizasyon olarak ortaya çıktı. Konsept CSS'den alınmıştır: okunabilirlik ve performans için stilleri mantıktan ayırın. Yıllar içinde API genişledi: absoluteFill, hairlineWidth, flatten eklendi.

StyleSheet.create vs inline stiller

StyleSheet.create ile inline stiller arasındaki fark performans için kritiktir. Inline stil, bileşenin her render'ında oluşturulan sıradan bir JavaScript nesnesidir. StyleSheet.create — modül yüklemesi sırasında bir kez oluşturulan ve sayısal bir ID'ye dönüştürülen bir nesne.

Inline stil iletirken, React Native her seferinde tüm nesneyi JavaScript-Native köprüsü üzerinden gönderir. Karmaşık stillere sahip bir bileşen için bu, her render'da düzinelerce özelliğin aktarılması anlamına gelir. StyleSheet.create yalnızca sayısal bir tanımlayıcı iletir ve köprü yükünü azaltır.

js
// StyleSheet.create — optimize edilmiş yaklaşım
const styles = StyleSheet.create({
  container: {
    flex: 1,
    padding: 16,
    backgroundColor: '#f5f5f5',
    borderRadius: 8,
  },
  title: {
    fontSize: 18,
    fontWeight: 'bold',
    color: '#333',
  },
});

// Inline stil — her render'da yeni bir nesne oluşturur
<View style={{
  flex: 1,
  padding: 16,
  backgroundColor: '#f5f5f5',
  borderRadius: 8,
}} />

<Text style={styles.title}>Title</Text>

Inline ne zaman kullanılmalı: duruma bağlı dinamik stiller için (basılı, seçili, aktif). Statik stiller için her zaman StyleSheet.create kullanın. Kural: statik → create, dinamik → inline fonksiyon.

StyleSheet ile Flexbox düzeni

Flexbox — React Native'deki tek düzen mekanizması (CSS Grid desteklenmez, float yoktur). StyleSheet.create, flex kaplarını ve alt öğelerini tanımlamak için kullanılır. Temel özellikler: flex (doldurma katsayısı), flexDirection (row | column), justifyContent, alignItems.

Varsayılan olarak, React Native'de flexDirection column'dur (CSS'de — row). Web geliştirmeden geçiş yaparken hatırlanması gereken ilk şey budur. Tüm View bileşenleri varsayılan olarak flex kaplarıdır. Bir öğeyi ortalamak için alignItems: 'center' + justifyContent: 'center' kullanın.

js
const styles = StyleSheet.create({
  container: {
    flex: 1,
    flexDirection: 'column',
    justifyContent: 'center',
    alignItems: 'center',
    padding: 20,
  },
  row: {
    flexDirection: 'row',
    justifyContent: 'space-between',
    alignItems: 'center',
    width: '100%',
  },
  box: {
    width: 50,
    height: 50,
    backgroundColor: 'blue',
  },
});

Önemli: React Native'de tüm boyutlar birimsiz belirtilir (sadece bir sayı). Yüzdeler çalışır ancak yalnızca üst öğeye göre genişlik ve yükseklik için. margin ve padding sayıları kabul eder. Duyarlılık için yüzdeler yerine flex kullanın — farklı ekranlarda daha güvenilirdir.

StyleSheet API: create, flatten, hairlineWidth, absoluteFill

StyleSheet API, create dışında birkaç yöntem daha içerir. StyleSheet.flatten bir stil dizisini tek bir nesnede birleştirir — kompozisyon ve stilleri üçüncü taraf bileşenlere iletmek için kullanışlıdır. StyleSheet.hairlineWidth, cihazda görünen minimum çizgi genişliğini döndürür.

StyleSheet.absoluteFill — önceden tanımlanmış bir stil { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 }. Kaplama katmanları, modal pencereler ve tüm ekran üzerinde mutlak konumlandırma için kullanılır. StyleSheet.absoluteFillObject — aynısı ancak genişletme için nesne olarak.

js
// flatten — stilleri birleştir
const base = StyleSheet.create({
  button: { padding: 12, borderRadius: 8 },
  primary: { backgroundColor: 'blue' },
});

const combined = StyleSheet.flatten([base.button, base.primary]);
// { padding: 12, borderRadius: 8, backgroundColor: 'blue' }

// hairlineWidth — minimum çizgi
const styles = StyleSheet.create({
  separator: {
    height: StyleSheet.hairlineWidth,
    backgroundColor: '#ccc',
  },
  overlay: {
    ...StyleSheet.absoluteFillObject,
    backgroundColor: 'rgba(0,0,0,0.5)',
  },
});

StyleSheet.hairlineWidth ayırıcılar ve kenarlıklar için kullanışlıdır — ekran yoğunluğundan bağımsız olarak her zaman 1 fiziksel piksel gibi görünür. Retina ekranlarda bu 0,5 mantıksal nokta, normal ekranlarda — 1 noktadır. Kesin olarak belirli bir boyutta olması gereken öğeler için hairlineWidth kullanmayın.

Dimensions API ile duyarlı düzen

Dimensions API, farklı ekran boyutları için duyarlı düzen amacıyla StyleSheet ile birlikte kullanılır. Dimensions.get('window') pencerenin genişliğini ve yüksekliğini döndürür. Ekran döndürmede tepkisel güncellemeler için React Native'den useWindowDimensions hook'unu kullanın.

StyleSheet.create CSS gibi medya sorgularını desteklemese de, create içinde Dimensions'a dayalı değerler hesaplayabilir veya bir fonksiyon aracılığıyla dinamik stiller kullanabilirsiniz. Kesme noktaları için farklı genişlik aralıkları için ayrı stiller oluşturun.

js
import { useWindowDimensions } from 'react-native';

const ResponsiveCard = () => {
  const { width } = useWindowDimensions();
  const isLarge = width > 768;

  return (
    <View style={[styles.card, isLarge && styles.cardLarge]}>
      <Text>Responsive card</Text>
    </View>
  );
};

const styles = StyleSheet.create({
  card: {
    width: '100%',
    padding: 16,
  },
  cardLarge: {
    width: '50%',
    alignSelf: 'center',
  },
});

useWindowDimensions, ekran döndürme ve Split View ile tabletlerde pencere boyutu değişikliğinde otomatik olarak güncellenir. SSR (React Native Web) için, sunucu ve istemci arasındaki tutarsızlıkları önlemek amacıyla Dimensions.get'in bileşen montajından sonra çağrıldığından emin olun.

Projede stil organizasyonu

StyleSheet organizasyonu bir projede bakım yapılabilirliği ve kod yeniden kullanımını etkiler. Üç yaklaşım: bileşen içindeki yerel stiller (bileşenin yanında styles.js), genel stiller (renk, boşluk, tipografi sabitleriyle theme.js) ve kompozisyon yoluyla modüler stiller.

Önerilen yapı: renk, boyut ve tipografi sabitleriyle theme.js; her bileşenin yanında kendi özel stilleri için Component.styles.js; temel ve özel stilleri birleştirmek için StyleSheet.flatten. Büyük projeler için tema oluşturma ile bir Tasarım Sistemi kullanın.

js
// theme.js — genel sabitler
export const colors = {
  primary: '#6200EE',
  background: '#FFFFFF',
  text: '#1C1B1F',
  surface: '#F5F5F5',
};

export const spacing = {
  xs: 4, sm: 8, md: 16, lg: 24, xl: 32,
};

export const typography = {
  h1: { fontSize: 24, fontWeight: 'bold', lineHeight: 32 },
  body: { fontSize: 16, lineHeight: 24 },
};

// Button.styles.js
import { colors, spacing, typography } from './theme';

export default StyleSheet.create({
  button: {
    backgroundColor: colors.primary,
    paddingVertical: spacing.sm,
    paddingHorizontal: spacing.lg,
    borderRadius: 8,
  },
  text: {
    ...typography.body,
    color: '#FFFFFF',
    textAlign: 'center',
  },
});

Modüler organizasyonun faydaları: renkler ve boşluklar için tek gerçek kaynağı, basitleştirilmiş yeniden düzenleme (primary değiştir — tüm butonlar güncellenir), flatten ile stil yeniden kullanımı, kod okunabilirliği ve öngörülebilirliği. TypeScript projeleri için declare module aracılığıyla tema için türler ekleyin.

Sıkça Sorulan Sorular

StyleSheet.create dinamik olarak kullanılabilir mi?

StyleSheet.create dinamik stiller için tasarlanmamıştır — modül yüklemesi sırasında bir kez çağrılır. Prop'lara veya duruma bağlı stiller için inline nesneler veya bir stil dizisi döndüren bir fonksiyon kullanın.

StyleSheet.create ve object arasındaki fark nedir?

StyleSheet.create performansı optimize eder: stiller sayısal ID'lere dönüştürülür ve JS-Native köprüsü üzerinden sayı olarak iletilir. Sıradan nesneler her render'da iletilir. Statik stiller için her zaman create kullanın.

React Native'de stiller nasıl miras alınır?

Doğrudan miras yoktur. Stil dizilerini birleştirmek için StyleSheet.flatten veya temel bir stili genişletmek için spread operatörü kullanın. Text için üst stiller alt öğeler tarafından miras alınmaz — her Text açık stiller gerektirir.

StyleSheet medya sorgularını destekliyor mu?

Hayır, StyleSheet CSS medya sorgularını desteklemez. Duyarlılık için useWindowDimensions veya koşullu stillerle Dimensions API kullanın. react-native-responsive kütüphanesi kesme noktalarında yardımcı olur.

React Native ile CSS framework'leri kullanılabilir mi?

StyleSheet CSS'i desteklemez. Tailwind benzeri sözdizimi için NativeWind kullanın. styled-components için react-native-adaptation vardır. Çoğu proje için yerleşik StyleSheet kaliteli bir UI oluşturmak için yeterlidir.

Özet

  • StyleSheet — sayısal tanımlayıcılarla optimizasyon ile JavaScript nesneleri aracılığıyla stiller tanımlamak için yerleşik React Native API'si
  • StyleSheet.create statik veriler için inline stillere tercih edilir: stiller her render'da değil, bir kez oluşturulur
  • Flexbox — varsayılan flexDirection: column (CSS'in aksine) ile RN'de düzenin temeli
  • StyleSheet.flatten stil dizilerini birleştirir, absoluteFill üst kabı doldurur, hairlineWidth 1 fiziksel piksel verir
  • useWindowDimensions farklı ekranlara ve cihaz döndürmelerine uyarlanabilirlik sağlar
  • theme.js ve Component.styles.js ile modüler organizasyon kod bakımını iyileştirir
  • StyleSheet.hairlineWidth ayırıcılar için vazgeçilmezdir — cihazın piksel yoğunluğuna uyum sağlar

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun