跳到主要內容
+

排版

排版組件有助於清晰有效地呈現設計和內容。

簡介

排版組件透過提供一組有限的值供選擇,以及方便的屬性,以更快地建構常見設計,從而協助維持一致的設計。

Lorem ipsum 是佔位文字,常在圖形、印刷和出版產業中使用,以預覽版面配置和視覺模擬稿。

<Typography />

範例展示


基本用法

import Typography from '@mui/joy/Typography';

排版組件會包覆其內容,並以特定的排版樣式和屬性顯示文字。

國家公園

優勝美地國家公園

優勝美地國家公園是一個國家公園,佔地 747,956 英畝(1,169.4 平方英里;3,025.2 平方公里),位於加州中部內華達山脈西部。

按下 Enter 鍵開始編輯

標題

使用 h1h4 來呈現標題。產生的 HTML 元素將符合頁面結構的語意 標題

h1: Lorem ipsum

h2: What is Lorem Ipsum?

h3: The standard Lorem Ipsum passage.

h4: 頁面最小的標題

按下 Enter 鍵開始編輯

標題和內文

除了標題排版層級之外,排版組件也提供 title-*body-* 類型層級。

為了確保適當的資訊層級結構,我們建議將它們與相同大小或更小的大小組合使用。例如,將 title-lgbody-lgtitle-mdbody-sm 一起使用。

組件標題 title-lg

這是組件的描述,其中包含一些相關資訊。 body-md

組件標題 title-md

這是組件的描述,其中包含一些相關資訊。 body-md

Metadata,例如日期。 body-sm

組件標題 title-sm

這是組件的描述,其中包含一些相關資訊。 body-sm

Metadata,例如日期。 body-xs

巢狀排版

預設情況下,排版組件會呈現為 <p>。巢狀排版組件會呈現為 <span> 元素(除非透過component 屬性自訂)。

排版讓您建立 巢狀排版。運用您的 想像力 來建構美好的 使用者介面.

按下 Enter 鍵開始編輯

自訂

系統屬性

作為 CSS utility 組件,排版支援每個 MUI System 屬性。這些屬性可用於自訂組件的樣式,並使其與整體設計無縫接軌。


// Using the neutral color palette that defaults to the 500 value
<Typography color="neutral" fontSize="sm" fontWeight="lg" />

// Changing the specific element's color to neutral
<Typography textColor="neutral.300" fontSize="sm" fontWeight="lg" >

層級

level 屬性可存取主題中定義的預定義排版值比例。這些值包括各種標題層級(h1、h2、h3 等)以及內文文字層級(body-md、body-sm 等),可用於在整個應用程式中套用一致的排版。此外,您也可以使用 level 屬性來控制字體大小、粗細、行高和其他排版屬性。

h1

h2

h3

h4

title-lg

title-md

title-sm

body-lg

body-md

body-sm

body-xs
按下 Enter 鍵開始編輯

語意元素

若要自訂使用的語意元素,您可以使用 component 屬性。這在您想要使用與 level 屬性指定的語意元素不同的元素時很有用。組件將呈現為 component 定義的 HTML 元素,但具有指派給其各自 level 的樣式。

// There's already an h1 on the page so let's not add another one.

<Typography level="h1" component="h2">
  I render as an h2, but I have h1 styles
</Typography>

以更有效率的方式,您可以在主題層級變更 HTML 對應標籤。

const theme = extendTheme({
  components: {
    JoyTypography: {
      defaultProps: {
        levelMapping: {
          h1: 'h2',
          h2: 'h2',
          h3: 'h3',
          h4: 'h3',
          'title-lg': 'p',
          'title-md': 'p',
          'title-sm': 'p',
          'body-md': 'p',
          'body-sm': 'p',
          'body-xs': 'span',
        },
      },
    },
  },
});

裝飾器

使用 startDecoratorendDecorator 屬性將支援圖示或元素新增至排版。

圖示會自動調整為縮放比例

顯示方式也會變更為 flexbox123

按下 Enter 鍵開始編輯

排版縮放比例

若要建立自訂排版比例,您可以在主題層級的 theme.typography 節點中定義鍵和值。

extendTheme({
  typography: {
    subtitle: {
      fontSize: 'var(--joy-fontSize-lg)',
      fontWeight: 'var(--joy-fontWeight-md)',
      // CSS selectors are also supported!
      '& + p': {
        marginTop: '4px',
      },
    },
    label: {
      fontSize: 'var(--joy-fontSize-sm)',
      fontWeight: 'var(--joy-fontWeight-lg)',
      lineHeight: 'var(--joy-lineHeight-lg)',
      marginBottom: '3px',
    },
  },
});

您也可以從 level 屬性存取新建立的層級

<Typography level="subtitle">
<Typography level="label">

移除預設比例

若要移除任何未使用的排版層級(例如,如果您要建構自己的完全自訂比例),您可以透過在主題中將 undefined 指派給它們來清除內建值。

extendTheme({
  typography: {
    h1: undefined,
    h2: undefined,
    h3: undefined,
    h4: undefined,
    'title-lg': undefined,
    'title-md': undefined,
    'title-sm': undefined,
    'body-lg': undefined,
    'body-md': undefined,
    'body-sm': undefined,
    'body-xs': undefined,
    // ...your scale
  },
});

使用 TypeScript 時,請務必也從類型中移除內建的排版 tokens。

// in your theme or index file
declare module '@mui/joy/styles' {
  interface TypographySystemOverrides {
    h1: false;
    h2: false;
    h3: false;
    h4: false;
    'title-lg': false;
    'title-md': false;
    'title-sm': false;
    'body-lg': false;
    'body-md': false;
    'body-sm': false;
    'body-xs': false;
  }
}

常見範例

下方的範例展示說明了排版組件的多種用法,以及其他作為裝飾器的用法。

非作用中

$25

此範例展示了文字的多行顯示。

🚨僅使用排版的簡易警示。

+8.2%自上個月以來

無障礙功能

以下是一些確保您的排版組件具有無障礙功能的因素

  • 確保文字和背景之間有足夠的色彩對比度,使用至少 WCAG 2.0 的色彩對比度比率 4.5:1。
  • 使用 相對單位,例如 rem 作為 fontSize,以符合使用者的設定。
  • 使用一致的 標題層級結構,並避免跳過層級。
  • 透過使用適當的語意元素(#semantic-elements),將語意和樣式分開。

結構

排版組件由單一根 <p> 組成,該 <p> 組件被指派 body-md 類別,除非這些預設值被 level 和/或 component 屬性覆寫。

當一個排版組件巢狀於另一個組件內時,巢狀組件會呈現為 <span>(除非如上所述進行自訂)。

<p class="MuiTypography-root MuiTypography-body-md">
  <!-- Typography content -->
  <span class="MuiTypography-root MuiTypography-inherit">
    <!-- Nested Typography content -->
  </span>
</p>

API

請參閱下方文件,以取得此處提及的組件可用的所有屬性和類別的完整參考。