Typographie
Le paquet styled utilise par défaut une pile de polices système :
--rdrp-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;Cela s’affiche avec la police native du système d’exploitation sur chaque plateforme (San Francisco sur macOS, Segoe UI sur Windows, Roboto sur Android). Les polices système offrent un bon support multilingue car le système d’exploitation gère automatiquement les polices de secours pour le CJK, l’arabe et d’autres écritures.
Pour surcharger, définissez --rdrp-font-family sur n’importe quel élément ancêtre — cela se propage en cascade dans le sélecteur.
Style en ligne avec variable CSS
Surchargez la police via l’attribut style sur un élément conteneur :
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> );}Famille de polices
Basculez entre les familles de polices en définissant --rdrp-font-family sur un conteneur :
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> );}Utilisation des polices Web (Noto Sans)
Pour un rendu multiplateforme cohérent ou des projets d’internationalisation, chargez une police web comme Noto Sans et surchargez la variable :
import { DatePicker } from "react-date-range-picker-styled";import "react-date-range-picker-styled/rdrp-styles.css";
// 1. Chargez Noto Sans dans votre HTML ou CSS :// <link href="https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;500;600;700&display=swap" rel="stylesheet">
// 2. Surchargez la variable de police :<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> );}Galerie de polices Web
Comparez différentes polices web pour voir à quel point la typographie change radicalement l’apparence du sélecteur. Toutes les polices ci-dessous prennent en charge le rendu multilingue (latin, CJK, coréen).
Les polices ci-dessous sont chargées depuis le CDN de Google Fonts à des fins de démonstration. Cette bibliothèque n’inclut aucune police web — vous devez les charger dans votre propre projet.
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> );}Taille et graisse de la police
Ajustez finement la densité de la typographie en surchargeant les variables de taille et de graisse :
| Variable | Défaut | Description |
|---|---|---|
--rdrp-font-size-xs | 11px | Texte le plus petit |
--rdrp-font-size-sm | 12px | Étiquettes des jours de la semaine |
--rdrp-font-size-base | 13px | Cellules de jour, boutons |
--rdrp-font-size-md | 14px | Déclencheur, éléments temporels |
--rdrp-font-size-lg | 15px | Titre du mois |
--rdrp-font-weight-normal | 400 | Graisse de base |
--rdrp-font-weight-medium | 500 | Emphase moyenne |
--rdrp-font-weight-semibold | 600 | Jours sélectionnés, titres |
--rdrp-font-weight-bold | 700 | Indicateur d’aujourd’hui |
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> );}