(2023/05/21)
HTMLについて、一緒に手を動かしながら簡単におさらいしましょう!
環境構築が終わっていない人は第1回資料を基に構築してください。
- Section02の追加を手元に取得します
WSL or Powershellを開いて(前回どちらでセットアップしたか思い出してください)
cd ~/2023-web
git pull
No Such file or directory とか言われたら以下を実行してください
- 2023-webリポジトリをcloneします (optional)
cd ~
git clone [email protected]:kmc-jp/2023-web.git
- section02に移動します
cd ~/section02
- サーバーを起動します
npm install
npm run dev
- ブラウザからアクセスします
自動的に開くと思います
開かなければ http://localhost:8080 にアクセス
Hello World!と表示されていればOKです!
いったんCtrl+Cで止めます
- VSCodeの起動
~/2023-web/section02をターミナルで開いている状態で
code .
とするとVSCodeで開きます
- index.htmlを探す
~/2023-web/section02/index.htmlです
- 中身を見る
<!DOCTYPE html>
<html lang="ja-JP">
<head>
<meta charset="utf-8">
<title>section 02 | 2023-web</title>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
- もう一度Webサーバーを起動
ターミナルに戻って
npm run dev
http://localhost:3000 にアクセス
今日の講習会中はちけっぱにします
- index.htmlを編集してみる
Hello World! の部分を自分の名前に変えて保存しましょう
保存すると、ブラウザ側も自動的に変更が反映されるはずです、便利~
この章では実際に↑のindex.htmlを書き換えて試してみてください
HTMLはタグで囲むことでいろいろな要素を表現します。
例えば
<P> 段落 </p>
で囲むと段落を表現します。
要素の中に要素をかくのもOKです
<div>
<P>段落</p>
</div>
ここで、<foo>
や</foo>
をタグと呼びます。
の形をしたものを開始タグ、の形をしたものを終了タグと呼びます。
開始タグと終了タグは基本的にセットで使います。
ただし、たとえば<img>
などは
<img src="https://www.kmc.gr.jp/assets/logo-dd0898d76a871e83d6bb7df9fd2a66c538fa422f4ab33698ba15ac051178cbe498ce88428bddb89f10e8a6791901b4a1e1af0589530deaf858f91cc8bf8fee25.png">
というように、開始タグしかありません。 このようなものは空要素と呼ばれます。
それぞれのタグに対しては、属性
を付けることができます。
ただしこれは必ず付けなければならないものではありません。
たとえば、id
は、要素を一意にラベル付けします。id
は重複があってはいけません。そのため、id
さえしていすればどの要素を指しているか判別できます。
class
は、要素をスタイル情報の対象とするために使用されます。class
は複数の要素に同じクラス名をつけてもよいです。
また、一つの要素に複数のクラスを付けてもOKです。
例えば
<p class="red">このテキストにスタイルが適用されます</p>
とし、CSSに
p.red { color: red; }
と書くと、<p>
のclass="red"
に対し、全て文字色は赤になります。
id
とclass
はどの要素でも頻繁に使うので覚えておきましょう。
その他、特定のTagに特定の属性があります。
例えば<a>
を使います。
<a>
は、リンクを作ります
<a href="https://kmc.gr.jp" title="KMC公式" target="_blank"> KMC公式サイト </a>
などと使います。 ここでは
href
title
target
の属性を指定しました。
href
はリンクURL、title
はマウスカーソルを乗せたときに出るテキスト、target
はリンクの開く先を指定します(新しいタブで開くかどうかなど)
このように属性は複数つけることができます。
普通、属性名="属性値"
の形で書きますが、属性値の部分が省略されていることがあります。
これは、論理属性といい、一般的に属性名と同じ属性値だけを取ることができます。
例えば、<input>
(入力欄を作る)を使うとき、
<input type="text" disabled>
と
<input type="text" disabled="disabled">
は、同じです。
要素にはブロック要素とインライン要素があります
ブロック要素は<p>
や<div>
などです
ウェブページの中でのブロックを表します
インライン要素はブロックレベル要素の中に書かれるもので、<a>
や<strong>
などです。
要素をいろいろ紹介していきます
見出しを表示するために使用します。h1は最上位、h2, h3, ...の順に見出しレベルが下がります。
見出しレベルは飛ばしてはいけません。また、h1の複数回の使用は避けるのが無難です。
一般的なウェブブラウザでは、見出し要素は大きなフォントサイズ・太字で描画されます。しかし、HTMLは文章の構造を表すためのものであり、スタイルの調整にHTMLを用いてはいけません。 スタイルは全てCSSを用いて調整します。文字サイズを大きくする目的で見出し要素を使用してはいけません。
詳しくは、CSSでお話しします
<h1>KMC</h1>
<!-- 省略 -->
<h2>KMCの活動</h2>
<!-- 省略 -->
<h2>今後の予定</h2>
<!-- 省略 -->
テキストを表示する際に使用します。
<p>カラスは黒い鳥</p>
テキストを改行する際に使用します。終了タグを記述しない点が特徴です。
<p>カラスは黒い鳥<br>黒くない鳥はカラスではない</p>
要素間にスペースを開けるために、brを使用してはいけません。スペースを調整するためには、CSSを用います。
これについても、CSSの説明時に詳しく扱います。
ハイパーリンクの作成に使用します。リンク先を指定するには、href
属性を使用します。また、リンク先を新しいタブで開くようにする場合は、target
属性を用いてtarget="_blank"
と指定します。
<a href="https://example.com" target="_blank">テストリンク</a>
ページ内リンクを貼る場合は、href
属性の値に#{飛ぶ先の要素のid名}
を指定します。
<h1>予約サイト</h1>
<p>
<a href="#register-form">予約はこちら</a>
</p>
<!-- 省略 -->
<h2 id="register-form">予約</h2>
<div>
<p>お名前</p>
<input type="text">
<p>メール</p>
<input type="email">
</div>
画像を表示するために使用します。表示する画像のパスを、src
属性を用いて記述します。
alt
属性は必須ではありませんが、特別な理由がない限り、必ず書くようにすべきです。
画像が表示できない環境や、スクリーンリーダーでALTのテキストが用いられます。
<img src="./kmc.png" alt="KMC Logo">
divタグは、複数の要素をまとめるために使用します。
<div>
<p>お名前</p>
<input type="text">
<p>メール</p>
<input type="email">
</div>
spanタグも、複数の要素をまとめるために使用します。
<span><a href="https://example.com" target="_blank">ここ</a>をクリック</span>
以下の形式でコメントアウトが可能です。
<!-- ここはコメント -->
テキストを強調します。
<em>英数字8文字以上</em>で入力してください。
重要、重大、または緊急性の高いテキストを表します。
電源ボタンを<strong>3秒間長押し</strong>することで、強制的に終了します。
順序付きのリストを表します。
ol
タグは、中に1つ以上のli
要素を含めて使用します。
<ol>
<li>東京</li>
<li>大阪</li>
<li>神奈川</li>
</ol>
箇条書き (順序なしのリスト) を表します。
ul
タグも、中に1つ以上のli
要素を含めて使用します。
<ul>
<li>リンゴ</li>
<li>ミカン</li>
<li>スイカ</li>
</ul>
リストの項目を表します。
li
タグは、上述のol
タグまたはul
タグの中に配置して使用します。
ol
タグとul
タグの中に含められるタグは、基本的にli
要素のみです。
ボタンを表します。
<button>Submit</button>
データ入力用の様々なコントロールを作成します。
作成するコントロールの種類はtype
属性で指定します。
<input type="text" name="user-name" id="user-name">
<input type="email" name="email-address" id="email-address">
<input type="password" name="user-password" id="user-password">
<input type="number" name="age" id="age">
<input type="button" value="ボタン">
<input type="checkbox" name="has-read" id="has-read">
<input type="radio" name="contact" id="contact-email">
<input type="date" name="birthday" id="birthday">
<input type="time" name="start-time" id="start-time">
<input type="file" name="profile-icon" id="profile-icon">
<input type="range" name="volume" id="volume">
<input type="color" name="text-color" id="text-color">
<input type="reset" value="リセット">
label
要素は、input
要素とともに用いられることが多く、主にinput
要素のヒット領域を広げる目的で使用されます。
input
要素とlabel
要素を関連付ける方法は、以下の2つがあります。
この方法を用いることで、テキスト部分をクリックすることでinput
要素の切り替えを行うことができます。
<label>
<input type="checkbox" name="is-kmc-member" id="is-kmc-member">
KMC部員
</label>
<input type="checkbox" name="is-kmc-member" id="is-kmc-member">
<label for="is-kmc-member">KMC部員</label>
タスクの進捗を表します。
<progress max="100" value="70"></progress>
選択式メニューを作成します。
option
要素を用いてメニューを作成します。
<select>
<option value="dog">犬</option>
<option value="cat">猫</option>
<option value="rabbit">うさぎ</option>
</select>
メニュー項目を作成します。
<textarea name="answer" id="answer" cols="30" rows="10">KMC</textarea>
複数行入力可能なテキスト入力用コントロールを作成します。
フォーム (サーバーに情報を送るパーツ) を表します。(今後、form
から送られたデータを実際に受け取って処理をする話も扱う予定です)
以下は、form
要素とinput
要素の使用方法の例です。フィールドを必須項目にするには、required
属性を使用します。また、入力値ヒントを表示するには、placeholder
属性を使用します。
<form action="">
<div>
<input type="checkbox" name="can-read-lang" id="can-read-en">
<label for="can-read-en">英語</label>
<input type="checkbox" name="can-read-lang" id="can-read-ja">
<label for="can-read-ja">日本語</label>
<input type="checkbox" name="can-read-lang" id="can-read-fr">
<label for="can-read-fr">フランス語</label>
</div>
<div>
<label for="text-color">色の選択</label>
<input type="color" name="text-color" id="text-color">
</div>
<div>
<label for="birthday">生年月日</label>
<input type="date" name="birthday" id="birthday">
</div>
<div>
<label for="start-time">開始時刻</label>
<input type="time" name="start-time" id="start-time">
</div>
<div>
<label for="user-name">氏名</label>
<input type="text" name="user-name" id="user-name" placeholder="山田太郎">
</div>
<div>
<label for="email-address">メールアドレス</label>
<input type="email" name="email-address" id="email-address">
</div>
<div>
<label for="age">年齢</label>
<input type="number" name="age" id="age">
</div>
<div>
<label for="profile-icon">プロフィールアイコン</label>
<input type="file" name="profile-icon" id="profile-icon">
</div>
<div>
<label for="user-password">パスワード</label>
<input type="password" name="user-password" id="user-password">
</div>
<div>
<input type="radio" name="contact" id="contact-email">
<label for="contact-email">メール</label>
<input type="radio" name="contact" id="contact-phone">
<label for="contact-phone">電話</label>
</div>
<div>
<input type="range" name="volume" id="volume">
</div>
<div>
<progress></progress>
</div>
<div>
<progress max="100" value="80"></progress>
</div>
<div>
<label for="address">居住地区</label>
<select name="address" id="address">
<option value="address-1">北海道</option>
<option value="address-2">東北</option>
<option value="address-3">関東</option>
<option value="address-4">中部</option>
<option value="address-5">関西</option>
<option value="address-6">中国</option>
<option value="address-7">四国</option>
<option value="address-7">九州・沖縄</option>
</select>
</div>
<div>
<label for="others">備考</label>
<textarea name="others" id="others" cols="30" rows="10" placeholder="自由に記述してください。"></textarea>
</div>
<div>
<input type="reset" value="リセット">
<input type="button" value="送信">
</div>
</form>
dl
タグ、dt
タグ、dd
タグを用いて、項目の説明や定義を記述することができます。
dl
タグの中にdt
タグとdd
タグを配置します。
dt
タグは説明/定義の対象となる用語を表します。
dd
タグはdt
タグで指定した用語の説明/定義を表します。
<dl>
<dt>アメリカ</dt>
<dd>アメリカ合衆国</dd>
<dt>イギリス</dt>
<dd>グレートブリテン及び北アイルランド連合王国</dd>
<dt>日本</dt>
<dd>日本国</dd>
</dl>
表 (テーブル) を作成します。
表のヘッダーを表します。
表の行を表します。
表のセルを定義します。
表の列見出しを表します。
表の本体部分を表します。
表の列フッターを表します。
<table>
<thead>
<tr>
<th>市町村</th>
<th>人口 (万人)</th>
</tr>
</thead>
<tbody>
<tr>
<th>大阪市</th>
<td>275</td>
</tr>
<tr>
<th>横浜市</th>
<td>372</td>
</tr>
<tr>
<th>名古屋市</th>
<td>233</td>
</tr>
</tbody>
<tfoot>
<tr>
<th>計</th>
<td>880</td>
</tr>
</tfoot>
</table>