Transcript body
情報処理II wwwによる情報発信とサービス提供I 第4回 2013年5月1日 大塚 智宏 Internet Explorerの脆弱性について MSが4/27に 「深刻な脆弱性が見つかった」 と発表 修正プログラムはまだリリースされていないが,一時的な 回避策がいくつか公開されている アメリカ政府が 「IE使うな」 と警告する事態に 日吉ITCのWindowsではまだ有効な対策がなされて いないため,IEは使わないでください Windows XPは4/8でサポート終了のため,今後も 修正プログラムはリリースされません 自宅等でまだWindows XPを使っている場合は要注意 こういうインターネットやセキュリティ関連の時事問題 にもぜひ関心を持ってください 本日の予定 HTMLの基礎(2) 前回の復習 HTMLマークアップの基礎 基本的なHTML要素(2) HTML文書のメタ情報の指定 HTMLの文法チェック 第3回課題(再掲) 初めて出席する人へ 講義資料 keio.jp 「授業支援」 で配布中 以下のページにも置いてある 必要なアカウント ITCアカウント パソコン室での実習 keio.jpのアカウント http://user.keio.ac.jp/~aa202427/josho/ 講義資料のダウンロード,課題の提出 私の連絡先 (質問等はこちらへ) [email protected] 前回の復習 HTML文書の例 前回紹介した要素を使ったHTML文書の例 http://user.keio.ac.jp/~aa202427/1-04/ex.html <html> <head> <title>この講義について</title> </head> <body> <h1>講義資料の情報</h1> <p> 講義資料は<a href="http://user.keio.ac.jp/~aa202427/josho/">この ページ</a>にあります。以下はこの講義の参考書のリストです。 </p> <ul> <li>「よくわかるHTML5+CSS3の教科書」</li> <li>「Web標準の教科書―XHTMLとCSSでつくる“正しい”Webサイト」</li> <li>「CJKV日中韓越情報処理」</li> </ul> </body> </html> 要素とタグ HTMLは,テキストにタグを埋め込んだ形の文書 タグには 「開始タグ」 「終了タグ」 がある 開始タグから終了タグまでの部分を 「要素」 と呼ぶ 属性(必要な場合) 内容 <a href="http://www.keio.ac.jp/">慶應義塾</a> 開始タグ 終了タグ a要素 p要素 <p>これはテストです。 <a href="http://www.keio.ac.jp/"> 慶應義塾</a>へのリンクを作ってみました。 </p> a要素 HTML文書の骨組み HTML文書の基本構造 文書全体は,ただ1つの html要素によって構成される html要素は,head要素と body要素を1つずつ含む head要素は文書の表紙(メタ情報)に相当 body要素は本文(中身)に相当 <html> <head> (タイトル等,表紙を構成する要素) head要素 </head> html要素 <body> (見出し・段落等,本文を構成する要素) body要素 </body> </html> HTML文書の木構造 要素同士は入れ子になっており,全体として1つの 「木」 を形成する html要素が head,body要素を含む (内包する) 入れ子関係が崩れることがあってはならない <html> <head> <title>...</title> </head> <body> <p>...</p> ... </body> </html> html 子要素 head 親要素 title body p body要素に含まれる要素の分類 ブロックレベル要素 文書の骨格を形成する 基本構成要素のグループ 前回紹介した要素 h1~h6,p,ul,ol,li ブロックレベル インライン要素 単語やフレーズに意味を 与えるための要素グループ 前回紹介した要素 インライン a <body> <h1> 見出し <p> 段落 aaaaaaaaaaaaaaaaaaaaa aaaaaa<a>aaa</a>aaaa aaaaaaaaaaaaaaaaaaaaa aaa<em>aaaa</em>aaa aaaaaaaaaaaaaaaaaaaaa <p> 段落 aaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaa a<strong>aaaa</strong> aaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaa 要素の入れ子関係 入れ子関係の基本ルール ブロックレベル要素は,インライン要素には入れられない ブロックレベル要素同士の入れ子は要素によって可否が異なる インライン要素やテキストは,どちらにも入れられる body要素に直接入れられるのはブロックレベル要素のみ OK! ブロックレベル インライン NG! インライン ブロックレベル 前回紹介した要素のまとめ html,head,body,title h1,h2,h3,h4,h5,h6 順序なしリスト (箇条書き) ol,li 段落 ul,li 見出し (数字は見出しのレベルで,h1が最上位) p 文書の骨組みを形成 (いずれも必須) 順序付きリスト (箇条書き) a ハイパーリンク (href属性でリンク先のURIを指定) HTMLマークアップの基礎 HTMLのマークアップを行う上で HTMLの作成段階では,ブラウザ上でどのように表示・ レイアウトされるかは重要ではない タグ付けを施した文書の各部分に 「どのような構造や意味 を持たせるか」 が重要 どのように表示・レイアウトされるかに関しては,すべてスタ イルシート(CSS)で指定する これを踏まえ,マークアップを行う上で注意すべき点, 間違いやすい点について解説する html,head,body,title要素 どんなHTML文書でもこれらは必須 2つ以上あってもいけない 入れ子関係にも注意 <html> <head> <title>タイトル</title> </head> <body> <p> これはサンプルです。 </p> </body> </html> html head title body 終了タグ 終了タグ </要素名> を必ず入れるようにする この講義で扱っているXHTML形式では,文法上必須 HTML形式の場合は必須でないものもあるが,むやみに省略する のは好ましくない ブラウザによっては,バグ等により正常に処理できない場合がある 空要素 (後で説明) の場合は例外 <body> <h1> ごあいさつ <p> こんにちは。 </body> </h1>の省略 (間違い) <ul> <li>東京 <li>神奈川 <li>埼玉 </ul> </li>の省略 (XHTML形式では 文法違反) body直下のインライン要素 典型的な間違い ここで言うインライン要素には,素のテキストも含む 以下のような場合,p要素の中に入れて 「段落」 にする 他のブロックレベル要素を使う手もあるが,現時点では p でよい <body> こんにちは。 </body> <body> <p> こんにちは。 </p> </body> <body> <a href="…"> 慶應へのリンク </a> </body> <body> <p> <a href="…"> 慶應へのリンク </a> </p> </body> インライン要素内のブロックレベル要素 典型的な間違い 特に見出し要素 (h1~h6) は,ブロックレベル要素である ことを忘れやすいので注意 em要素(インライン要素)については後で解説 <em> <h1> HTML5入門 </h1> </em> <h1> <em> HTML5入門 </em> </h1> 見出しのマークアップにおける間違いやすい例 ブロックレベル要素同士の入れ子 要素ごとに可能かどうかが異なる p や h1~h6 等の 「文章の基本構成ブロック」 には,他の ブロックレベル要素は入れられない,というのが原則 ul,ol要素には li要素しか入れられない li要素には,他のブロックレベル要素を入れられる リストを入れ子にする場合など (次ページ参照) <h1> ごあいさつ <p> こんにちは。 </p> </h1> <h1>ごあいさつ</h1> <p> こんにちは。 </p> <ul> <h1>本日の予定</h1> <li>HTMLの基礎(2)</li> <li>URLとURI</li> </ul> <h1>本日の予定</h1> <ul> <li>HTMLの基礎(2)</li> <li>URLとURI</li> </ul> リストの入れ子 li要素内に別のul要素やol要素を入れればよい ul や ol に直接入れられるのは li要素のみ <ul> <li>MacBook <ul> <li>MacBook</li> <li>MacBook Pro</li> <li>MacBook Air</li> </ul> </li> <li>iPod <ul> <li>iPod shuffle</li> <li>iPod nano</li> <li>iPod classic</li> <li>iPod touch</li> </ul> </li> </ul> ブラウザでの表示例 h1~h6要素の使い方(1) 見出しのレベルに応じて使い分ける 最初は h1 を使い,見出しのレベルが下がったら h2,… のように順番に使う 以下のような用法は好ましくない h1 がないのにいきなり h2 を使う (h1を省略するのはNG) h1 の次に h3 が来る (見出しレベルが飛ぶのはNG) <h2>タイトル</h2> <h4>第1章</h4> <h1>第1章</h1> <h2>第2章</h2> <h3>第3章</h3> <h4>第4章</h4> <h2>で始まっている。 <h2>の次のレベルが <h3>ではなく<h4>。 本来同じレベルで あるべき章立てが, 異なったレベルの 見出しタグで記述 されてしまっている。 <h1>タイトル</h1> <h2>第1章</h2> <h3>1.1.</h3> <h3>1.2.</h3> <h2>第2章</h2> <h3>2.1.</h3> <h3>2.2.</h3> <h2>第3章</h2> <h3>3.1.</h3> <h3>3.2.</h3> h1~h6要素の使い方(2) 文字を大きくするための要素ではない 「見出し」 を作るための要素 長い文章などを入れるのは本来おかしい 以下の例のような場合,h2要素の代わりにp要素を使うべき 文字の大きさはCSSで調整すればよい <h1>つぶやき</h1> <h2> こんにちは。今日はいい天気ですね。 明日もいい天気だといいですね。 </h2> p要素の使い方 逆に,p要素を 「見出し」 に使うのも好ましくない 「段落」 を表す要素なので,基本的には 「文章」 を入れる のが正しい使い方 ただし,HTML 4.01では他に適当な要素がないためにp要素を 使わざるを得ない場合がよくある HTML5では,そのような場合に代替となるようなブロックレベル 要素がいくつか追加されている <p>本日の予定</p> <h1>本日の予定</h1> その他の好ましくない事例 p要素の正しくない使い方 内容が空の段落 <p></p> で段落間の間隔を調整 CSSを使えばいくらでも調整可能 <p>こんにちは。今日はいい天気ですね。</p> <p></p> <p>え?雨降ってますけど... </p> ul要素やol要素を字下げ目的で使う 「箇条書き」 以外の用途に使うのは正しくない <,>,& 等の記号について これらを表示したい場合,「文字実体参照」 を使う 詳しくは次回説明する とりあえず,以下のように変換しておくこと < ⇒ < > ⇒ > & ⇒ & " (ダブルクォーテーション) ⇒ " 基本的なHTML要素(2) dl要素 (Description List) 「記述リスト」 を構成するブロックレベル要素 1つのdl要素内に,「名前」 を表すdt要素と,「値」 を表す dd要素を複数組入れられる dl要素に入れられるのは,dt と dd のみ dtに入れられる要素はインライン要素のみ ddにはブロックレベル要素も入れられる <dl> <dt>HTML</dt> <dd>Webページを記述するための言語</dd> <dt>要素</dt> <dd>HTML文書の構成単位</dd> <dt>タグ</dt> <dd>要素の開始と終了を示す印</dd> </dl> ブラウザでの表示例 dl要素の使い方 「用語とその説明」 「Q&A」 等,いろいろ使い道がある サイトの更新履歴 <dl> <dt>2014年4月24日</dt> <dd>第3回の資料をアップロードしました。</dd> <dt>2014年5月1日</dt> <dd>第4回の資料をアップロードしました。</dd> </dl> 対談などでの発言内容 <dl> <dt>Aさん</dt> <dd>今日はいい天気ですね。</dd> <dt>Bさん</dt> <dd>ええ,そうですね。</dd> </dl> pre要素 (Preformatted Text) 「フォーマット済みテキスト」 を表すブロックレベル要素 改行やスペースなどがそのまま表示に反映される プログラムのソースコードを表示したい場合などに利用可能 ただし,HTMLタグは解釈されてしまうので,<,& などは文字実体 参照を使う必要がある インデントだけのために使うのは正しい用法とは言えない 一部を除くインライン要素のみ入れられる img(後述)等,入れられないインライン要素がある <pre> <p> 改行やスペースをそのまま表示 </p> </pre> <p> 改行やスペースをそのまま表示 </p> 表示例 em要素 (Emphasis),strong要素 それぞれ 「強調」 「重要性」 を表すインライン要素 似ているが,em要素は文章の意味が変わるのに対し, strong要素は文章の意味には影響しない とは言え,細かいニュアンスは言語に依存する 標準的なブラウザでは em は斜体,strong は太字になる CSSを使えばこれらを好きなようにカスタマイズできる <p> 私が好きな<em>ブラウザ</em>はSafariとFirefoxだが, いま大事なのはそんなことではない。有効な対策がされるまでは <strong>Internet Explorerを使わないようにする</strong> ことが何よりも大事だ。 </p> br要素 (Break) 「改行」 を表すインライン要素 終了タグを持たない 「空要素」 (開始タグのみで1つの要素) XHTML形式の場合,空要素は <要素名 /> のように表記する 本当に必要な場所以外では使わないこと レイアウト目的で使うのはNG 複数の <br /> を連続させるのもNG <p> ちょっと長い文章を書こうと思ったのだ<br /> が、とても長い文章になってしまった。適<br /> 当に改行を入れた方が、カッコイイ感じ<br /> になるんじゃないかと思うが、どうかな? </p> これだと、ブラウザの横幅が異なる環境では変なところで 改行されてしまう br要素は乱用禁止 レイアウト目的で使ってはいけない 改行位置は,画面サイズやブラウザの横幅の影響を受ける 行間隔等の調整のために使うのは好ましくない むやみにbr要素を挿入すると表示が崩れるので注意 <br /> で空く間隔はブラウザによって違う 行間はCSSで調整するべき (より細かい制御が可能) もしその位置が 「段落の区切り」 であるならば,br要素を使わずに p要素を2つにする (段落を分ける) のが適当 意味的に改行することが適当である場合に限り使う br要素の使用例 (address要素は 「連絡先情報」 を表す) <address> 〒223-8521<br /> 神奈川県横浜市港北区日吉4-1-1<br /> 慶應義塾大学日吉キャンパス </address> 空白文字について HTMLでは,連続する 「空白文字」(スペース,改行,タブ等) は 原則としてすべて 「1文字」 とみなされる 行頭などに空白をたくさん入れてもインデントにはならない だからと言って全角の空白文字を使うのはNG (CSSを使うこと) ただし,「開始タグの直後」 および 「終了タグの直前」 の改行は 無視される 以下はどちらもまったく同じ 必要に応じて,HTMLファイルを読みやすくするのに利用できる これらの改行は無視される <h1>慶應義塾ITC本部</h1> <h1> 慶應義塾ITC本部 </h1> HTML文書のメタ情報の指定 実際のHTML文書 これまで紹介したHTMLは,実は文法的に不完全 標準準拠のHTML文書とするには,3つの追加情報が必要 DOCTYPE宣言 html要素のlang属性 meta要素による文字コードの指定 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <title>タイトル</title> </head> <body> <h1>サンプル</h1> <p>これはHTMLファイルのサンプルです。</p> </body> </html> DOCTYPE宣言(文書型宣言) ファイルがHTML文書であることを示す HTMLファイルの一番最初(1行目)に書く 本来は文書の 「型」 を示すだけのものだが,実際にはブラウザの 「表示モード」 の切り替えにも使われている (そのうち解説する) HTML 4.01以前は,HTML文書が 「どのバージョン・種類 の」 HTMLに準拠して書かれているかを示していた バージョンおよび種類ごとに書式が決まっていた HTML5でバージョンを表す情報は廃止された <!DOCTYPE html> <html lang="ja"> <head> … </head> <body> … HTML 4.01 の文書型 (参考) 3つの種類(文書型)がある HTML 4.01 Strict HTML 4.01 Transitional レイアウトに関する要素を排除 (使用禁止) し,文書の構造のみを マークアップする (本来HTMLが目指していた形) 互換性のため,非推奨ながらレイアウト要素を残したもの HTML 4.01 Frameset レイアウト要素に加え,フレームを使用可能としたもの DOCTYPE宣言の文法 (参考) 以下の4つの部分から構成される html: 文書タイプがHTMLであることを示す PUBLIC: DTDが公開されたものであることを示す DTD: 文書型定義 (Document Type Definition) フォーマル公開識別子: DTDを特定するための情報 大文字でもよいが,XHTMLの場合は小文字でなければならない Formal Public Identifier (FPI) システム識別子: DTDのURIを示す HTMLでは省略可能だが,XHTMLでは必須 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> DOCTYPE宣言の例 (参考) HTML 4.01 Strict HTML 4.01 Transitional <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> システム識別子は省略している (あってもよい) <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> XHTML 1.0 Strict <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd"> システム識別子は省略不可 html要素のlang属性 文書中で主に使われている 「言語」 のコードを指定 文法上は必須ではないが,必ず指定しておくべき ダブルクォーテーション(「" "」)を省略しないこと 代表的な言語コード ja (日本語), en (英語),en-US (アメリカ英語),zh (中国語), ko (韓国語),fr (フランス語),de (ドイツ語), es (スペイン語) 等 大文字小文字は区別されないが,小文字を使うのが普通 「国コード」(JP,US など) とは違うので注意 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> ... meta要素による文字コード指定 meta要素は,文書のさまざまなメタ情報を指定 空要素で,head要素の中に複数入れられる 文書の文字コードを charset属性で指定する 文法上は必須ではないが,常に指定しておくべき 伝統的に,title要素よりも前に置くのが普通 以前はそうしないとtitle要素が文字化けするブラウザがあった 現在はほとんどないと思われるが… <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> <meta charset="UTF-8" /> <title>タイトル</title> </head> <body> ... HTML 4.01での文字コード指定 (参考) meta要素で,http-equiv属性とcontent属性を セットで指定する title要素よりも前に置く 書式がやや複雑なので,間違えないように (特にcontent属性) 文法上は必須ではないが,常に指定しておくべき <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>タイトル</title> </head> <body> ... 文字コードの表記 日本語用の文字コードの表記法 その他の文字コード Shift_JIS: シフトJIS (ハイフンではなく,アンダースコア「_」) ISO-2022-JP: いわゆるJIS (こちらはハイフン「-」) EUC-JP (これもハイフン「-」) UTF-8: UnicodeのUTF-8符号化 (これもハイフン「-」) US-ASCII: ASCII文字のみの場合 ISO-8859-1: ラテンアルファベット(ドイツ語,フランス語など) EUC-KR: 韓国語EUC EUC-CN: 簡体字中国語EUC EUC-TW: 繁体字中国語EUC 大文字小文字は区別されないので小文字でも可 <meta charset="UTF-8" /> MIMEタイプ (参考) Webサーバとブラウザ間でやり取りされるデータ形式の指定 HTTPにおいて,サーバ応答に含まれるContent-Typeヘッダの パラメータとなる 実際には,ファイルの拡張子等によってWebサーバが決定するのが 普通なので,meta属性での指定はあまり意味がない MIMEタイプの例 テキスト(.txt): text/plain HTML文書(.html,.htm): text/html XML文書(.xml): text/xml CSS(.css): text/css JPEG画像(.jpg,.jpeg): image/jpeg PNG画像(.png): image/png PDF文書(.pdf): application/pdf <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> 仕様準拠のHTML文書 冒頭の例に3つのメタ情報を追加 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <title>この講義について</title> </head> <body> <h1>講義資料の情報</h1> <p> 講義資料は<a href="http://user.keio.ac.jp/~aa202427/josho/">このページ </a>にあります。以下はこの講義の参考書のリストです。 </p> <ul> <li>「よくわかるHTML5+CSS3の教科書」</li> <li>「Web標準の教科書―XHTMLとCSSでつくる“正しい”Webサイト」</li> <li>「CJKV日中韓越情報処理」</li> </ul> </body> </html> HTMLの文法チェック HTMLバリデータの利用 The W3C Markup Validation Service http://validator.w3.org/ Unicorn - W3C 統合検証サービス http://validator.w3.org/unicorn/ Another HTML-lint 5 http://www.htmllint.net/ いずれも,HTMLの文法等をチェックしてくれる HTML Validator (バリデータ) と呼ばれる 今後,作成したHTMLは必ずいずれかのバリデータで チェックすること 第3回課題(再掲) 第3回課題 次回(第4回)までの講義内容を踏まえ,自分にまつわ る内容を含むHTML文書を作成する 内容について 自己紹介,自分の趣味・興味対象についてなど何でも構わないが, ある程度まとまった内容になっていることが望ましい 分量は自由 (目安として300文字程度以上) HTMLについて HTML5 (XHTML形式) の文法に則って記述する 特に,要素の入れ子関係には注意 チェックツールを使う方法については次回紹介 以下の要素を必ず使うこと h1,h2,p,a,ulまたはol デザインやレイアウトは気にしなくてよい 第3回課題(続き) 提出物 以下をZipファイルにまとめたもの HTMLファイルを直接提出するのは避けてください 作成したHTMLファイル ファイル名が変わってしまうため Zipファイルの作成方法が分からない人は質問してください 提出期限: 5月9日(金) 23:59 keio.jp 「授業支援」 上で提出 ファイル名に関する注意 HTMLファイル名には 「半角英数字」 のみを使う Webサイトにアップロードする際は半角英数字のファイル名 にすることが必須 現状では,日本語を(多国語化ドメイン名を除き)直接URIに 入れることはできません Webの世界には,日本語を入力できない端末や,理解でき ない人もたくさんいます