村岡 正和

Markup Cafe FUKUOKA Vol.1開催レポート~福岡で盛り上がる!HTML5マークアップのアイデアあれこれ~

こんにちは!html5jマークアップ部 部長の村岡です。
この記事では2014年3月8日に開催されたMarkup Cafe FUKUOKA Vol.1のイベントレポートをさせていただきます。

お菓子やコーヒーとともに

大阪に続く地方開催でのMarkup Cafe、今回も20名以上の方々に参加いただいて様々なマークアップ案が披露されました。

Markup Cafe FUKUOKAの開催にあたっては準備や開催告知などで地元のHTMLマークアップコミュニティである福岡マークアップ勉強会、通称「マカベン」の方々にご協力いただきました。この場を借りて改めて御礼申し上げます。ありがとうございました。

福岡マークアップ勉強会「マカベン」(敬称略)

MarkupCafe Fukuoka Vo.1スタッフ

FUKUOKA Vol.1 マークアップ事例の解説

今回は地域スタッフの方々から「普段マークアップで疑問に思ってることをみんなで検討したい」というご意見があったので、出題を2題にし、残りの時間でQ&Aを行う構成にしました。

このタイムテーブルは実際やってみてよかったです。普段は3題出題するんですが、結構頭が疲れるし、ゆっくりコーヒーを飲む時間もなかったりするので(笑)。2題がんばった後にQ&Aコーヒーを飲みながら談笑するくらいがカフェっぽくていいです。これからはこの時間配分でやろうかなと思いました。

1問目 記事のヘッダ

記事のヘッダ

今回の2題はマカベンの方々に考えていただきました。最初のお題は記事ページのヘッダ部分のマークアップです。ブログなどでよく使われるレイアウトですね。サンプルとしてこのHTML5 Experts.jpのヘッダ部分を採用しました。よくみるとパンくず、タイトル、著者の写真、日付、ソーシャルボタンなどなど……このヘッダの情報量はかなり多いですね。みなさん結構苦戦してたみたいです。

お題1:Aチーム

Aチームのポイントは以下です。

  • 全体をarticle要素とした
  • パンくずはnav要素とし項目をul, li要素でリストとした
  • nav要素内に見出しを入れるかどうか悩んだが、入れなかった
  • パンくずの下、タイトル、ソーシャルボタン等をheader要素とした
  • ソーシャルボタン群はaside要素とした
  • 著者名はp要素とした

まず、HTML5で新たに登場したarticle要素で記事全体を囲っています。このお題ではヘッダの下に記事本文が続くことが想定できるので、本文や記事のフッタがあればそのフッタもarticle要素内に入るでしょう。

Aチームはnav要素がセクショニング・コンテンツであることに着目して、見出し要素を入れるべきかどうか悩んだようです。ここは悩むケースが出てくるところですね。個人的にはレイアウト上見出し表記がない場合には必要がないと考えていますが、スクリーンリーダー等に配慮して見出し要素で「パンくずナビゲーション」などと記載しCSSでdisplay:none;してもよいかもしれないです。

article要素は自己完結するコンテンツを表します。HTML5を学ぶ上で、articleやsectionといった新しい要素は使いどころが難しいとよく言われますね。個人的には新聞の紙面から記事をスクラップするようなケースで理解しています。

新聞中のひとつの記事をハサミで切り取ってスクラップファイルに収録する場合は、記事のタイトルや本文、補足事項など、後から読んだときに情報が欠損しない範囲を切り取るでしょう。そのようなイメージでarticle要素を使うのが適当だと考えています。

お題1:Bチーム

Bチームのポイントは以下です。

  • パンくずより下の部分をarticle > header要素とした
  • パンくずの階層を意識してol要素とした
  • 著者の写真、著者名やfigure, figcaption要素とした。

Bチーム中の参加者の方が終わってからブログを書かれています。勉強会の経験をもとにマークアップを再考されてるのはとても素晴らしいですね!ボクも読んで勉強になりました。

このチームでは、パンくずには階層(≒順序)があると考えてol要素でリスト化しています。また、著者の写真と著者名の関連性を意識してかそれらをfigure, figcaption要素でマークアップしています。

figure要素は図表を表し、figcaption要素はその説明を表します。なるほど…著者近影と著者名が図表とその説明にあたると解釈できるかもしれないですね。興味深いです。その他、日付をtime要素で囲っているのも特徴的ですね。

