StyleSheet — vad är det, skapa stilar i React Native

Författare: IT Sectr Publicerad: 2026-07-06 Lästid: 10 min

StyleSheet — API React Native för att skapa och hantera komponentstilar, analogt med CSS-stilmallar i webbutveckling. StyleSheet.create optimerar prestanda genom att omvandla stilobjekt till numeriska identifierare och minska dataöverföringen över bron JavaScript-Native. Till skillnad från inline-stilar skapas via create en gång vid modulinitiering. Läs mer om API:et i Meta-dokumentationen.

Huvudpunkter

  • StyleSheet — API för deklarativt skapande av stilar med optimering genom numeriska identifierare
  • StyleSheet.create omvandlar stilobjekt till ID, vilket minskar data som skickas över JS-Native-bron
  • Inline-stilar skapar nya objekt vid varje rendering, StyleSheet.create — en gång vid modulladdning
  • Flexbox — grunden för layout i React Native: flexDirection, alignItems, justifyContent och flex
  • Modulär organisering innebär att flytta stilar till separata filer med komposition via StyleSheet.flatten

Vad är StyleSheet?

StyleSheet — inbyggt API i React Native för att definiera komponentstilar. Till skillnad från CSS i webbutveckling använder RN JavaScript-objekt för att beskriva stilar. StyleSheet.create — den viktigaste metoden som tar emot ett objekt med stilar och returnerar ett objekt med numeriska identifierare.

StyleSheet är en del av React Native-kärnan och kräver inte installation av ytterligare paket. Enligt Meta-data (2026) använder 95% av React Native-projekten StyleSheet.create för statiska stilar. Alternativ: styled-components, Emotion, NativeWind (Tailwind för RN) — men den inbyggda StyleSheet förblir standarden för kärnan.

Historia och utveckling

I de tidiga versionerna av React Native (2015) definierades stilar uteslutande via inline-objekt. StyleSheet.create dök upp i RN 0.4 som en optimering. Konceptet är hämtat från CSS: separera stilar från logik för läsbarhet och prestanda. Under åren har API:et utökats: absoluteFill, hairlineWidth, flatten har lagts till.

StyleSheet.create vs inline-stilar

Skillnaden mellan StyleSheet.create och inline-stilar är kritisk för prestanda. Inline-stil — ett vanligt JavaScript-objekt som skapas vid varje rendering av komponenten. StyleSheet.create — ett objekt som skapas en gång vid modulladdning och omvandlas till ett numeriskt ID.

När en inline-stil skickas, skickar React Native varje gång hela objektet över bron JavaScript-Native. För en komponent med komplexa stilar handlar det om dussintals egenskaper som skickas vid varje rendering. StyleSheet.create skickar bara en numerisk identifierare, vilket minskar belastningen på bron.

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

// Inline style — skapar ett nytt objekt vid varje rendering
<View style={{
  flex: 1,
  padding: 16,
  backgroundColor: '#f5f5f5',
  borderRadius: 8,
}} />

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

När ska inline användas: för dynamiska stilar som beror på tillstånd (pressed, selected, active). För statiska stilar, använd alltid StyleSheet.create. Regel: statisk → create, dynamisk → inline-funktion.

Flexbox-layout via StyleSheet

Flexbox — den enda layoutmekanismen i React Native (CSS Grid stöds inte och float finns inte). StyleSheet.create används för att beskriva flex-containrar och deras underordnade element. Huvudegenskaper: flex (fyllnadskoefficient), flexDirection (row | column), justifyContent, AlignItems.

Som standard är flexDirection i React Native column (i CSS — row). Detta är det första att komma ihåg vid övergång från webbutveckling. Alla View är som standard flex-containrar. För att centrera ett element, använd AlignItems: 'center' + justifyContent: 'center'.

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',
  },
});

Viktigt: i React Native anges alla mått utan enheter (bara ett nummer). Procent fungerar, men bara för width och height i förhållande till föräldern. margin och padding accepterar siffror. För anpassningsbarhet, använd flex istället för procent — det är mer tillförlitligt på olika skärmar.

StyleSheet API: create, flatten, hairlineWidth, absoluteFill

StyleSheet API innehåller flera metoder förutom create. StyleSheet.flatten kombinerar en array av stilar till ett objekt — användbart för komposition och överföring av stilar till tredjepartskomponenter. StyleSheet.hairlineWidth returnerar den minsta synliga linjebredden på enheten.

StyleSheet.absoluteFill — en fördefinierad stil { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 }. Används för överlagringsskikt, modala fönster och absolut positionering över hela skärmen. StyleSheet.absoluteFillObject — samma sak men i objektform för utökning.

