การพิมพ์
แพ็คเกจ styled ใช้ system font stack เป็นค่าเริ่มต้น:
--rdrp-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;ซึ่งจะแสดงผลด้วยฟอนต์ของระบบปฏิบัติการในแต่ละแพลตฟอร์ม (San Francisco บน macOS, Segoe UI บน Windows, Roboto บน Android) ฟอนต์ระบบรองรับหลายภาษาได้ดี เนื่องจากระบบปฏิบัติการจะจัดการฟอนต์สำรองสำหรับ CJK, อารบิก และสคริปต์อื่นๆ โดยอัตโนมัติ
หากต้องการแทนที่ ให้ตั้งค่า --rdrp-font-family ที่อิลิเมนต์ครอบใดๆ ค่าจะถูกส่งต่อไปยังตัวเลือกวันที่
CSS Variable แบบ Inline Style
แทนที่ฟอนต์ผ่านแอททริบิวต์ 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> );}การใช้ Web Fonts (Noto Sans)
สำหรับการแสดงผลที่สอดคล้องกันข้ามแพลตฟอร์มหรือโปรเจกต์ i18n ให้โหลดเว็บฟอนต์เช่น Noto Sans และแทนที่ตัวแปร:
import { DatePicker } from "react-date-range-picker-styled";import "react-date-range-picker-styled/rdrp-styles.css";
// 1. โหลด Noto Sans ใน HTML หรือ CSS ของคุณ:// <link href="https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;500;600;700&display=swap" rel="stylesheet">
// 2. แทนที่ตัวแปรฟอนต์:<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> );}ขนาดและน้ำหนักฟอนต์
ปรับแต่งความหนาแน่นของการพิมพ์อย่างละเอียดโดยการแทนที่ตัวแปรขนาดและน้ำหนัก:
| Variable | Default | คำอธิบาย |
|---|---|---|
--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> );}