お題1:Cチーム

Cチームのポイントは以下です。

  • HTML5バリデーション合格
  • RDFa Breadcrumb, Personを使用

CチームはマークアップをHTMLバリデーターに通し、合格してから発表に臨んでいました。そのためにdoctypeやhtml要素もマークアップされています。そこまで考えていたとは。なんかかっこいいですねw

情報をよりセマンティックにするためパンくずはBreadcrumb, 著者写真、著者名はPersonのRDFaスキーマを使いマークアップしています。このチームの後からの反省点として、Personスキーマはちょっとおかしかったかも。というのがありましたが、まあこれはこれでいいんじゃないですかね。
全体的に情報の順番とCSSの装飾のバランスが意識されたマークアップです。

お題1:Dチーム

Dチームのポイントは以下です。

  • タイトル、著者情報、タグ、日付をheader要素とした
  • ぱんくずはnav, ソーシャルボタン群はaside要素とした
  • パンくずはol要素とした
  • 著者の写真、著者名やfigure, figcaption要素とした

他のチームと比べてheader要素の範囲が限定的なのが特徴的です。パンくずやソーシャルボタンがヘッダなのかどうかについては、各チームでもいろいろな意見が出たようですが、この辺りは制作者の解釈によって様々ありそうですね。

パンくずでol要素を使う、著者情報にfigure, figcaption要素を使うという考え方はBチームに似ています。タグをdl要素で定義リストとしているところも特徴的ですね。

お題1:Eチーム

Eチームのポイントは以下です。

  • 全体をheader要素とした
  • パンくずの構造をitempropで定義、矢印画像のalt属性値を”の中の”とした
  • <dt>タグ</dt>はCSSで非表示にすることを想定
  • スター評価の画像グループはWEBアクセシビリティガイドラインに沿ってマークアップした

この問題では、パンくず、ソーシャルボタン群をヘッダとして扱うかどうかが議論の焦点となっていましたが、Eチームは記事ヘッダの一部とみなしてheader要素内としています。

Eチームは特にスクリーンリーダーに配慮された印象が強いマークアップです。
パンくずのデザインで使われている”>”を画像とし、alt属性値を”の中の”とすることで、スクリーンリーダーで「◯◯の中の◯◯」と読み上げる配慮をしています。さらにDチームと同様タグブロックにdt要素でタイトルを記載し、CSSで非常時とすることでスクリーンリーダーでの読み上げに配慮しています。

スター評価の画像グループでは、一番上の画像のalt属性値を”4.5個の星です”とし、その他の画像のalt属性値を空にしています。これはG196: 画像のグループにある一つの画像に代替テキストを提供して、そのグループの全ての画像を説明するの実装例に沿ったもので、同じくスクリーンリーダーでの読み上げに配慮したものになっています。

部長はこう書く

お題1:部長

  • schema.org Articleを採用し、記事情報をマークアップした
  • パンくずはRDFa Breadcrumbを採用
  • スター評価、ソーシャルボタン群はaside要素とした
  • スター評価の画像グループはG196の実装例に沿ってマークアップした

懸案のパンくず、ソーシャルボタン群はheader要素内に入れています。その上でソーシャルボタン、スター評価はaside要素としました。特に厳密に考慮したわけではないですが、まあヘッダの一部でよいと思っています。

パンくずは前回の時と同様Googleのリッチスニペットのマークアップを参考にしました。記事全体の情報の記述もGoogleウェブマスターツールの記事をヒントにArticleスキーマを使っています。

別にGoogle信者というわけじゃないですが、ウェブマスターツールのヘルプにあるように、将来的に検索エンジン等でサーチフレンドリーとなる可能性が高まるのは良いことだと思います。

スター評価の画像グループはEチームと同様WCAGのG196の実装例に沿いました。このような画像グループのケースごとの実装はWCAGのドキュメントのほか、最近公開されたWAI Web Accessibility Tutorials – Groups of Imagesのドキュメントも参考になります。

photo02

2問目 複数のリンクリスト/ナビゲーション

複数のリンクリスト・ナビゲーション

2問目は、ページのサイドによくあるリンクのリスト、ナビゲーションなどのレイアウトです。画像中のグローバルナビゲーションの下、メインコンテンツの右側の部分です。ウェブページではこのような上部のグローバルナビゲーションのほかにサイドペインにサブナビゲーションやバナーなど複数のテキストリンク、ボタンなどが並ぶレイアウトがよくありますね。一見単純なマークアップになりそうな気がしますが、ここでも細かいところでいろいろな疑問やアイデアが出てきました。

