Biến CSS

Gói styled sử dụng các thuộc tính tùy chỉnh CSS (biến) cho tất cả các giá trị hình ảnh. Ghi đè chúng trên .rdrp-root hoặc bất kỳ phần tử cha nào để tùy chỉnh giao diện mà không cần chạm vào mã nguồn của component.

Cách Ghi Đè

Tất cả các biến đều được giới hạn trong phạm vi .rdrp-root. Ghi đè chúng trong file CSS của riêng bạn:

/* Chủ đề tùy chỉnh của bạn */
.rdrp-root {
--rdrp-color-primary: #8b5cf6;
--rdrp-color-primary-hover: #7c3aed;
--rdrp-border-radius-lg: 12px;
}

Hoặc giới hạn phạm vi ghi đè cho một phiên bản cụ thể bằng cách sử dụng một lớp bao bọc:

.my-purple-picker .rdrp-root {
--rdrp-color-primary: #8b5cf6;
--rdrp-color-primary-hover: #7c3aed;
--rdrp-color-primary-light: #ede9fe;
--rdrp-color-primary-lighter: #f5f3ff;
}
<div className="my-purple-picker">
<DatePicker value={value} onChange={setValue} />
</div>

Tham Chiếu Biến

Màu Sắc

BiếnMặc định (Sáng)Mô tả
--rdrp-color-primary#3b82f6Màu hành động chính (ngày được chọn, nút xác nhận)
--rdrp-color-primary-hover#2563ebTrạng thái hover chính
--rdrp-color-primary-light#dbeafeNền khoảng thời gian, điểm nhấn chính nhạt
--rdrp-color-primary-lighter#eff6ffNền của cài đặt trước đang hoạt động
--rdrp-color-primary-disabled#93c5fdNút xác nhận bị vô hiệu hóa
--rdrp-color-bg#ffffffMàu nền
--rdrp-color-bg-hover#f3f4f6Nền hover cho ngày, nút
--rdrp-color-bg-subtle#f9fafbNền tinh tế
--rdrp-color-text#374151Màu văn bản mặc định
--rdrp-color-text-strong#111827Văn bản đậm (tiêu đề, thời gian hoạt động)
--rdrp-color-text-muted#6b7280Văn bản mờ (nút điều hướng, nhãn)
--rdrp-color-text-placeholder#6b7280Văn bản giữ chỗ
--rdrp-color-text-disabled#d1d5dbVăn bản ngày bị vô hiệu hóa
--rdrp-color-text-outside#9ca3afNgày của tháng khác
--rdrp-color-text-inverse#ffffffVăn bản trên nền chính
--rdrp-color-text-danger#ef4444Văn bản nút xóa/nguy hiểm
--rdrp-color-text-today#2563ebMàu chỉ báo ngày hôm nay
--rdrp-color-border#d1d5dbĐường viền mặc định
--rdrp-color-border-light#e5e7ebĐường viền nhạt (popup, select)
--rdrp-color-border-subtle#f3f4f6Đường viền tinh tế (chân trang, cài đặt trước)
--rdrp-color-border-hover#93c5fdTrạng thái hover của đường viền
--rdrp-color-highlight-dot#f59e0bMàu chấm nổi bật
--rdrp-highlight-dot-size4pxĐường kính chấm nổi bật
--rdrp-color-range-bg#dbeafeNền ngày trong khoảng thời gian
--rdrp-color-hover-range-bg#eff6ffNền xem trước khoảng thời gian khi hover
--rdrp-color-hover-target-bg#bfdbfeNền điểm cuối khi hover
--rdrp-color-time-highlightrgba(59, 130, 246, 0.08)Thanh nổi bật của bảng thời gian

Kiểu Chữ

BiếnMặc địnhMô tả
--rdrp-font-familySystem font stackHọ phông chữ
--rdrp-font-size-xs11pxCực nhỏ (tiêu đề ngày trong tuần ở kích thước nhỏ)
--rdrp-font-size-sm12pxNhỏ (tiêu đề ngày trong tuần, nhãn)
--rdrp-font-size-base13pxCơ bản (ô ngày, nút)
--rdrp-font-size-md14pxTrung bình (trigger, mục thời gian)
--rdrp-font-size-lg15pxLớn (tiêu đề đầu trang)
--rdrp-font-weight-normal400Độ đậm thường
--rdrp-font-weight-medium500Độ đậm trung bình
--rdrp-font-weight-semibold600Độ đậm bán đậm
--rdrp-font-weight-bold700Độ đậm đậm (chỉ báo hôm nay)

Khoảng Cách

BiếnMặc địnhMô tả
--rdrp-spacing-xs2pxKhoảng cách cực nhỏ
--rdrp-spacing-sm4pxKhoảng cách nhỏ
--rdrp-spacing-md8pxKhoảng cách trung bình
--rdrp-spacing-lg12pxKhoảng cách lớn
--rdrp-spacing-xl16pxKhoảng cách cực lớn
--rdrp-spacing-2xl24pxKhoảng cách lớn gấp 2 lần

Đường Viền

BiếnMặc địnhMô tả
--rdrp-border-radius-sm4pxBán kính nhỏ
--rdrp-border-radius-md6pxBán kính trung bình (nút, select)
--rdrp-border-radius-lg8pxBán kính lớn (ngày, trigger)
--rdrp-border-radius-xl12pxBán kính cực lớn (popup)
--rdrp-border-radius-full9999pxBán kính đầy đủ (chấm nổi bật)
--rdrp-border-width1pxĐộ rộng đường viền

Đổ Bóng

BiếnMặc địnhMô tả
--rdrp-shadow-popup0 10px 25px rgba(0,0,0,0.1)Đổ bóng cho popup
--rdrp-shadow-inline0 4px 12px rgba(0,0,0,0.06)Đổ bóng chế độ inline
--rdrp-shadow-sm0 2px 6px rgba(0,0,0,0.04)Đổ bóng nhỏ

