Back to Tamagui

Text

code/tamagui.dev/data/docs/components/text/1.0.0.mdx

1.144.42.7 KB
Original Source
<HeroContainer demoMultiple> <TextDemo /> </HeroContainer>
tsx

<Highlights features={[ 'Themes that give you control over spacing, weights, and sizes custom to each font.', 'Size prop that automatically matches all theme values.', 'Media query styles, hoverStyle, pressStyle, focusStyle.', ]} />

Installation

Text is already installed in tamagui, or you can install it independently:

bash
npm install @tamagui/text

Usage

tsx
export default () => (
  <>
    <Text>Text</Text>
    <SizableText>Sizable Text</SizableText>
    <Paragraph>Paragraph</Paragraph>
  </>
)

Text

Text in Tamagui matches to Text in react-native-web, just with the added Tamagui Props.

It explicitly doesn't inherit your theme color or other font properties, as it's meant to be plain and used for extension. Below, we'll show SizableText which extends Text, and Paragraph which extends SizableText. Generally, Paragraph is the useful view as it will use theme values, while you can extend Text if you'd like to derive your own design system.

tsx
import { Text, XStack, YStack } from 'tamagui'

export default () => (
  <>
    <Text
      // can add theme values
      color="$white"
      fontFamily="$body"
      // or just use direct values
      fontSize={20}
      hoverStyle={{
        color: '$colorHover',
      }}
    >
      Lorem ipsum
    </Text>
  </>
)

SizableText

Tamagui lets you define font sizing, spacing, line height, letter spacing and other properties with createFont, of which you can have many different configurations. We've found a nice pattern is to "align" all your keys across these sub-objects.

SizableText adds a size property thats defined using a spread variant which looks for a matching key on each of these properties (using @tamagui/get-font-sized):

  • color
  • fontStyle
  • textTransform
  • fontFamily
  • fontWeight
  • letterSpacing
  • fontSize
  • lineHeight

So, if you've defined small, medium and large keys on each createFont category, you can use it like so:

tsx
<SizableText size="$small" />

Source code for SizableText.

Paragraph

Paragraph extends SizableText and is defined as:

tsx
export const Paragraph = styled(SizableText, {
  name: 'Paragraph',
  tag: 'p',
  userSelect: 'auto',
  color: '$color',
  size: '$true',
  whiteSpace: 'normal',
})
<Notice> Note: Paragraph renders to a `p` tag on web, which can cause issues when you nest them during SSR. If you don't mind rendering to a span, use `SizableText`, otherwise, be careful when nesting items inside a Paragraph. </Notice>