お題2:Aチーム

Aチームのポイントは以下です。 * 全体をaside要素とした * 1番目のリストをol要素とした * 1, 3番目のリストをsection要素とした

まず、このブロック全体をaside要素としています。aside要素はコンテンツには関連があるが、切り離しても問題がないようなセクションを表します。1番目のリストをローカルナビゲーションとみなした場合、asideにするのは違和感がないか?という意見がありました。Aチームではaside=サイド部分というような感覚で考えていたようなので、解釈が違っていたという反省があったようです。

1番目のリストはulかolか悩んだようですが、テキストに番号が降ってあったのでolにしたそうです。テキストの番号がリストの順序に意味的に直結している場合はそうかもしれませんが、これは文書構造をどう設計したいかによるかもしれないですね。

1, 3番目のリストをsectionとし、2番目をdivとしています。この場合は文書のアウトラインがおかしくなるのでは?という指摘がありました。

実際にこのマークアップをHTML5 Outlinerにかけてみると図のようになります。

1.Untitled Section、ネスト、1.Untitled Section、ネスト、1.マークアップカフェ、2.福岡のIT勉強会

アウトライン上に2番目のリストが現れていません。2番目のリストもセクショニング・コンテンツでよいかもしれないという意見がありました。

全体的に情報の文脈と、文書構造をどう切り分けてマークアップしていくかということをよく考えさせられるマークアップでした。

お題2:Bチーム

Bチームのポイントは以下です。

  • 1番目のリストをol要素とした
  • 2番目のリストに見出しをつけ、CSSで非表示とする
  • 1番目のリストをnav, 2,3番目のリストをそれぞれsection要素とした
  • 2, 3番目のリストをaside要素とした
  • 全体をsection要素とした

1番目のリストはAチームと同様、順番を意識してol要素としています。2番目のリストに見出しをつけてCSSで非表示とすることで、スクリーンリーダー等での読み上げに配慮しています。

セクショニングは1番目をnav、2,3番目をsectionとし、2,3番目をasideとし、全体をsectionとしています。これをHTML5 Outlinerにかけてみると次のようになります。

1.Untitled Section、ネスト、1.Untitled Section、ネスト、1.マークアップカフェ、2.Untitled Section、ネスト、1.広告、ネスト、2.最近のIT勉強会

Untitled Section(見出しのないセクション)が余分に現れてきています。特に「広告」、「最近のIT勉強会」がUntitled Sectionで下げられてしまっていますね。チームではHTML5の要素でできるだけ意味的なまとまりをつくろうと考えたようですが、結果的にアウトラインがおかしくなっています。

HTML5で登場したarticle, section, nav, asideといったセクショニング・コンテンツは文書のアウトラインを表現するので、意味づけだけを意識して使うとアウトラインの構造がおかしくなる可能性があります。ここが使いどころに悩むところですね。その意味で非常に参考になるマークアップです。

お題2:Cチーム

Cチームのポイントは以下です。

  • HTML5バリデーション合格
  • 1番目のリストはnav要素とした
  • 2, 3番目のリストはそれぞれaside要素とした
  • それぞれのリストをdivで囲い同一のクラス名を割り当てた

1問目と同様バリデーションに合格していますw 1番目のリストはローカルナビゲーションとみなしnav要素としました。ulで順番なしリストとし、a要素中のrel属性でカレントページの前後を表しています。

2,3番目のリストはそれぞれをaside要素としています。ページコンテンツから切り離せる部分という考えはBチームと同様ですが、アウトラインとCSSを考慮してのようです。

各リストはCMSではウィジェット機能で提供されるのが多いことに配慮して各リストをdivとし、同一のクラス名を当てています。現実的な配慮ですね。

お題2:Dチーム

Dチームのポイントは以下です。

  • 全体をarticle要素とした
  • 各リストをsection要素とした
  • 2, 3番目のリストをaside要素とした
  • 外部リンクにクラス名を割り当て、JavaScriptで別タブを開く想定

全体をarticle要素としています。このリンクリスト/ナビゲーションの部分だけで完結したコンテンツと言えるかどうかは、微妙な気がしますね。article要素の解釈が難しいところですが、ここはarticleでなくてもいいのではないでしょうか。

