Notice
                              
                          
                        
                          
                          
                            Recent Posts
                            
                        
                          
                          
                            Recent Comments
                            
                        
                          
                          
                            Link
                            
                        
                    | ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ | 
|---|---|---|---|---|---|---|
| 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 | 
                            Tags
                            
                        
                          
                          - ์๋ฐ์คํฌ๋ฆฝํธ
 - ์น๋์์ธ
 - ๊ฐ์์์ด๋
 - ํํธ๋ฆญ์ค
 - ์ผ๋ฐํ
 - ๋คํฌ๋ชจ๋ํ ๊ธ
 - js์คํฌ๋กค์ด๋ฒคํธ
 - ์๋ฐ์คํฌ๋ฆฝํธui
 - ๋ทํ๋ฆญ์ค์ ๋๋ฉ์ด์ 
 - UX๋์์ธ
 - ์น์ ๊ทผ์ฑ
 - ์คํฌ๋กค์ ๋๋ฉ์ด์ 
 - Golden
 - UIUX
 - ํ๋ก ํธ์๋
 - ์น๊ฐ๋ฐ
 - kpopdemonhunters
 - ๋คํฌ๋ชจ๋
 - ์ ๊ทผ์ฑ
 - ์ผ์ดํ๋ฐ๋ชฌํํฐ์ค
 - ๋ทํ๋ฆญ์คost
 - ui์ปดํฌ๋ํธ
 - JavaScript
 - ์ฌ์๋ณด์ด์ฆ
 - ๊ณจ๋
 - ๋ฐ๋๋ผjs
 - ๋ฐ๋ง์ผํ
 - ๋ฐ๋๋ผ์คํฌ๋ฆฝํธ
 - ์นUI
 - ๋น๋ณด๋์ฐจํธ
 
                            Archives
                            
                        
                          
                          - Today
 
- Total
 
UI Code Lab
์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ ์ง ์ ํ๊ธฐ(Date Picker) ์ง์  ๋ง๋ค๊ธฐ – ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ๊ตฌํํ๋ ๋ฐฉ๋ฒ ๋ณธ๋ฌธ
      ์๋ฐ์คํฌ๋ฆฝํธUI
      
    ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ ์ง ์ ํ๊ธฐ(Date Picker) ์ง์  ๋ง๋ค๊ธฐ – ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ๊ตฌํํ๋ ๋ฐฉ๋ฒ
๐ฏ๊ฟ์์ด๐ 2025. 7. 7. 14:57๋ฐ์ํ
    
    
    
  
๐งญ ์ ์ง์  ๋ ์ง ์ ํ๊ธฐ๋ฅผ ๋ง๋ค์ด์ผ ํ ๊น?
๋๋ถ๋ถ์ ์น ํ๋ก์ ํธ์์๋ ๋ ์ง ์ ๋ ฅ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋ฌผ๋ก input [type="date"] ๋ฅผ ์ฌ์ฉํ ์๋ ์์ง๋ง,
๋ธ๋ผ์ฐ์ ๋ง๋ค ๋์์ธ์ด ๋ค๋ฅด๊ณ ์ปค์คํฐ๋ง์ด์ง์ด ์ด๋ ต๋ค๋ ๋จ์ ์ด ์์ฃ .
๊ทธ๋์ ์ด๋ฒ ๊ธ์์๋ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ ์ง ์ ํ๊ธฐ UI๋ฅผ ์ง์  ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค.
๐ ๏ธ ๊ตฌํ ๋ชฉํ
- ๋ฌ๋ ฅ UI๋ฅผ ๋์ ์ผ๋ก ์์ฑ
 - ํ์ฌ ์ ๊ธฐ์ค์ผ๋ก ๋ ์ง ํ์
 - ์ด์ /๋ค์ ๋ฌ ์ด๋ ๊ธฐ๋ฅ
 - ๋ ์ง ํด๋ฆญ ์ ์ ํ๋ ๋ ์ง ์ถ๋ ฅ
 
๐งฑ HTML ๊ตฌ์กฐ
<div class="datepicker">
  <div class="header">
    <button id="prev">โ</button>
    <span id="month-year"></span>
    <button id="next">โถ</button>
  </div>
  <table id="calendar">
    <thead>
      <tr>
        <th>์ผ</th><th>์</th><th>ํ</th><th>์</th><th>๋ชฉ</th><th>๊ธ</th><th>ํ </th>
      </tr>
    </thead>
    <tbody></tbody>
  </table>
