块编辑器开发文档

💡 云策文档标注

概述

FontSizePicker 是一个 React 组件,用于渲染一个允许用户选择字体大小的用户界面。它支持预定义字体大小选择,并可启用自定义字体大小功能。

关键要点

  • 组件用于在 WordPress 区块编辑器中提供字体大小选择功能,适用于主题或插件开发。
  • 支持通过 fontSizes 数组配置预定义字体大小,包括 size、name 和 slug 属性。
  • 提供 disableCustomFontSizes、withSlider、withReset 等属性以控制自定义字体大小、滑块和重置按钮的显示。
  • valueMode 属性决定 value 是字面值还是 slug,影响值解析方式。
  • units 属性定义自定义字体大小可用的单位,如 px、em、rem 等。
  • onChange 回调函数处理字体大小变化,支持重置操作。
  • __next40pxDefaultSize 属性用于启用未来版本中更大的默认高度。

代码示例

import { useState } from 'react';
import { FontSizePicker } from '@wordpress/components';
import { __ } from '@wordpress/i18n';

const fontSizes = [
    {
        name: __( 'Small' ),
        slug: 'small',
        size: 12,
    },
    {
        name: __( 'Big' ),
        slug: 'big',
        size: 26,
    },
];
const fallbackFontSize = 16;

const MyFontSizePicker = () => {
    const [ fontSize, setFontSize ] = useState( 12 );

    return (
        <FontSizePicker
            __next40pxDefaultSize
            fontSizes={ fontSizes }
            value={ fontSize }
            fallbackFontSize={ fallbackFontSize }
            onChange={ ( newFontSize ) => {
                setFontSize( newFontSize );
            } }
        />
    );
};

...

<MyFontSizePicker />

注意事项

  • fontSizes 数组中的 slug 属性不能使用 'default' 或 'custom',这些是保留值。
  • 当 value 为数字时,组件处于“无单位模式”,units 属性无效;要使用 units,value 必须为带单位的字符串(如 '12px')。
  • withSlider 和 withReset 仅在 disableCustomFontSizes 为 false 时生效。
  • fallbackFontSize 仅在 withSlider 为 true 时用于定义滑块起始位置。

📄 原文内容

FontSizePicker is a React component that renders a UI that allows users to select a font size.
The component renders a user interface that allows the user to select predefined (common) font sizes and contains an option that allows users to select custom font sizes (by choosing the value) if that functionality is enabled.

Usage

import { useState } from 'react';
import { FontSizePicker } from '@wordpress/components';
import { __ } from '@wordpress/i18n';

const fontSizes = [
    {
        name: __( 'Small' ),
        slug: 'small',
        size: 12,
    },
    {
        name: __( 'Big' ),
        slug: 'big',
        size: 26,
    },
];
const fallbackFontSize = 16;

const MyFontSizePicker = () => {
    const [ fontSize, setFontSize ] = useState( 12 );

    return (
        <FontSizePicker
            __next40pxDefaultSize
            fontSizes={ fontSizes }
            value={ fontSize }
            fallbackFontSize={ fallbackFontSize }
            onChange={ ( newFontSize ) => {
                setFontSize( newFontSize );
            } }
        />
    );
};

...

<MyFontSizePicker />

Props

The component accepts the following props:

disableCustomFontSizes: boolean

If true, it will not be possible to choose a custom fontSize. The user will be forced to pick one of the pre-defined sizes passed in fontSizes.

  • Required: no
  • Default: false

fallbackFontSize: number

If no value exists, this prop defines the starting position for the font size picker slider. Only relevant if withSlider is true.

  • Required: No

fontSizes: FontSize[]

An array of font size objects. The object should contain properties size, name, and slug.
The property size contains a number with the font size value, in px or a string specifying the font size CSS property that should be used eg: “13px”, “1em”, or “clamp(12px, 5vw, 100px)”.
The name property includes a label for that font size e.g.: Small.
The slug property is a string with a unique identifier for the font size. Used for the class generation process.

Note: The slugs default and custom are reserved and cannot be used.

  • Required: No
  • Default: []

onChange: ( value: number | string | undefined, selectedItem?: FontSize ) => void

A function that receives the new font size value.
If onChange is called without any parameter, it should reset the value, attending to what reset means in that context, e.g., set the font size to undefined or set the font size a starting value.

  • Required: Yes

size: 'default' | '__unstable-large'

Size of the control.

  • Required: No
  • Default: 'default'

units: string[]

Available units for custom font size selection.

  • Required: No
  • Default: [ 'px', 'em', 'rem', 'vw', 'vh' ]

value: number | string

The current font size value.

Note: For the units property to work, the current font size value must be specified as strings with units (e.g., '12px' instead of 12). When the font size is provided as a number, the component operates in “unitless mode” where the units property has no effect.

  • Required: No

valueMode: 'literal' | 'slug'

Determines how the value prop should be interpreted.

  • 'literal': The value prop contains the actual font size value (number or string).
  • 'slug': The value prop contains the slug of the selected font size.

  • Required: No

  • Default: 'literal'

withReset: boolean

If true, a reset button will be displayed alongside the input field when a custom font size is active. Has no effect when disableCustomFontSizes is true.

  • Required: no
  • Default: true

withSlider: boolean

If true, a slider will be displayed alongside the input field when a custom font size is active. Has no effect when disableCustomFontSizes is true.

  • Required: no
  • Default: false

__next40pxDefaultSize: boolean

Start opting into the larger default height that will become the default size in a future version.

  • Required: No
  • Default: false