アウトラインの取り方はBチームとほぼ同様、HTML5 Outlinerでも同様のアウトライン構成が見られました。各リストを意味的にまとめたいという意図が伝わりますが、結果的にアウトラインがおかしくなっているのはおしいですね。

外部リンクについては、各チームがterget=”_blank”を利用しているのに比べてクラス名を割り当てJavaScriptでの制御を想定しているのが特徴的です。terget属性はリンク先の表示方法を指定します。_blankを指定すると強制的に別ウィンドウ(タブ)で開く動作になりますが、このような動作に慣れないユーザーに対して混乱を与える可能性があります。

SCR24: プログレッシブ・エンハンスメントを用いて、利用者の要求に応じて新しいウィンドウを開くではこれに配慮するためのJavaScriptによる実装例が収録されています。このような配慮は、Webアクセシビリティとしても重要ですね。

お題2:Eチーム

Eチームのポイントは以下です。

  • 全体をdiv要素とした
  • 1番目のリストはnav要素としrole=”navigation”を設定
  • 2, 3番目のリストはそれぞれaside要素とした

テーマは「年度末の納期の案件」だとかw
忙しい中で無駄なく的確にマークアップするという条件を自ら設定してのトライです。

まず、全体をdivとしてCSSの割り当てを想定しました。レスポンシブデザインによるレイアウトのダイナミックな変更をも視野に入れたそうです。2番目のリストに見出しを設定し、非表示としました。B, Dチームと同じ配慮ですね。

1番目のリストはローカルナビゲーションとみなしnav要素としARIAのrole=”navitaion”を指定。2,3番目のリストはそれぞれをaside要素としました。

セクショニング・コンテンツの使い方はCチームとほぼ同様です。ちなみにnav要素のロールはデフォルトでnavigationなので省略可能です。

なるほど、繁忙期という条件だけあって、そつのないマークアップですねw

部長はこう書く

お題1:部長

  • 1番目のリストをnav要素とした
  • 2番目のリストに見出しをつけた
  • セクショニングはC, Eチームと同様
  • 外部リンクにrel=”external”を設定

1番目のリストはローカルナビゲーションとみなしてnav要素としました。セクショニングの考え方はC, Eチームと同様です。

2番目のセクションにはB, D, Eチームと同様に広告だとわかる見出しをつけています。なくてもいいかなと思ったんですが、読み上げの脈絡を考えると、このケースではあったほうがいい感じかなと思いました。CSSでの非表示を想定しています。

余談ですが、このクラス名”sr-only”はBootstrapで使われているクラス名を参考にしています。BootstrapのようなCSSフレームワークでもアクセシビリティが考えられているんですね。

広告、福岡のIT勉強会リンクリストのリンク先は外部リンクとみなして、rel=”external”を設定しました。外部リンクを開く制御はDチームと同様JavaScriptの利用を想定しています。

rel属性のexternal値はそのリンクが外部のリンクであることを示します。jQuery Mobileではrel=”external”のリンクはAJAXでのページ遷移処理がオフになり内部ページヘとのアクセスと異なる挙動になります。このような事例があるのも参考に、マークアップしてみました。

福岡のマークアップ熱はすごかった!

みんなでマークアップを検討している

MarkupCafeを楽しんだ後は、みんなでやったマークアップの反省や、普段疑問に思ったことを話し合いました。福岡はマカベンの活躍もあって昔からHTMLマークアップに対する関心が高い地域です。皆さんが熱心に意見交換されており、なにより間違いをおそれず積極的にHTML5マークアップを実践していこうという意識が素晴らしかったです。

個人的には懇親会で食べた手羽先、ラーメンが忘れられません(笑)。福岡の皆さん、また行きたいと思いますのでぜひよろしくお願いします!!

さて、今日の問題、皆さんならどうマークアップしますか?

Powered byNTT Communications

tag list

アクセシビリティ イベント エンタープライズ デザイン ハイブリッド パフォーマンス ブラウザ プログラミング マークアップ モバイル 海外 高速化 Angular2 AngularJS Canvas Chrome Cordova CSS de:code ECMAScript Edge Firefox Google Google I/O Google I/O 2014 HTML5 Conference 2013 html5j IoT JavaScript Microsoft Node.js PhoneGap Polymer SkyWay spdy TypeScript UI UX W3C W3C仕様 Webアプリ Web Components WebGL WebRTC WebSocket