こんにちは、Reiです!
前回は、HTMLを使って
TODOアプリの 骨組み(構造) を作りました。
今回はその続きとして、
画面の見た目を整えていきます。
CSSで見た目を整える
ここからは、HTMLに対して
CSS(シーエスエス)を適用していきます。
CSSは、色・余白・配置・大きさ などを指定して、
ページの見た目をデザインするための言語です。
HTMLが「骨組み」だとすると、
CSSは「見た目(デザイン)」を担当する役割になります。
また、CSSはHTMLとは別のファイルに分けて管理することができます。
そのため今回は、
- デザインを書く style.css
- ページの構造を書く index.html
というように、役割ごとにファイルを分けて 進めていきます!
このように分けておくことで、
・見た目だけを後から調整しやすくなる
・コードが整理されて読みやすくなる
といったメリットがあります。
TODOアプリの見た目を順番に整えていくまえに、
まずはCSSファイルを読み込む準備から始めましょう!
準備:CSSファイルを読み込む設定
まずは、CSSを書くためのファイルを用意します。
先ほど作成した index.html と同じ場所に、
style.css という新しいファイルを作成してください。
構成は次のようになります。
プロジェクトフォルダ(ルート)
├ index.html(ルート直下)style.css└ (ルート直下)
次に、このCSSファイルを
HTMLから読み込む設定を行います。
<head> タグの中に、次の1行を追加してください。
【編集ファイル:index.html】
<link rel="stylesheet" href="style.css" />
この設定を書くことで、
「このページのデザインは style.css に書かれています」ということをブラウザに伝えることができます!
1. 全体の基本設定
まずは、ページ全体の文字の見た目を整えます。
【編集ファイル:style.css】
body {
color: #445566;
font-family: sans-serif;
}
それぞれの指定には、次のような役割があります。
- body
ページ全体にスタイルを適用したいときは、このようにHTMLタグを指定して設定します。
body はページ全体に影響し、div や p など他のタグにも同様に指定できます。
- color
文字の色を指定します。デフォルトは黒(#000)です。
少しグレーに近い色に変更しておくことで 目が疲れにくい表示 にできます。
- font-family
文字のフォントを指定するプロパティです。sans-serifを指定すると、ブラウザ標準の 読みやすいゴシック体 が使われます。
ページ全体のフォントを最初に決めておくと、
各パーツごとに設定する必要がなくなり、統一感のあるデザインにすることができます!
2. 入力エリアの装飾
次に、TODOを入力するエリアを整えます。
入力欄とボタンが並ぶ部分を、
少し目立つエリアとしてデザインしていきます。
【編集ファイル:style.css】
input {
border: 1px solid #d1dae3;
border-radius: 4px;
padding: 6px 12px;
}
.input-area {
background-color: #e3f2fd;
width: 420px;
padding: 12px;
margin: 10px;
border-radius: 10px;
}
それぞれの指定には役割がありますが、よく使う指定に絞って確認していきます。
- border-radius
角の丸みを指定します。
少し丸みをつけることで、柔らかい印象のデザイン にするできます。
- padding
内側の余白です。
文字と枠線の間に余白を作ることで、読みやすさやクリックのしやすさ が向上します。
- background-color
背景色を指定します。
操作するエリアに色をつけることで、「ここで操作する場所」だと分かりやすくすることができます。
入力欄と周辺の余白を整えることで、
ユーザーが「どこに何を入力すべきか」を直感的に判断できるレイアウトを構築できます。
この .input-area を適用するため、
HTML側にもクラスを追加しておきます。
【編集ファイル:index.html】
<div class="input-area">
<input placeholder="TODOを入力">
<button>追加</button>
</div>
このように <div> にクラス名を付けることで、
その中の要素を ひとつのグループとして装飾できるようになります。
3. ボタンのデザインと動き
次に、ボタンの見た目を整えていきます。
【編集ファイル:style.css】
button {
background-color: #64b5f6;
color: #fff;
border-radius: 6px;
border: none;
padding: 5px 14px;
margin: 0 4px;
transition: 0.3s;
}
button:hover {
background-color: #2196f3;
cursor: pointer;
}
ここでも、よく使う指定に絞って確認していきます。
- transition
色の変化にかかる時間を指定します。
これにより、色がパッと変わるのではなく滑らかに変化するアニメーションをつけられます。
- :hover
マウスカーソルが乗ったときの状態です。
少し色を濃くしたり、薄くすることで、ボタンが反応していることをユーザーに伝えられます。
- cursor: pointer
マウスカーソルを指の形に変更します。
クリックできる場所だと分かりやすくなり、操作ミスを防ぐ効果があります。
「通常時のデザイン」と「マウスを乗せた時の動き」をセットで設定することで、
ユーザーは「今、自分はこのボタンを操作しようとしている」という感覚を正しく得ることができます。
4. 未完了・完了エリアの装飾
次に、TODOが並ぶエリアを整えます。
未完了と完了の2つのエリアを
大きな箱として分かりやすく表示します。
【編集ファイル:style.css】
.incomplete-area {
width: 420px;
min-height: 240px;
padding: 12px;
margin: 10px;
border: 3px solid #bbdefb;
border-radius: 12px;
}
.complete-area {
width: 420px;
min-height: 240px;
padding: 12px;
margin: 10px;
border: 3px solid #bbdefb;
border-radius: 12px;
background-color: #f0f4f8;
}
.title {
margin-top: 0;
text-align: center;
font-weight: bold;
color: #1e88e5;
}
よく使う指定に絞って確認しましょう。
- min-height
最小の高さを指定します。
TODOがまだ無い状態でも一定のスペースを確保することができます。
- border
枠線を指定するプロパティです。
枠線をつけることで、エリアの区切りが視覚的に分かりやすくなります。
- text-align
文字の揃え方を指定するプロパティです。centerを指定することで、タイトルが中央に配置されます。
- font-weight
文字の太さを指定します。boldを指定すると、タイトルが太字で表示されます。
エリアごとに背景色や枠線を変えておくと、
- 未完了のTODO
- 完了したTODO
を 見た目だけで区別しやすくなります。
また、タイトルを中央に配置し、文字を少し強調することで、
「未完了」と「完了」のエリアが視覚的に分かりやすくなります。
エリアごとにスタイルを適用するため、
HTML側にもクラス名を追加しておきます。
【編集ファイル:index.html】
<div class="incomplete-area">
<p class="title">未完了のTODO</p>
<ul>
<li>
<p>TODOです</p>
<button>完了</button>
<button>削除</button>
</li>
</ul>
</div>
<div class="complete-area">
<p class="title">完了のTODO</p>
<ul>
<li>
<p>完了したTODO</p>
</li>
</ul>
</div>
このようにエリアごとにクラス名を付けておくと、
CSSで未完了と完了のエリアを 別々のデザインに調整できるようになります。
5. リスト内部のレイアウト
最後に、TODOの1行を整えます。
テキストとボタンを横一列に並べるレイアウトを作ります。
【編集ファイル:style.css】
.list-row {
display: flex;
align-items: center;
padding-bottom: 8px;
border-bottom: 1px dashed #d1dae3;
margin-bottom: 8px;
}
.todo-item {
margin: 0 10px 0 0;
flex-grow: 1;
}
よく使う指定に絞って確認しましょう!
- display: flex
要素を横並びにするためのレイアウトです。
- align-items: center
高さの違う要素を縦方向の中央に揃えることができます。
- flex-grow: 1
残りのスペースを使う指定です。
これにより、
TODOの文章が広がり、
ボタンが右端に配置されます。
このようにレイアウトのルールを決めておくと、
JavaScriptでTODOが追加されたときも
自動的に整った表示になります。
TODOの1行(<li>)とその中のテキスト(<p>)に、横並び用のクラス名を追加します。
【編集ファイル:index.html】
<div class="incomplete-area">
<p class="title">未完了のTODO</p>
<ul>
<li class="list-row">
<p class="todo-item">TODOです</p>
<button>完了</button>
<button>削除</button>
</li>
</ul>
</div>
<div class="complete-area">
<p class="title">完了のTODO</p>
<ul>
<li class="list-row">
<p class="todo-item">完了したTODO</p>
</li>
</ul>
</div>
リストの項目にクラス名を指定することで、TODOが増えた際もすべての行に対して一括で「横並び」のルールを適用させることができます。
最終的なファイルの状態
最終的に、次のような形になっていればOKです。
- index.html
ページの構造と、CSSの読み込み設定 - style.css
各パーツの見た目を定義するコード
このように、
- HTML → 構造
- CSS → 見た目
という形で役割を分けておくと、
あとから修正もしやすくなります。
【完成ファイル:index.html】
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>TODOアプリ(JS)</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="input-area">
<input placeholder="TODOを入力">
<button>追加</button>
</div>
<div class="incomplete-area">
<p class="title">未完了のTODO</p>
<ul>
<li class="list-row">
<p class="todo-item">TODOです</p>
<button>完了</button>
<button>削除</button>
</li>
</ul>
</div>
<div class="complete-area">
<p class="title">完了のTODO</p>
<ul>
<li class="list-row">
<p class="todo-item">完了したTODO</p>
</li>
</ul>
</div>
</body>
</html>
【完成ファイル:style.css】
body {
color: #445566;
font-family: sans-serif;
}
input {
border: 1px solid #d1dae3;
border-radius: 4px;
padding: 6px 12px;
}
.input-area {
background-color: #e3f2fd;
width: 420px;
padding: 12px;
margin: 10px;
border-radius: 10px;
}
button {
background-color: #64b5f6;
color: #fff;
border-radius: 6px;
border: none;
padding: 5px 14px;
margin: 0 4px;
transition: 0.3s;
}
button:hover {
background-color: #2196f3;
cursor: pointer;
}
.incomplete-area {
width: 420px;
min-height: 240px;
padding: 12px;
margin: 10px;
border: 3px solid #bbdefb;
border-radius: 12px;
}
.complete-area {
width: 420px;
min-height: 240px;
padding: 12px;
margin: 10px;
border: 3px solid #bbdefb;
border-radius: 12px;
background-color: #f0f4f8;
}
.title {
margin-top: 0;
text-align: center;
font-weight: bold;
color: #1e88e5;
}
.list-row {
display: flex;
align-items: center;
padding-bottom: 8px;
border-bottom: 1px dashed #d1dae3;
margin-bottom: 8px;
}
.todo-item {
margin: 0 10px 0 0;
flex-grow: 1;
}
今回のまとめ
今回は、CSSを使って
TODOアプリの 見た目(レイアウト) を整えました。
\\ 今回のポイント //
・ link タグで外部CSSファイルを読み込む
・ div ごとに背景色や枠線を設定してエリアを分ける
・ display: flex を使って要素をきれいに横並びにする
・ hover 設定で操作に対する視覚的な反応を作る
見た目が整ったことで、
「どのエリアに」「どの要素を追加するのか」
が分かりやすくなりました。
次はいよいよ、
JavaScriptを使ってアプリに動きを付けていきます。
TODOを追加したり削除したりできる
本格的な動きを作っていきましょう!


コメント