ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

RBC์˜ ๋ Œ๋”๋ง ๋ฐฉ๋ฒ•(CRS)๊นŒ์ง€ ํŒŒ์•…ํ•˜์—ฌ ์บ˜๋ฆฐ๋” ํ˜•ํƒœ๋ฅผ ์ถœ๋ ฅํ•˜์˜€๋‹ค!

RBC์˜ ๊ธฐ๋ณธ์ ์ธ ์Šคํƒ€์ผ์ด๋ฉฐ, ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์„ ์œ„ํ•œ ๋‚ด์šฉ๋“ค์„ ์ •๋ฆฌํ•œ๋‹ค.

 

 


RBC์˜ ๊ธฐ๋ณธ ์Šคํƒ€์ผ

 

RBC npm ๋ฌธ์„œ๋ฅผ ์ฝ๋˜ ์ค‘ SASS์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ฌธ์„œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์™€์žˆ๋‹ค.

 

 

 

์ด ๋ง์ธ์ฆ‰์Šจ, 

  • RBC์˜ ๊ธฐ๋ณธ ์Šคํƒ€์ผ์ด ์ ์šฉ๋œ CSS ํŒŒ์ผ(react-big-calendar.css)์ด ์žˆ๊ณ  ์ด๋ฅผ ๋ฐ”๋กœ import ํ•˜์—ฌ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์Šคํƒ€์ผ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋ ค๋ฉด SASS ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ์ˆ˜์ •ํ•œ SASS ํŒŒ์ผ์€ ์ƒˆ๋กœ์šด CSS ํŒŒ์ผ์„ ๋นŒ๋“œํ•˜๋ฉฐ ์ง์ ‘ import ํ•œ๋‹ค.

 

์ดˆ๊ธฐ ์„ธํŒ… ์ค‘ ์•„๋ž˜์™€ ๊ฐ™์ด ์บ˜๋ฆฐ๋” ์ปดํฌ๋„ŒํŠธ์— ์ธ๋ผ์ธ ์Šคํƒ€์ผ ์š”์†Œ๋ฅผ ์ ์šฉ์‹œ์ผฐ๋‹ค.

๊ณต์‹ ๋ฌธ์„œ์— ๋‚˜์™€์žˆ๋“ฏ ๋‹ฌ๋ ฅ์˜ ์ปจํ…Œ์ด๋„ˆ ์š”์†Œ์— ๋†’์ด๋ฅผ ์ฃผ์–ด์•ผ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ด๋•Œ CSS ํŒŒ์ผ์„ import๋ฅผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ์Šคํƒ€์ผ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค!

import "react-big-calendar/lib/css/react-big-calendar.css";

	<Calendar
        localizer={localizer}
        events={events}
        startAccessor="start"
        endAccessor="end"
        style={{ height: 500 }} // โœ… ๋‹ฌ๋ ฅ ๋†’์ด(๋‹ฌ๋ ฅ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•จ)
      />
๋”๋ณด๊ธฐ

๋†’์ด๋ฅผ ์ฃผ์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋œ๋‹ค.

 

 

RBC์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์Šคํƒ€์ผ ์š”์†Œ๋“ค

๊ฐ€์žฅ ๊ธฐ๋ณธ ํ˜•ํƒœ์˜ CSS ์š”์†Œ๋ฅผ 7๊ฐœ์˜ ์„น์…˜์œผ๋กœ ๋‚˜๋ˆ„์–ด ์‚ดํŽด๋ณด๊ฒ ๋‹ค.

1. ์บ˜๋ฆฐ๋” ์ „์ฒด ๋ ˆ์ด์•„์›ƒ (.rbc-calendar)

  • display: flex;๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ
  • ๋‚ด๋ถ€์ ์œผ๋กœ rbc-toolbar, rbc-month-view ๋“ฑ์˜ ์š”์†Œ๋ฅผ ํฌํ•จ
