Webページを作っている3つの仕組み ― HTML・CSS・JavaScript

全力の静的サイトを作ってみた」の記事で、CSS、JavaScript、SVG、Canvas APIという言葉が出てきました。

今回はそのうちHTML、CSS、JavaScriptについての話です。普段見ているWebページは、裏側でこの3つが組み合わさって動いています。

HTML ― 文章の「意味」を決めるもの

一番の土台がHTMLです。日本語にすると「文書に目印をつける言語」。正式には「Hyper Text Markup Language(ハイパー・テキスト・マークアップ・ランゲージ)」の略です。

HTMLは文章に「意味のラベル」を貼っています。実際のコードはこんな感じです。

<h1>今日の天気</h1>
<p>今日は晴れです。洗濯物が乾きそう。</p>
<a href="tenki.html">週間予報を見る</a>

<h1>で囲んだ部分は「これは見出しです」という意味になります。<p>は「段落」、<a>は「リンク」。文章そのものに、タグという目印を添えているだけです。

このコードをブラウザで開くと、こう表示されます。

今日の天気

今日は晴れです。洗濯物が乾きそう。

週間予報を見る

見出しは大きく太字になり、リンクは青い下線つきの文字になる。これはブラウザの初期設定がそう決めているだけで、HTMLは「見出しです」「リンクです」と伝えただけです。色や大きさの指定は一切していません。

HTMLだけでもページは表示できます。文字は読めるし、リンクも押せる。ただ、それだけです。白い画面に黒い文字がずらっと並ぶ。文字の大きさも色もブラウザ任せ。

HTMLは「何が書いてあるか」だけを扱っています。「どう見せるか」は次のCSSの仕事です。

身近なところだと

メモ帳に文章を書いて保存すると、ただの文字の羅列です。HTMLはそこに「ここは見出し」「ここは段落」と仕切りを入れていくようなもの。仕切りが入ると、ブラウザは「見出しは大きく表示しよう」と判断できます。

CSS ― 「見た目」を決めるもの

日本語にすると「段階的にスタイルを指定する仕組み」。正式には「Cascading Style Sheets(カスケーディング・スタイル・シート)」の略です。HTMLが貼った「意味のラベル」に対して、見た目の指定を加えています。

  • 文字を大きくする、色を変える
  • 背景に色をつける
  • 行と行の間を広げて読みやすくする
  • 写真や文章を横に並べる
  • ボタンにマウスを乗せたとき、色がふわっと変わるようにする
  • 要素がゆっくり現れるアニメーションをつける

今読んでいるこのページも、CSSで見た目を指定しています。文字が大きめで、行間が広くて、読みやすい。それはCSSの仕事です。

CSSを全部外すと、同じ文章でもブラウザの初期設定 ― 小さい文字がぎゅうぎゅうに詰まった画面 ― になります。中身は変わっていないのに、印象がまるで違う。CSSはそれくらい見た目に影響します。

全力の静的サイト」にあった光る球体のアニメーション。あれも全部CSSだけで動いています。「3秒かけて大きくなる。3秒かけて戻る。それを繰り返す」という指定を書くだけで、プログラムなしにあの動きが出ます。

HTMLとCSSの関係

HTMLが「ここは見出しです」と意味を決める。CSSが「見出しは青い色で、大きい字で表示する」と見栄えを決める。2つで役割を分けています。

なぜ分けるのか。分けておくと、見た目だけ変えたいときにCSSだけ書き換えればいい。文章に手を入れなくていい。逆に文章を直すときも、見た目のことは気にせずHTMLだけ触ればいい。お互い独立しているから、片方だけの修正で済む場面が多いんです。

JavaScript ― 「操作への反応」を作るもの

HTMLで文章を書いて、CSSで見た目を整えた。ここまでで、きれいなページは作れます。でもそのページは「置いてあるだけ」です。何かを押しても、ページ全体を読み込み直さない限り中身は変わりません。

JavaScriptは、そのページに「反応する力」を持たせます。

  • ボタンを押したら、表示内容を切り替える
  • 入力欄に何も書かずに送信しようとしたら、「入力してください」と出す
  • スクロールしてある位置まで来たら、要素をふわっと出す
  • スライダーを動かすと、数値をリアルタイムに変える

共通しているのは「何かが起きたら、それに応じてページの一部を変える」という動きです。HTMLやCSSだけだと、こういう「もし〇〇したら△△する」という条件つきの変化は作れません。

全力の静的サイト」で、ボタンを押すと箱の色や形がパッと切り替わるデモがありました。あれがJavaScriptの仕事です。「青のボタンが押された → 青い丸にする」「緑のボタンが押された → 緑の四角にする」と、押されたものに応じて表示を変えていました。

身近なところだと

通販サイトで「カートに入れる」を押したとき、ページが丸ごと切り替わらずに「追加しました」と小さく表示が出ること。あの裏でJavaScriptが動いています。ページ全体を読み込み直さず、必要な部分だけ書き換えている。

3つの役割を並べてみる

  • HTML ― 文章の構造と意味を決める(骨組み)
  • CSS ― 見た目を決める(色、大きさ、配置、アニメーション)
  • JavaScript ― 操作に反応して、ページの一部を動的に変える

この3つが組み合わさって、普段見ているWebページはできています。3つ揃うことで「きれいで、使いやすくて、操作に反応するページ」になるんです。

まとめ

  • HTMLは文章に「見出し」「段落」「リンク」などの意味を与える
  • CSSはその文章に色・大きさ・配置などの見た目を加える
  • JavaScriptは操作に応じてページの一部を変える力を持たせる
  • 3つは役割が分かれていて、組み合わせて使う

Webページの中で「絵」を描く方法については、次の記事「Webページで絵を描く2つの方法 ― SVGとCanvas API」で書いています。