ひとつのページに3つの仕事
ある喫茶店のランチメニューのページには、料理の一覧と、料理をさがす入力欄と、暗い配色に切りかえるボタンがあります。ページに何があるかを決める人、見た目を決める人、ボタンを押したときの動きを決める人が必要です。Web では、それぞれの仕事に専用の言語があります。
このレッスンが終わると
メモ
HTML、CSS、JavaScript がそれぞれ Web ページで何をするかを言えて、短いスクリプトでページを確かめることができる。
キーワード
- HTML:ページに何があるか(見出し、リスト、リンク、フォーム)を書く言語。
- 要素:ページの一部分。
h2やliのようなタグで書く。 - CSS:要素の見た目を書く言語。
- セレクター:CSS のルールのうち、どの要素に当てはまるかを示す部分。
- 宣言:ルールの中の1つの設定。たとえば
margin: 1rem。 - ボックスモデル:どの要素も、内容、パディング、ボーダー、マージンからなる箱である。
- DOM:ブラウザーが持っているページの姿。JavaScript が読んだり変えたりできる。
- イベント:クリックのように、ページの上で起きること。
はじめに:もう知っていること
メモ
頭の中で答えてください。1. Web ページから別のページへ移るとき、何をクリックしますか。2. ページの文字について、色のように変えられることを2つあげてください。3. ページのボタンを押すと、どうなると思いますか。答え: リンク。大きさ、フォント、色。何かが変わる、またはメッセージが出る。
始める前に
メモ
レッスンの上のバーにある ラボを開始 を押し、動いていると表示されるまで待ちます。コンテナはひとつ、jupyter だけで、ターミナルからは docker exec jupyter でその中の Python を使います。これはコンテナの中でコマンドをひとつ実行する命令です。リンクは2つあります。1つめの JupyterLab は編集用の画面で、ポート 8888 です。2つめの Preview(プレビュー)はページそのもので、ポート 8000 です。下の 実行 ボタンは、それぞれのコマンドをラボのターミナルに、同じセッションの中で順番に入力します。様子を見たいときや自分で入力したいときは、バーの ターミナルを開く(新しいタブ) を押します。
ページは、いくつかの単純なファイルでできている
ls site は、ページの3つのファイルを一覧にします。ページにあるものを書いた index.html、見た目の style.css、動きの app.js です。2つめのコマンドは大きさを表示します。1373、1125、1093 バイトで、合わせて 3591 バイトです。これでページ1つ分です。Preview で見て、JupyterLab でファイルを読んでみましょう。
docker exec jupyter ls siteここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
docker exec jupyter python3 steps/sizes.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
HTML はページに構造を与える
スクリプトは、ブラウザーが読みはじめるのと同じように、index.html をタグごとに読みます。タグは全部で36個です。a と li は5回ずつ、section は3回出てきます。2つめのスクリプトは見出しだけを表示します。これがページのアウトラインで、h1 の Lunch menu がひとつと、その下に h2 が3つあります。見出しは文字を大きくするためのものではありません。ページが何について書かれているかを示すもので、画面読み上げソフトが見出しからほかの見出しへ移動するときにも使われます。
docker exec jupyter python3 steps/tags.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
docker exec jupyter python3 steps/outline.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
確かめよう
ヒント
ページには h2 の見出しがいくつあり、h1 はどれでしょう。答え: 3つで、h1 は Lunch menu です。
CSS のルールが見た目を決め、ボックスモデルが大きさを決める
CSS のルールは、セレクターと、波かっこの中の宣言でできています。スクリプトは17個のルールと39個の宣言を見つけ、いちばん多く使われている設定は padding で6回です。どの要素も箱で、内容があり、その内側にパディング、次にボーダー、外側にマージンがあります。.dish のルールは padding、margin-bottom、border、border-radius を決めているので、料理ひとつひとつが、まわりにすき間のある枠つきのカードになります。ひとつの要素に2つのルールが当たるときは、より具体的なセレクターが勝ち、同じ強さなら後に書いたほうが勝ちます。これがカスケードです。body.dark は body より具体的なので、暗いページでは色が入れかわります。style.css の値をひとつ変えて保存し、Preview を再読み込みして、スクリプトをもう一度実行してみましょう。
docker exec jupyter python3 steps/css.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
JavaScript は DOM を変えてイベントに応える
スクリプトは app.js を読んで、何を定義し、何を待っているかを調べます。関数は filterDishes と toggleTheme の2つ、イベントを待つものは3つで、検索欄の submit と input、テーマのボタンの click です。これらのイベントが起きると、関数が DOM、つまりブラウザーが持っているページを変えます。Preview で試してみましょう。欄に tom と入力すると、その文字を含む2つの料理だけに一覧が絞られます。そのあと Dark theme を押します。ライブラリもネットワークの呼び出しもなく、ブラウザーがもともと持っているものだけを使っています。
docker exec jupyter python3 steps/js.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ページを確かめることも、作る仕事のうち
見た目が正しくても、壊れているページはあります。1つめのスクリプトは、すべてのリンクと、それがどこへ行くかを一覧にします。3つのリンクはページの中で、どれも行き先が見つかります。1つはここにあるファイル、もう1つは別のサイトへのリンクです。2つめは、ブラウザーと同じように Preview のサーバーにページを求め、ステータス 200、タイトル Lunch menu、そして style.css が text/css で返ることを表示します。ステータスが 404 なら、ページが求めているファイルがないという意味です。
docker exec jupyter python3 steps/links.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
docker exec jupyter python3 steps/serve.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある思い込み
注意
入力するとすぐに Preview が変わると思っている人は多いです。そうはなりません。Preview が見せるのは保存したファイルなので、エディターで保存してから Preview を再読み込みします。ページが変わらないときは、両方を確かめましょう。ブラウザーが古いファイルをおぼえていることもあるので、強制再読み込みが役に立つときもあります。
ノートブックでも同じ確認ができる
バーから JupyterLab を開き、start.ipynb をダブルクリックします。セルは同じファイルを Python で読み、タグを数え、CSS のルールを一覧にし、Preview にページを求めます。セルをクリックして Shift と Enter を押すと実行されます。最後のセルは、あなた自身の変更のための場所です。style.css を編集して保存し、ルールをもう一度数えてみましょう。
最後の確認
ヒント
見返さずに答えてください。1. ページに何があるかを書く言語、見た目を書く言語、動きを書く言語はそれぞれどれですか。2. ボックスモデルの4つの層を、内側から順にあげてください。3. カスケードは何を決めますか。4. エディターで入力しただけでは、Preview が変わらないのはなぜですか。答え: HTML、CSS、JavaScript。内容、パディング、ボーダー、マージン。ひとつの要素に2つのルールが当たったとき、どちらが勝つか。Preview は保存したファイルを見せるので、保存して再読み込みする必要がある。
先生へ
ヒント
このレッスンは、ラボで進めるレッスンの小さな例です。手順と実行ボタンがレッスンで、ラボは生徒ひとりひとりのコピーです。ラボはサービスがひとつで、小さなページをその場でプレビューできる JupyterLab です。自動採点はありません。生徒は site にある3つのファイルを自分で変えたものを JupyterLab からダウンロードして、変えた点とその効果についての一文といっしょに提出します。学習のポイント:1. HTML は構造、CSS はスタイル、JavaScript は動き。2. どの要素も箱で、カスケードがどのルールが勝つかを決める。3. ページは見るだけでなく、確かめる。よくある思い込み:ファイルを保存する前に Preview が変わると思う。用意するもの:ラボとブラウザー。ヒント:再読み込みの前に、変更でどうなるかを予想させてください。ページとスクリプトは決まった文章から作られるので、どのコピーでも同じ数になります。ご自分のモジュールにコピーして変更するか、レッスンビルダーのラボメニューから一から作ってください。