以下がHTML、JavaScript、CSSのコードです。ガントチャートはHTMLのtableを使って簡単に実装できます。CSSで見た目を整え、JavaScriptでタスクを追加・削除する機能を実装しています。
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>1ヶ月分のタスク管理アプリ</title>
<style>
table {
border-collapse: collapse;
width: 100%;
}
table, th, td {
border: 1px solid black;
}
th {
height: 50px;
background-color: #0077B6;
color: white;
text-align: center;
font-size: 24px;
}
td {
height: 100px;
text-align: center;
font-size: 16px;
}
.task {
background-color: #6EB5FF;
cursor: pointer;
}
.task:hover {
background-color: #357EC7;
}
.task.done {
background-color: #0077B6;
font-style: italic;
color: white;
}
input[type="text"] {
width: 100%;
font-size: 16px;
padding: 5px;
box-sizing: border-box;
border: 2px solid #ccc;
border-radius: 4px;
margin-top: 10px;
margin-bottom: 10px;
}
input[type="submit"] {
background-color: #0077B6;
border: none;
color: white;
padding: 10px 20px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
border-radius: 4px;
cursor: pointer;
margin-top: 10px;
}
</style>
</head>
<body>
<h1>1ヶ月分のタスク管理アプリ</h1>
<table>
<thead>
<tr>
<th>日付</th>
<th>タスク</th>
</tr>
</thead>
<tbody>
<tr>
<td>1日</td>
<td id="task-1"></td>
</tr>
<tr>
<td>2日</td>
<td id="task-2"></td>
</tr>
<tr>
<td>3日</td>
<td id="task-3"></td>
</tr>
<!-- 省略 -->
<tr>
<td>30日</td>
<td id="task-30"></td>
</tr>
</tbody>
</table>
<h2>タスクを追加する</h2>
<form id="task-form">
<input type="text" id="task-input" placeholder="タスクを入力してください">
<input type="submit" value="追加する">
</form>
<script>
// タスクを追加する関数
function addTask(task) {
// まず該当する日付のtd要素を取得し、その中に新しくdiv要素を追加する
let td = document.getElementById(`task-${task.date}`);
let div = document.createElement("div");
div.innerHTML = task.name;
div.className = "task";
if (task.done) {
div.classList.add("done");
}
td.appendChild(div);
// クリックしたらタスクが完了済みになるようにする
div.addEventListener("click", function() {
div.classList.add("done");
task.done = true;
});
}
// タスクを削除する関数
function deleteTask(task) {
let td = document.getElementById(`task-${task.date}`);
let divs = td.getElementsByClassName("task");
for (let i = 0; i < divs.length; i++) {
if (divs[i].innerHTML === task.name) {
td.removeChild(divs[i]);
break;
}
}
}
// 1ヶ月分のタスクを初期化する
let tasks = [];
for (let i = 1; i <= 30; i++) {
tasks.push({date: i, name: "", done: false});
}
// 初期化したタスクを表示する
tasks.forEach(function(task) {
addTask(task);
});
// タスク追加フォームの処理
let form = document.getElementById("task-form");
let input = document.getElementById("task-input");
form.addEventListener("submit", function(event) {
event.preventDefault(); // ページ遷移を防止
let taskName = input.value;
if (taskName === "") {
return;
}
let task = {date: new Date().getDate(), name: taskName, done: false};
addTask(task);
tasks.push(task);
input.value = "";
});
</script>
</body>
</html>
```
ジョークとして、タスクリストに「トイレットペーパーを買う」というタスクを入れておくと面白いかもしれません。