.rbc-calendar {
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  height: 100%;
  font-family: sans-serif;
  font-size: 14px;
}

 

 

2. ํˆด๋ฐ” ์Šคํƒ€์ผ (.rbc-toolbar)

  • ์›” ๋ณ€๊ฒฝ ๋ฒ„ํŠผ๊ณผ ํ˜„์žฌ ๋‚ ์งœ ํ‘œ์‹œํ•˜๋Š” ๋ถ€๋ถ„
  • ๋ฒ„ํŠผ ๊ธฐ๋ณธ ์Šคํƒ€์ผ ์ ์šฉ๋จ
.rbc-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 10px;
}

.rbc-toolbar button {
  background-color: #f7f7f7;
  border: 1px solid #ddd;
  padding: 5px 10px;
  cursor: pointer;
}

// ๊ธฐ๋ณธ ๋ฒ„ํŠผ ์Šคํƒ€์ผ
.rbc-toolbar button:hover {
  background-color: #e6e6e6;
}

 

 

3. ์š”์ผ ํ—ค๋” ์Šคํƒ€์ผ (.rbc-header)

  • ์š”์ผ ํ‘œ์‹œํ•˜๋Š” ๋ถ€๋ถ„ (์˜ˆ: "์ผ", "์›”", "ํ™”", …)
.rbc-header {
  text-align: center;
  padding: 10px;
  background-color: #f7f7f7;
  border-bottom: 1px solid #ddd;
}

 

4. ๋‚ ์งœ ์…€ ์Šคํƒ€์ผ (.rbc-day-bg)

  • ๊ฐ ๋‚ ์งœ ์นธ์— ์ ์šฉ๋˜๋Š” ์Šคํƒ€์ผ
.rbc-day-bg {
  border-right: 1px solid #ddd;
}

// ์ฃผ๋ง ์Šคํƒ€์ผ
.rbc-day-bg.rbc-off-range-bg {
  background-color: #f3f3f3;
}

 

5. ์ด๋ฒคํŠธ ์Šคํƒ€์ผ (.rbc-event)

  • ์บ˜๋ฆฐ๋”์— ํ‘œ์‹œ๋˜๋Š” ์ผ์ •(์ด๋ฒคํŠธ) ์Šคํƒ€์ผ
.rbc-event {
  background-color: #3174ad; /* ๊ธฐ๋ณธ ํŒŒ๋ž€์ƒ‰ */
  color: white;
  padding: 4px;
  border-radius: 4px;
}

// ๋งˆ์šฐ์Šค ์˜ค๋ฒ„ ์‹œ ์Šคํƒ€์ผ
.rbc-event:hover {
  background-color: #265985;
}

// ์—ฐ์† ์ด๋ฒคํŠธ ์Šคํƒ€์ผ
.rbc-event-continues-before {
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
}
.rbc-event-continues-after {
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}

 

6. ํ˜„์žฌ ๋‚ ์งœ ๊ฐ•์กฐ (.rbc-today)

  • ์˜ค๋Š˜ ๋‚ ์งœ ๋ฐฐ๊ฒฝ์ƒ‰ ๊ฐ•์กฐ
.rbc-today {
  background-color: rgba(0, 0, 255, 0.1);
}

 

7. ์„ ํƒ๋œ ๋‚ ์งœ ์Šคํƒ€์ผ (.rbc-selected-cell)

  • ๋“œ๋ž˜๊ทธ๋กœ ๋‚ ์งœ ๋ฒ”์œ„ ์„ ํƒ ์‹œ ๊ฐ•์กฐ ํ‘œ์‹œ๋จ
.rbc-selected-cell {
  background-color: rgba(0, 0, 255, 0.2);
}

 

 

๊ธฐ์กด ์Šคํƒ€์ผ์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•