js
// flatten — slå samman stilar
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 — minimal linje
const styles = StyleSheet.create({
  separator: {
    height: StyleSheet.hairlineWidth,
    backgroundColor: '#ccc',
  },
  overlay: {
    ...StyleSheet.absoluteFillObject,
    backgroundColor: 'rgba(0,0,0,0.5)',
  },
});

StyleSheet.hairlineWidth är användbar för avskiljare och kanter — den ser alltid ut som 1 fysisk pixel oavsett skärmdensitet. På Retina-skärmar är detta 0.5 logiska punkter, på vanliga — 1 punkt. Använd inte hairlineWidth för element som måste ha en strikt definierad storlek.

Responsiv layout med Dimensions API

Dimensions API används tillsammans med StyleSheet för responsiv layout för olika skärmstorlekar. Dimensions.get('window') returnerar fönstrets bredd och höjd. För reaktiv uppdatering vid skärmrotation, använd hooken useWindowDimensions från React Native.

Även om StyleSheet.create inte stöder media queries som CSS, kan du beräkna värden baserat på Dimensions i create eller använda dynamiska stilar via en funktion. Skapa separata stilar för olika breddintervall för brytpunkter.

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 uppdateras automatiskt vid skärmrotation och ändring av fönsterstorlek på surfplattor med Split View. För SSR (React Native Web), se till att Dimensions.get anropas efter att komponenten monterats för att undvika avvikelser mellan server och klient.

Organisering av stilar i projektet

Organisering av StyleSheet i projektet påverkar underhållbarhet och återanvändbarhet av kod. Tre tillvägagångssätt: lokala stilar inuti komponenten (styles.js bredvid komponenten), globala stilar (theme.js med konstanter för färger, mellanrum, typografi) och modulära stilar via komposition.

Rekommenderad struktur: theme.js med konstanter för färger, storlekar och typografi; Component.styles.js bredvid varje komponent för dess specifika stilar; StyleSheet.flatten för kombination av bas- och specifika stilar. För stora projekt, använd Design System med temagenerering.

js
// theme.js — globala konstanter
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',
  },
});

Fördelar med modulär organisering: enda källa till sanning för färger och mellanrum, förenkling av refaktorisering (du ändrade primary — alla knappar uppdaterades), återanvändning av stilar via flatten, kodens läsbarhet och förutsägbarhet. För TypeScript-projekt, lägg till typer för temat via declare module.

Vanliga frågor

Kan StyleSheet.create användas dynamiskt?

StyleSheet.create är inte avsett för dynamiska stilar — det anropas en gång vid modulladdning. För stilar som beror på props eller tillstånd, använd inline-objekt eller en funktion som returnerar en array av stilar.

Vad är skillnaden mellan StyleSheet.create och object?

StyleSheet.create optimerar prestanda: stilarna omvandlas till numeriska ID och skickas över JS-Native-bron som siffror. Vanliga objekt skickas varje gång vid rendering. För statiska stilar, använd alltid create.

Hur ärver man stilar i React Native?

Det finns inget direkt arv. Använd StyleSheet.flatten för att kombinera stilarrayer eller spread-operatorn för att utöka basstilen. För Text ärvs inte föräldrastilar av underordnade element — varje Text kräver explicita stilar.

Stöder StyleSheet media queries?

Nej, StyleSheet stöder inte CSS media queries. För responsivitet, använd useWindowDimensions eller Dimensions API och villkorliga stilar. Biblioteket react-native-responsive hjälper med brytpunkter.

Kan CSS-ramverk användas med React Native?

StyleSheet stöder inte CSS. För Tailwind-liknande syntax, använd NativeWind. För styled-components finns react-native-adaptation. För de flesta projekt räcker den inbyggda StyleSheet för att skapa ett kvalitativt UI.

Sammanfattning

  • StyleSheet — inbyggt React Native API för att definiera stilar via JavaScript-objekt med optimering genom numeriska identifierare
  • StyleSheet.create är att föredra framför inline-stilar för statisk data: stilar skapas en gång, inte vid varje rendering
  • Flexbox — grunden för layout i RN med standard flexDirection: column (till skillnad från CSS)
  • StyleSheet.flatten kombinerar stilarrayer, absoluteFill fyller föräldracontainern, hairlineWidth ger 1 fysisk pixel
  • useWindowDimensions ger anpassningsbarhet till olika skärmar och enhetsrotationer
  • Modulär organisering med theme.js och Component.styles.js ökar kodens underhållbarhet
  • StyleSheet.hairlineWidth är oumbärlig för avskiljare — den anpassar sig till enhetens pixeldensitet

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också