</div>
<p>์ ํํ ๋ ์ง: <span id="selected-date">์์</span></p>
๐จ CSS ์คํ์ผ (๊ฐ๋จ ๋ฒ์ )
.datepicker {
  width: 300px;
  border: 1px solid #ccc;
  padding: 10px;
  font-family: sans-serif;
}
.header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
#calendar td {
  text-align: center;
  padding: 5px;
  cursor: pointer;
}
#calendar td:hover {
  background-color: #f0f0f0;
}
.selected {
  background-color: #007bff;
  color: white;
}
โ๏ธ ์๋ฐ์คํฌ๋ฆฝํธ ๋ก์ง
const calendarBody = document.querySelector("#calendar tbody");
const monthYear = document.getElementById("month-year");
const selectedDate = document.getElementById("selected-date");
let today = new Date();
let currentMonth = today.getMonth();
let currentYear = today.getFullYear();
function renderCalendar(month, year) {
  calendarBody.innerHTML = "";
  const firstDay = new Date(year, month, 1).getDay();
  const lastDate = new Date(year, month + 1, 0).getDate();
  monthYear.textContent = `${year}๋
 ${month + 1}์`;
  let row = document.createElement("tr");
  for (let i = 0; i < firstDay; i++) {
    row.appendChild(document.createElement("td"));
  }
  for (let day = 1; day <= lastDate; day++) {
    if (row.children.length === 7) {
      calendarBody.appendChild(row);
      row = document.createElement("tr");
    }
    const cell = document.createElement("td");
    cell.textContent = day;
    cell.addEventListener("click", () => {
      document.querySelectorAll("#calendar td").forEach(td => td.classList.remove("selected"));
      cell.classList.add("selected");
      selectedDate.textContent = `${year}-${String(month + 1).padStart(2, "0")}-${String(day).padStart(2, "0")}`;
    });
    row.appendChild(cell);
  }
  calendarBody.appendChild(row);
}
document.getElementById("prev").addEventListener("click", () => {
  currentMonth--;
  if (currentMonth < 0) {
    currentMonth = 11;
    currentYear--;
  }
  renderCalendar(currentMonth, currentYear);
});
document.getElementById("next").addEventListener("click", () => {
  currentMonth++;
  if (currentMonth > 11) {
    currentMonth = 0;
    currentYear++;
  }
  renderCalendar(currentMonth, currentYear);
});
renderCalendar(currentMonth, currentYear);
๐ SEO ์ต์ ํ๋ฅผ ์ํ ํ
- ํ๊น ํค์๋: ์๋ฐ์คํฌ๋ฆฝํธ ๋ ์ง ์ ํ๊ธฐ, Date Picker, ๋ฌ๋ ฅ UI, JS ๋ฌ๋ ฅ ๋ง๋ค๊ธฐ
 - H1~H3 ํ๊ทธ ๊ตฌ์กฐํ: ๊ฒ์์์ง์ด ์ฝํ ์ธ ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์๋๋ก ๊ตฌ์ฑ
 - ์ด๋ฏธ์ง ALT ํ๊ทธ: ์ฝ๋ ๊ฒฐ๊ณผ๋ฅผ ์บก์ฒํด ์ด๋ฏธ์ง๋ก ์ฒจ๋ถ ์ alt="์๋ฐ์คํฌ๋ฆฝํธ ๋ฌ๋ ฅ UI ์์" ๋ฑ์ผ๋ก ์ค๋ช ์ถ๊ฐ
 - ๋ด๋ถ ๋งํฌ: ๊ด๋ จ ๊ธ์ด ์๋ค๋ฉด ์ฐ๊ฒฐ (์: ๋ชจ๋ฌ, ํ ์คํธ ์๋ฆผ ๋ฑ)
 - ์ธ๋ถ ๋งํฌ: MDN ๋ฌธ์๋ ๊ณต์ JS ๋ฌธ์ ๋งํฌ ํ์ฉ
 
๐งฉ ๋ง๋ฌด๋ฆฌ
์ด๋ ๊ฒ ์ง์  ๋ง๋ ๋ ์ง ์ ํ๊ธฐ๋ ๋์์ธ ์ปค์คํฐ๋ง์ด์ง์ด ์์ ๋กญ๊ณ , ๊ธฐ๋ฅ ํ์ฅ๋ ์ฉ์ดํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ ์ง ๋ฒ์ ์ ํ, ์ฃผ๋ง ๋นํ์ฑํ, ์ค๋ ๋ ์ง ๊ฐ์กฐ ๋ฑ๋ ์ถ๊ฐํ ์ ์์ด์.
์ด ๊ธ์ด ๋์์ด ๋์ จ๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ถํ๋๋ ค์! ๐
๋ค์ ๊ธ์์๋ ์๊ฐ ์ ํ๊ธฐ(Time Picker)๋ ๋ง๋ค์ด๋ณผ๊น์?
๋ฐ์ํ