Типографика
Пакет styled по умолчанию использует системный стек шрифтов:
--rdrp-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;Это обеспечивает рендеринг с использованием нативного шрифта ОС на каждой платформе (San Francisco на macOS, Segoe UI на Windows, Roboto на Android). Системные шрифты предоставляют хорошую поддержку нескольких языков, поскольку ОС автоматически обрабатывает резервные варианты для CJK, арабского и других письменностей.
Чтобы переопределить, установите --rdrp-font-family на любом родительском элементе — он каскадно применится к компоненту выбора даты.
Встроенный стиль с переменной CSS
Переопределите шрифт с помощью атрибута style на элементе-обертке:
import { useState } from "react";import { DatePicker } from "react-date-range-picker-styled";import "react-date-range-picker-styled/rdrp-styles.css";
function CSSCustomFont() { const [value, setValue] = useState<Date | null>(null);
return ( <div style={{ ["--rdrp-font-family" as string]: '"Georgia", "Times New Roman", serif', }} > <DatePicker value={value} onChange={setValue} /> </div> );}Семейство шрифтов
Переключайтесь между семействами шрифтов, устанавливая --rdrp-font-family на обертке:
import { useState } from "react";import { DatePicker } from "react-date-range-picker-styled";import "react-date-range-picker-styled/rdrp-styles.css";
const fonts = { System: {}, Serif: { "--rdrp-font-family": '"Georgia", "Times New Roman", serif' }, Mono: { "--rdrp-font-family": '"Menlo", "Courier New", monospace' },};
type FontName = keyof typeof fonts;
function CompoundCustomFont() { const [value, setValue] = useState<Date | null>(null); const [font, setFont] = useState<FontName>("System");
return ( <div> <div style={{ display: "flex", gap: 6, marginBottom: 12 }}> {(Object.keys(fonts) as FontName[]).map((name) => ( <button key={name} onClick={() => setFont(name)} style={{ padding: "6px 14px", border: `1px solid ${font === name ? "#3b82f6" : "#d1d5db"}`, borderRadius: 6, background: font === name ? "#eff6ff" : "#fff", cursor: "pointer", fontSize: 13, }} > {name} </button> ))} </div> <div style={fonts[font] as React.CSSProperties}> <DatePicker value={value} onChange={setValue} inline /> </div> </div> );}Использование веб-шрифтов (Noto Sans)
Для согласованного кросс-платформенного рендеринга или проектов с интернационализацией (i18n) загрузите веб-шрифт, такой как Noto Sans, и переопределите переменную:
import { DatePicker } from "react-date-range-picker-styled";import "react-date-range-picker-styled/rdrp-styles.css";
// 1. Load Noto Sans in your HTML or CSS:// <link href="https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;500;600;700&display=swap" rel="stylesheet">
// 2. Override the font variable:<div style={{ "--rdrp-font-family": '"Noto Sans", sans-serif' } as React.CSSProperties}> <DatePicker value={value} onChange={setValue} inline /></div>;import { useState, useEffect } from "react";import { DatePicker } from "react-date-range-picker-styled";import "react-date-range-picker-styled/rdrp-styles.css";
function CompoundNotoSans() { const [value, setValue] = useState<Date | null>(null);
useEffect(() => { // Load Noto Sans from Google Fonts (for demo purposes only) if (!document.getElementById("noto-sans-font")) { const link = document.createElement("link"); link.id = "noto-sans-font"; link.rel = "stylesheet"; link.href = "https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;500;600;700&display=swap"; document.head.appendChild(link); } }, []);
return ( <div style={{ "--rdrp-font-family": '"Noto Sans", sans-serif' } as React.CSSProperties}> <DatePicker value={value} onChange={setValue} inline /> </div> );}Галерея веб-шрифтов
Сравните различные веб-шрифты, чтобы увидеть, как кардинально типографика меняет внешний вид компонента. Все шрифты ниже поддерживают многоязычный рендеринг (латиница, CJK, корейский).
Шрифты ниже загружаются из Google Fonts CDN в демонстрационных целях. Эта библиотека не включает в себя никаких веб-шрифтов — вы должны загружать их в своем собственном проекте.
import { useState, useEffect } from "react";import { DatePicker } from "react-date-range-picker-styled";import "react-date-range-picker-styled/rdrp-styles.css";
const WEB_FONTS = [ { name: "Noto Sans", family: '"Noto Sans", sans-serif' }, { name: "Noto Serif", family: '"Noto Serif", serif' }, { name: "IBM Plex Sans", family: '"IBM Plex Sans", sans-serif' }, { name: "Roboto Slab", family: '"Roboto Slab", serif' },];
const FONT_URL = "https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=Noto+Sans:wght@400;500;600;700&family=Noto+Serif:wght@400;500;600;700&family=Roboto+Slab:wght@400;500;600;700&display=swap";
function CompoundWebFonts() { const [value, setValue] = useState<Date | null>(null); const [active, setActive] = useState(0);
useEffect(() => { if (!document.getElementById("web-fonts-link")) { const link = document.createElement("link"); link.id = "web-fonts-link"; link.rel = "stylesheet"; link.href = FONT_URL; document.head.appendChild(link); } }, []);
return ( <div> <div style={{ display: "flex", gap: 6, marginBottom: 12, flexWrap: "wrap" }}> {WEB_FONTS.map((f, i) => ( <button key={f.name} onClick={() => setActive(i)} style={{ padding: "6px 14px", border: `1px solid ${active === i ? "#3b82f6" : "#d1d5db"}`, borderRadius: 6, background: active === i ? "#eff6ff" : "#fff", color: active === i ? "#3b82f6" : "#374151", cursor: "pointer", fontSize: 13, fontFamily: f.family, }} > {f.name} </button> ))} </div> <div style={{ "--rdrp-font-family": WEB_FONTS[active].family } as React.CSSProperties}> <DatePicker value={value} onChange={setValue} inline /> </div> </div> );}Размер и насыщенность шрифта
Точно настройте плотность типографики, переопределяя переменные размера и насыщенности:
| Переменная | По умолчанию | Описание |
|---|---|---|
--rdrp-font-size-xs | 11px | Самый маленький текст |
--rdrp-font-size-sm | 12px | Метки дней недели |
--rdrp-font-size-base | 13px | Ячейки дней, кнопки |
--rdrp-font-size-md | 14px | Триггер, элементы времени |
--rdrp-font-size-lg | 15px | Заголовок месяца |
--rdrp-font-weight-normal | 400 | Базовая насыщенность |
--rdrp-font-weight-medium | 500 | Средний акцент |
--rdrp-font-weight-semibold | 600 | Выбранные дни, заголовки |
--rdrp-font-weight-bold | 700 | Индикатор сегодняшнего дня |
import { useState } from "react";import { DatePicker } from "react-date-range-picker-styled";import "react-date-range-picker-styled/rdrp-styles.css";
const presets = { Compact: { "--rdrp-font-size-xs": "9px", "--rdrp-font-size-sm": "10px", "--rdrp-font-size-base": "11px", "--rdrp-font-size-md": "12px", "--rdrp-font-size-lg": "13px", "--rdrp-font-weight-semibold": "500", "--rdrp-font-weight-bold": "600", }, Default: {}, Large: { "--rdrp-font-size-xs": "13px", "--rdrp-font-size-sm": "14px", "--rdrp-font-size-base": "15px", "--rdrp-font-size-md": "16px", "--rdrp-font-size-lg": "18px", "--rdrp-font-weight-semibold": "700", "--rdrp-font-weight-bold": "800", },};
type PresetName = keyof typeof presets;
function CompoundCustomFontPopup() { const [value, setValue] = useState<Date | null>(null); const [preset, setPreset] = useState<PresetName>("Default");
return ( <div> <div style={{ display: "flex", gap: 6, marginBottom: 12 }}> {(Object.keys(presets) as PresetName[]).map((name) => ( <button key={name} onClick={() => setPreset(name)} style={{ padding: "6px 14px", border: `1px solid ${preset === name ? "#3b82f6" : "#d1d5db"}`, borderRadius: 6, background: preset === name ? "#eff6ff" : "#fff", cursor: "pointer", fontSize: 13, }} > {name} </button> ))} </div> <div style={presets[preset] as React.CSSProperties}> <DatePicker value={value} onChange={setValue} inline /> </div> </div> );}