Kích Thước

BiếnMặc địnhMô tả
--rdrp-cell-size36pxChiều rộng/cao của ô ngày
--rdrp-nav-btn-size28pxKích thước nút điều hướng
--rdrp-weekday-height28pxChiều cao hàng tiêu đề ngày trong tuần
--rdrp-grid-min-height216pxChiều cao tối thiểu của lưới lịch
--rdrp-panel-min-width252pxChiều rộng của một bảng lịch đơn
--rdrp-dual-gap24pxKhoảng cách giữa hai lịch
--rdrp-trigger-min-width200pxChiều rộng tối thiểu của nút trigger
--rdrp-trigger-padding-x14pxPadding ngang của trigger
--rdrp-trigger-padding-y8pxPadding dọc của trigger
--rdrp-popup-padding16pxPadding bên trong của popup
--rdrp-popup-gap6pxKhoảng cách nội dung của popup
--rdrp-btn-padding-x14pxPadding ngang của nút chân trang
--rdrp-btn-padding-y6pxPadding dọc của nút chân trang
--rdrp-preset-min-width140pxChiều rộng tối thiểu của thanh bên cài đặt trước

Bộ Chọn Thời Gian

BiếnMặc địnhMô tả
--rdrp-time-item-height32pxChiều cao mục cuộn thời gian
--rdrp-time-panel-height176pxTổng chiều cao của bảng thời gian
--rdrp-time-column-height160pxChiều cao cột có thể cuộn
--rdrp-time-panel-min-width120pxChiều rộng tối thiểu của bảng thời gian
--rdrp-time-colon-width12pxChiều rộng dấu hai chấm phân cách

Z-index

BiếnMặc địnhMô tả
--rdrp-z-popup50Z-index của popup
--rdrp-z-day-button20Z-index của ngày được tập trung

Hiệu Ứng Chuyển Động

BiếnMặc địnhMô tả
--rdrp-transition-fast0.1sChuyển động nhanh (hover ngày)
--rdrp-transition-normal0.15sChuyển động bình thường (trigger, nút)

Ví dụ Thực tế

Màu Tùy Chỉnh (Chủ đề Tím)

Ghi đè các biến màu chính để tạo ra một bảng màu hoàn toàn khác. Ví dụ này sử dụng một DatePicker với tông màu tím/violet.

import { useState } from "react";
import { DatePicker } from "react-date-range-picker-styled";
import "react-date-range-picker-styled/rdrp-styles.css";
function CustomColors() {
const [value, setValue] = useState<Date | null>(null);
return (
<div
style={
{
"--rdrp-color-primary": "#7c3aed",
"--rdrp-color-primary-hover": "#6d28d9",
"--rdrp-color-primary-light": "#ede9fe",
"--rdrp-color-primary-lighter": "#f5f3ff",
"--rdrp-color-primary-disabled": "#c4b5fd",
"--rdrp-color-text-today": "#7c3aed",
"--rdrp-color-border-hover": "#c4b5fd",
} as React.CSSProperties
}
>
<DatePicker value={value} onChange={setValue} />
</div>
);
}

Phông Chữ Tùy Chỉnh (Serif)

Phông chữ được kế thừa qua CSS, vì vậy việc bao bọc bộ chọn trong một thẻ div với font-family tùy chỉnh sẽ áp dụng cho tất cả văn bản. Ví dụ này sử dụng một DateRangePicker với phông chữ Georgia serif.

import { useState } from "react";
import { DateRangePicker } from "react-date-range-picker-styled";
import "react-date-range-picker-styled/rdrp-styles.css";
function CustomFont() {
const [value, setValue] = useState<{ start: Date | null; end: Date | null }>({
start: null,
end: null,
});
return (
<div style={{ fontFamily: "'Georgia', serif" }}>
<DateRangePicker value={value} onChange={setValue} />
</div>
);
}

Góc Sắc (Không có Bán kính Viền)

Đặt tất cả các biến bán kính viền thành 0px để có giao diện hoàn toàn vuông vức.

import { useState } from "react";
import { DatePicker } from "react-date-range-picker-styled";
import "react-date-range-picker-styled/rdrp-styles.css";
function CustomBorderRadius() {
const [value, setValue] = useState<Date | null>(null);
return (
<div
style={
{
"--rdrp-border-radius-sm": "0px",
"--rdrp-border-radius-md": "0px",
"--rdrp-border-radius-lg": "0px",
"--rdrp-border-radius-xl": "0px",
} as React.CSSProperties
}
>
<DatePicker value={value} onChange={setValue} />
</div>
);
}

Kích Thước Tùy Chỉnh qua Biến CSS

Thay vì sử dụng prop size có sẵn, hãy ghi đè các biến kích thước riêng lẻ để kiểm soát chính xác. Ví dụ này sử dụng một DateRangePicker với kích thước ô và kích thước phông chữ tùy chỉnh.

import { useState } from "react";
import { DateRangePicker } from "react-date-range-picker-styled";
import "react-date-range-picker-styled/rdrp-styles.css";
function CustomSize() {
const [value, setValue] = useState<{ start: Date | null; end: Date | null }>({
start: null,
end: null,
});
return (
<div
style={
{
"--rdrp-cell-size": "44px",
"--rdrp-font-size-base": "15px",
"--rdrp-font-size-md": "16px",
"--rdrp-font-size-lg": "18px",
"--rdrp-spacing-sm": "6px",
"--rdrp-spacing-md": "10px",
"--rdrp-spacing-lg": "14px",
} as React.CSSProperties
}
>
<DateRangePicker value={value} onChange={setValue} />
</div>
);
}