react-calendar
컴포넌트 옵션 사용
<Calendar
formatDay={(locale, date) => moment(date).format("D")}
navigationLabel={({ date, label, locale, view }) => {
return moment(date).format("YYYY.MM");
}}
minDetail="month"
maxDetail="month"
value={value}
onActiveStartDateChange={({
action,
activeStartDate,
value,
view,
}) => {
}}
onChange={(value, event) => {
setValue(value);
}}
calendarType="US"
tileClassName={({ date, view }) => {
return "day_" + date.getDay().toString();
}}
tileContent={({ activeStartDate, date, view }) => {
return (
<>
<span
key={s.schdlTm + s.schdlYmd + gubun + idx}
className="ellipsis"
>
{s.schdlCn}
</span>
</>
);
}}
/>
css 커스텀
.react-calendar {
width: 65%;
max-width: 100%;
font-family: "pretendard", sans-serif;
line-height: 150%;
background-color: #fff;
}
.react-calendar--doubleView {
width: 700px;
}
.react-calendar--doubleView .react-calendar__viewContainer {
display: flex;
margin: -0.5em;
}
.react-calendar--doubleView .react-calendar__viewContainer > * {
width: 50%;
margin: 0.5em;
}
.react-calendar,
.react-calendar *,
.react-calendar *:before,
.react-calendar *:after {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.react-calendar button {
margin: 0;
}
.react-calendar button:enabled:hover {
cursor: pointer;
}
.react-calendar__navigation {
display: flex;
height: 50px;
margin-bottom: 0 !important;
justify-content: center;
text-align: center;
align-items: center;
font-size: 30px;
font-weight: 500;
}
.react-calendar__navigation button {
min-width: 44px;
background: none;
}
.react-calendar__navigation button:disabled {
text-align: center;
}
.react-calendar__navigation__next2-button,
.react-calendar__navigation__prev2-button {
display: none;
}
.react-calendar__navigation__label {
text-align: left;
font-size: var(--fs-28);
font-weight: 700;
width: 200px;
display: inline-block;
flex-grow: 0 !important;
}
.react-calendar__navigation button:hover {
}
.react-calendar__navigation button:active {
}
.react-calendar__month-view__weekdays {
text-decoration: none !important;
font-size: var(--fs-22);
font-weight: 500;
}
.react-calendar__month-view__weekdays__weekday {
padding: 12px !important;
border-right: 1px solid var(--gray-300);
border-top: 1px solid var(--gray-300);
border-bottom: 1px solid var(--gray-300);
& abbr[aria-label="일요일"] {
color: var(--error04);
}
& abbr[aria-label="토요일"] {
color: var(--mblue03);
}
}
.react-calendar__month-view__weekNumbers .react-calendar__tile {
display: flex;
align-items: center;
justify-content: center;
font-size: 0.75em;
font-weight: bold;
}
.react-calendar__month-view {
background-color: var(--gray-100);
border-left: 1px solid var(--gray-300);
}
.react-calendar__tile {
max-width: 100%;
padding: 1.2rem;
background: none;
text-align: center;
line-height: 16px;
font-size: var(--fs-22);
border-right: 1px solid var(--gray-300);
border-bottom: 1px solid var(--gray-300);
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
min-height: 110px;
gap: 10px;
font-weight: 500;
box-sizing: border-box;
position: relative;
&::after {
content: "";
width: 100%;
height: 100%;
border: 1px solid transparent;
position: absolute;
left: 0;
top: 0;
}
.schedule_box {
color: var(--gray-1000);
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 10px;
font-size: var(--fs-14);
font-weight: 500;
width: 100%;
.ellipsis {
width: 100%;
text-overflow: ellipsis;
word-break: break-all;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
text-align: left;
}
}
}
.react-calendar__month-view__days__day--weekend {
&.day_0 {
color: var(--error04);
&.react-calendar__month-view__days__day--neighboringMonth {
color: var(--gray-600);
}
}
}
.react-calendar__month-view__days__day--neighboringMonth {
color: var(--gray-600);
}
.react-calendar__year-view .react-calendar__tile,
.react-calendar__decade-view .react-calendar__tile,
.react-calendar__century-view .react-calendar__tile {
padding: 2em 0.5em;
}
.react-calendar__tile:disabled {
background-color: #f0f0f0;
}
.react-calendar__tile:disabled {
background-color: #f0f0f0;
}
.react-calendar__tile:enabled:hover,
.react-calendar__tile:enabled:focus {
box-sizing: border-box;
&.react-calendar__tile--active {
border: 0px;
}
}
.react-calendar__tile:enabled:hover {
&::after {
border: 1px solid var(--mblue03);
}
}
.react-calendar__tile--hasActive {
background: var(--gray-200);
}
.react-calendar__tile--hasActive:enabled:hover,
.react-calendar__tile--hasActive:enabled:focus {
background: var(--gray-200);
}
.react-calendar__tile--active {
background: var(--gray-200);
color: var(--gray-1000);
border: 0px;
}
.react-calendar__tile--active:enabled:hover,
.react-calendar__tile--active:enabled:focus {
background: var(--gray-200);
}
.react-calendar--selectRange .react-calendar__tile--hover {
background-color: #e6e6e6;
}
abbr[title] {
text-decoration: none;
}
.react-calendar__month-view__weekdays__weekday {
padding: 0.9em;
}
@media screen and (max-width: 1024px) {
.react-calendar {
width: 100%;
background-color: #f8f8f8;
}
.react-calendar__navigation__label {
font-size: var(--fs-18);
}
.react-calendar__month-view {
background-color: unset;
border: 0px;
}
.react-calendar__tile {
height: unset;
justify-content: center;
align-items: center;
border: 1px solid #f8f8f8;
font-size: var(--fs-14);
font-weight: 400;
min-height: unset;
.schedule_box {
display: none;
}
}
.react-calendar__tile:has(.exist) {
background-color: var(--gray-400);
}
.react-calendar__month-view__weekdays {
font-size: var(--fs-14);
}
.react-calendar__month-view__weekdays__weekday {
text-align: center;
font-weight: 700;
border: 0px;
& abbr[aria-label="일요일"] {
color: var(--gray-1000);
}
& abbr[aria-label="토요일"] {
color: var(--gray-1000);
}
}
.react-calendar__tile:enabled:hover {
border: 0px;
}
.react-calendar__tile:enabled:focus {
box-sizing: border-box;
&.react-calendar__tile--active {
border: 1px solid var(--mblue03);
}
}
.react-calendar__tile--hasActive {
border: 1px solid var(--mblue03);
}
.react-calendar__tile--hasActive:enabled:hover,
.react-calendar__tile--hasActive:enabled:focus {
border: 1px solid var(--mblue03);
}
.react-calendar__tile--active {
border: 1px solid var(--mblue03);
}
}