การพิมพ์
แพ็คเกจ Tailwind v4 ใช้คลาส font-sans เริ่มต้นของ Tailwind (ui-sans-serif, system-ui, sans-serif, ...) เนื่องจาก CSS font-family ถูกสืบทอด คุณสามารถแทนที่ฟอนต์ของตัวเลือกได้โดยการห่อหุ้มด้วยคอนเทนเนอร์ที่มีสไตล์ fontFamily ฟอนต์ของคอนเทนเนอร์จะถูกส่งต่อไปยังองค์ประกอบทั้งหมดของตัวเลือก
รูปแบบฟอนต์
ห่อตัวเลือกและตั้งค่า fontFamily บนคอนเทนเนอร์เพื่อเปลี่ยนฟอนต์:
import { useState } from "react";import { DatePicker } from "react-date-range-picker-tailwind4";
const fonts = { system: "inherit", serif: "'Georgia', 'Times New Roman', serif", mono: "'JetBrains Mono', 'Fira Code', 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: 8, marginBottom: 16 }}> {(Object.keys(fonts) as FontName[]).map((name) => ( <button key={name} onClick={() => setFont(name)} style={{ padding: "4px 12px", borderRadius: 4, border: `1px solid ${font === name ? "#3b82f6" : "#d1d5db"}`, background: font === name ? "#eff6ff" : "#fff", color: font === name ? "#3b82f6" : "#374151", cursor: "pointer", fontSize: 13, fontFamily: fonts[name], textTransform: "capitalize", }} > {name} </button> ))} </div> <div style={{ fontFamily: fonts[font] }}> <DatePicker value={value} onChange={setValue} inline /> </div> </div> );}การใช้เว็บฟอนต์ (Noto Sans)
โหลดเว็บฟอนต์ขณะรันไทม์และนำไปใช้ผ่านคอนเทนเนอร์ ตัวอย่างนี้โหลด Noto Sans จาก Google Fonts:
import { useState, useEffect } from "react";import { DatePicker } from "react-date-range-picker-tailwind4";
function CompoundNotoSans() { const [value, setValue] = useState<Date | null>(null);
useEffect(() => { 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={{ fontFamily: '"Noto Sans", sans-serif' }}> <DatePicker value={value} onChange={setValue} inline /> </div> );}ในโปรเจกต์จริง ควรโหลดฟอนต์ผ่านแท็ก <link> ใน <head> ของ HTML หรือผ่าน CSS bundler แทนที่จะฉีดเข้ามาขณะรันไtime วิธีการใช้ useEffect ที่นี่มีไว้เพื่อการสาธิตเท่านั้น
แกลเลอรี่เว็บฟอนต์
เปรียบเทียบเว็บฟอนต์ต่างๆ เพื่อดูว่าการพิมพ์เปลี่ยนแปลงรูปลักษณ์ของตัวเลือกได้อย่างไร ฟอนต์ทั้งหมดด้านล่างรองรับการแสดงผลหลายภาษา (ละติน, CJK, เกาหลี)
import { useState, useEffect } from "react";import { DatePicker } from "react-date-range-picker-tailwind4";
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={{ fontFamily: WEB_FONTS[active].family }}> <DatePicker value={value} onChange={setValue} inline /> </div> </div> );}