์•ž์„œ ๋ณธ 7๊ฐ€์ง€์˜ ๊ธฐ์กด ์Šคํƒ€์ผ์„ ์œ ์ง€ํ•˜๊ณ , ๊ทธ ์ด์™ธ์˜ ๋ถ€๋ถ„์— ์ƒˆ๋กœ์šด ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?

 

1. ๊ธฐ์กด ์Šคํƒ€์ผ์„ ํ™•์žฅํ•˜๋Š” ๋ฐฉ์‹

๊ธฐ์กด ์Šคํƒ€์ผ์˜ ์ด๋ฆ„์„ ํ™•์žฅํ•˜์—ฌ ์ƒˆ๋กœ์šด ์Šคํƒ€์ผ์„ ์ ์šฉํ•œ๋‹ค.

.rbc-calendar {
  background-color: white; // ๊ธฐ์กด ์Šคํƒ€์ผ ์œ ์ง€
}
.rbc-calendar.custom {
  border: 2px solid red;  // ์ถ”๊ฐ€์ ์ธ ์Šคํƒ€์ผ๋งŒ ์ ์šฉ
}

 

2. ๊ธฐ์กด ์Šคํƒ€์ผ ์ƒ์†

@extend๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด์˜ ์Šคํƒ€์ผ์„ ๋ฌผ๋ ค๋ฐ›์•„ ์ƒˆ๋กœ์šด ์Šคํƒ€์ผ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค.

.custom-calendar {
  @extend .rbc-calendar; 
  border: 2px solid red;
}

 

3. CSS ๋ณ€์ˆ˜ ํ™œ์šฉ

RBC์˜ ๊ธฐ์กด SCSS ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด $๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ƒˆ๋กœ์šด ์Šคํƒ€์ผ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” --๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•˜๊ณ  var(--๋ณ€์ˆ˜)๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

// styles.scss (๊ธฐ์กด RBC ์Šคํƒ€์ผ ์ˆ˜์ •)
@import 'react-big-calendar/lib/sass/styles';

$event-background-color: red;  // ๊ธฐ์กด ์ด๋ฒคํŠธ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ณ€๊ฒฝ

.rbc-event {
  background-color: $event-background-color !important;
}



// styles.css (์ƒˆ๋กœ์šด ์Šคํƒ€์ผ ์ง€์ •)
:root {
  --custom-event-bg: blue; // ์ƒˆ๋กœ์šด CSS ๋ณ€์ˆ˜
}

.my-custom-event {
  background-color: var(--custom-event-bg) !important;
}

 

 

 

RBC์˜ SASS

์ƒ๋‹จ์— ์ ์€ ๊ฒƒ์ฒ˜๋Ÿผ RBC์˜ ์Šคํƒ€์ผ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋ ค๋ฉด SASS ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด SASS๋Š” ๋ฌด์—‡์ด๋ฉฐ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?

 

SASS์™€ SCSS

 

 

RBC ๋‚ด๋ถ€์ ์œผ๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์„ ์œ„ํ•ด์„œ๋Š” SASS ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.

์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•œ ์Šคํƒ€์ผ์„ ๋ธŒ๋ผ์šฐ์ €์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” CSS ํŒŒ์ผ์ด ํ•„์š”ํ•˜๋‹ค.

 

๋ธŒ๋ผ์šฐ์ €๋Š” ์ง์ ‘ SCSS ํŒŒ์ผ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค.

์ฆ‰, SCSS ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” SCSS ํŒŒ์ผ์„ CSS ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” CSS ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

 

RBC์™€ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฐ„๊ทน์„ ํ•ด๊ฒฐํ•ด์ฃผ๋Š” ๊ฒƒ์ด Sass ์ด๋‹ค.

๋”ฐ๋ผ์„œ Sass๋ผ๋Š” ๊ฒƒ์€ CSS ์ „์ฒ˜๋ฆฌ๊ธฐ ๋„๊ตฌ์ด๋ฉฐ, RBC์˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์„ ๋ธŒ๋ผ์šฐ์ €์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

 

 

  • Sass(=SASS)๋Š” CSS ์ „์ฒ˜๋ฆฌ๊ธฐ ๋„๊ตฌ์ด๋‹ค.
  • SCSS๋Š” Sass์—์„œ ์ง€์›ํ•˜๋Š” ๋ฌธ๋ฒ• ์Šคํƒ€์ผ ํ˜•์‹์ด๋‹ค.
  • RBC ๋‚ด๋ถ€ ์Šคํƒ€์ผ ํŒŒ์ผ์€ SCSS(.scss) ํ˜•์‹์œผ๋กœ ๋˜์–ด์žˆ๋‹ค.
๋”๋ณด๊ธฐ
// Sass(.sass)
$primary-color: blue

body
  background: $primary-color

nav
  ul
    margin: 0
    padding: 0

// SCSS(.scss)
$primary-color: blue;

body {
  background: $primary-color;
}

nav {
  ul {
    margin: 0;
    padding: 0;
  }
}

์ฐธ๊ณ  ์ž๋ฃŒ

 

 

 

CSS ์ ์šฉ ์šฐ์„  ์ˆœ์œ„

RBC๊ฐ€ ๊ฐ–๊ณ ์žˆ๋Š” ๊ธฐ๋ณธ ์Šคํƒ€์ผ๊ณผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์„ ์œ„ํ•œ ํŒŒ์ผ๊นŒ์ง€ ์•Œ์•„๋ณด์•˜๋‹ค.

๐Ÿค”๊ธฐ์กด ์Šคํƒ€์ผ์— ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ  SASS ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์˜€์„ ๋•Œ, ๊ธฐ์กด ์Šคํƒ€์ผ๊ณผ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์ตœ์ข…์ ์œผ๋กœ ์–ด๋–ค ๊ฒƒ์ด ๋ฐ˜์˜๋ ๊นŒ?

 

  1. ์ธ๋ผ์ธ ์Šคํƒ€์ผ (style={{}})  ๊ฐ€์žฅ ๊ฐ•ํ•จ
  2. ID ์„ ํƒ์ž (#calendar)
  3. ํด๋ž˜์Šค ์„ ํƒ์ž (.rbc-calendar) / ์†์„ฑ ์„ ํƒ์ž ([type="text"])
  4. ํƒœ๊ทธ ์„ ํƒ์ž (div, span ๋“ฑ)
  5. ๊ธฐ๋ณธ ๋ธŒ๋ผ์šฐ์ € ์Šคํƒ€์ผ  ๊ฐ€์žฅ ์•ฝํ•จ

 

 

๋งŒ์•ฝ, ๊ธฐ์กด CSS์™€ ๊ฒน์น  ๊ฒฝ์šฐ ๊ธฐ์กด ์Šคํƒ€์ผ๋ณด๋‹ค ๊ฐ•ํ•˜๊ฒŒ ์ ์šฉํ•˜๋ ค๋ฉด

  • ๋” ๊ฐ•ํ•œ ์„ ํƒ์ž ์‚ฌ์šฉ (.my-calendar-class .rbc-event ๋“ฑ)
  • !important ์ถ”๊ฐ€
  • CSS ํŒŒ์ผ์ด ๋นŒ๋“œ ํ›„ ๋” ๋‚˜์ค‘์— ๋กœ๋“œ๋˜๋„๋ก ์กฐ์ •
    • ์ปค์Šคํ…€ CSS๋ฅผ ๊ธฐ์กด CSS ์ดํ›„์— importํ•˜๊ธฐ
import 'react-big-calendar/lib/css/react-big-calendar.css'; 
import './my-custom-calendar.scss';  // ์ปค์Šคํ…€ ์Šคํƒ€์ผ์ด ๋” ๋‚˜์ค‘์— ๋กœ๋“œ๋จ!

 

๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2026/03   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