Trans

NPOやソーシャルビジネスの創業・経営・マネジメント

Web制作者ってとりあえずalt属性は空にしておけばいいって思ってるよね?

アクセシビリティの基本でありながら、奥が深いalt属性。こんな視点もあるのだということを書いておきます。

追記(2008年7月14日):文章中に誤解を招く表現がありましたので、文章を追記しました。

ある視覚障害者の意見

上のタイトルは皆さんを煽っているわけではなく、僕が実際に言われたこと。
どこのセミナーか講演会かは覚えていないのですが、決してプロレベルではないが自分でもWebサイトを制作できる全盲の視覚障害者(スクリーンリーダー利用者)がそのときに言っていた言葉。
もう少しちゃんと説明すると、もし何らかの画像があった場合に、僕たちのようなWebサイト制作者がそのimg要素のalt属性に何を入れればよいのかをパッと閃かなかったときに「とりあえず」alt属性を空にしているよね、と言われたということです。
僕はこれを言われたときに本当に胸に刺さるものがありました。思い当たる節が多すぎた(追記(2008年7月14日):自分のことです)。

イメージ画像のalt属性

コンテンツが文章だけでは物足りないので、イメージ画像を掲載するときというのがあると思います。そのイメージ画像のalt属性はどのようにしていますか?
僕は通常空にしているのですが、もしかするとこのイメージ画像というのもコンテンツとして捉えるのであれば、やはりalt属性はあったほうがよいのかもしれません。

アクセスマップのalt属性

少し話は変わりますが、会社案内やaboutのページにアクセスマップってありますよね?そうです、近くの駅や目印から会社までの経路を書いた地図のこと。例えば、この地図には何ていうalt属性を入れていますか?
もちろん、img要素の地図に加え、p要素やdl要素などで経路の順番をテキストで表示していればよいのですが、もしimg要素のalt属性が「アクセスマップ」と書かれていて、そのimg要素の地図内に画像として経路の順番を書いている場合はどうでしょうか。視覚障害者はその情報を読み取る術がありません。すると、そのアクセスマップのalt属性は「JR○○駅下車。○番出口から出て北へ徒歩5分。」と書かれていた方がよいのかもしれません。

まず空なのではなく、何かテキストを入れることを前提に。

これは結論ではなく、あくまで視点の提示です。WebコンテンツJISとともにalt属性が必須であることは広まったのですが、一方で「とりあえず空にする」という手法もまた広がったのかもしれません。もちろん、空にするのが悪いことでは決してありません。
ただ、もしかすると考え方としては「alt属性は空にする」ではなく、「まず、alt属性に何かテキストを入れる」ということを前提にコーディングしてもよいのかもしれません。
(いきなり追記:ここまで書いていて思ったのは、そもそも論としてアクセスマップのマークアップなどにおいてはどのようにalt属性を書くのかという前に、その経路手順を画像の中に入れ込むかどうかの問題もある。ある一定の情報をテキストとして扱うのか、それともalt属性として扱うのか、という情報設計が必要だと思う。)

HTML×CSSのプレビュー型とアーキテクト型コーディングフロー

CSSにはプレビュー型とアーキテクト型コーディングフローというのがあり、今後はアーキテクト型コーディングが主流になるのでは!というアイディアを思いつき、実際にコーディングしてみたら。・・・挫折しました。ただ、こういう考え方もありなのかなと思い、書いておきます。

プレビュー型コーディング

先に申し上げておきますが、このプレビュー型とアーキテクト型コーディングフローとはどこかのCSSハッカーの言葉ではなく、僕が便宜上名付けただけです。というわけで知った顔して誰かに話しても、全く通じないこと請け合いなので気をつけてください。
さて、ここでいうプレビュー型コーディングとはこんなコーディングフローのことを意味しています。

  1. HTMLをコーディング
  2. PhotoshopやFireworksの画像をスライス
  3. HTMLで書いたid属性やclass属性を軸にCSSをコーディング

多少の前後はあるにせよ、このフローでコーディングすると、コードはこんな感じになると思います。

<ul id="navi">
	<li><a href="hogehoge1">ナビ1</a>
	<li><a href="hogehoge2">ナビ2</a>
</ul>

<div id="main">
	<h2>ここにタイトル</h2>
</div>
ul#navi {
	margin-bottom: 30px;
}

ul#navi li {
	float: left;
}

div#main {
	margin-bottom: 30px;
	padding-left: 15px;
}

div#main h2 {
	padding-left: 15px;
	color: #FFCC00;
}

プレビュー型コーディングと名付けたのは、オーサリングツールやブラウザ等でプレビューしながらコーディングするからです。要は目視で確認しながら、デザインの各パーツを配置していくということになります。

プレビュー型コーディングの問題点

個人的にこのプレビュー型コーディングの問題点になりそうなものを上げておきます。

  • margin-bottom: 30px;やpadding-left: 15px;などコードが重複する可能性がある。プレビューしながらコーディングすることが前提なので、CSSを設計せずにいきなりコーディングを開始するため。
  • デフォルトのリセットやコンポーネント(もしくはモジュール)CSS、要は使い回し系のCSSと重複する可能性もある。
  • 目視をベースにするため、細かな余白や行間等がデザイナーによって指示されず、コーダーがコーディング中に判断するしかなくなる。

というあたりかなと思います。

アーキテクト型コーディング

アーキテクト型コーディングとはこんなコーディングフローを指し示します。ちなみに、アーキテクトとは設計という意味で使っています。

  1. HTMLをid属性のみでコーディング
  2. PhotoshopやFireworksで余白やカラー等の値の抽出してから、画像をスライス
  3. 抽出した値をCSSに書き込む
  4. 必要なclass属性をHTMLに書き加える
  5. その他のCSSをコーディング

意味分からないですね(苦笑)例えば、こんな感じです。まず、始めにHTMLをコーディング。

<ul id="navi">
	<li><a href="hogehoge1">ナビ1</a>
	<li><a href="hogehoge2">ナビ2</a>
</ul>

<div id="main">
	<h2>ここにタイトル</h2>
</div>

次にPhotoshopやFireworksで余白やカラー等の値を抽出し、画像をスライスします。すると、デザインはmargin-bottom: 30px;やpadding-left: 15px;は繰り返し使われていることが分かります。そこで、CSSにこんなコーディング。

.ma-1 {
	margin-bottom: 30px;
}

.pa-1 {
	padding-left: 15px;
}

そして、この値をHTMLにclass属性を付け加えて、付与します。

<ul id="navi" class="ma-1">
	<li><a href="hogehoge1">ナビ1</a>
	<li><a href="hogehoge2">ナビ2</a>
</ul>

<div id="main" class="ma-1 pa-1">
	<h2 class="pa-1">ここにタイトル</h2>
</div>

最後に、CSSをもう少し追加します。

ul#navi li {
	float: left;
}

div#main h2 {
	color: #FFCC00;
}

これで、HTMLもCSSも重複せずにきれいなんじゃないの!と思ったのです。いきなりコーディングから始めるのではなく、最初に十分にHTMLやCSSをどのように構造化すればよいのかを考えてから設計するということです。

よりよいコーディングフローを求めて

とここまで書いて、実際のサイト制作の際に使ってみたのですが、正直すごく面倒くさい。はじめにPhotoshopやFireworksで余白やカラーの値を抽出するまではよいのですが、それを1つずつ宣言ブロックに書き換えていくのは思ったより時間がかかります(もしかすると大規模サイトでは有効かもしれませんが)。それに、class属性が構造と表現を分離しているとは言えません。
けれど、PHPJavaScriptなどのプログラミングをする人間からすると、設計もアルゴリズムも考えずにいきなりコーディングするというのはあり得ないとは思います(プログラミングはまだまだ勉強中ですが)。一方、HTMLはマークアップ言語だから、そういうものなのかなとも思ったり。
はたまた、個人的にはWordPressのセマンティックなテーマと呼ばれるSandboxのようなコードの吐き方(body、エントリー、コメントのclass属性にスクリプトで任意の値を自動的に与える)はアリだと思っています。しかし、それを手動でやろうとするとこんなことになってしまいました。
もしかすると全面的にこれを用いずに、部分的に用いるとか(グリッドシステムなら余白等はかなり重複します)。いや、コーディングしながら重複する部分はまとめていって、コードの可読性を上げるとか。でもそれも時間ばかりかかって面倒だよなー。そういうことをつらつらと考えていました。
すいません、特に結論はないです。

印刷用デザインをきれいにまとめるための7つのポイント

印刷用デザインもWebサイトにとっては1つのデザインだと言えます。制約がある印刷用デザインをきれいにまとめるためのポイントを上げてみました。

印刷用デザインをどうするか。

当ブログで印刷用CSSをはじめて取り上げたのが2006年12月でした。また、2007年4月にも印刷用CSSをもっとよくするための4つのTipsという内容で取り上げました。
さて、今回取り上げるのは今までと違い、印刷用CSSのコーディングではなく、純粋に印刷用デザインはどのようなものがよいか、というものです。コーディングではなく、いかにデザインするか。
ちょうどアックゼロヨン・アワード2007の結果発表もあったことなので、その受賞作の印刷用デザインを参考にしました。また、ADP: 印刷用CSSの書き方(基本編)もかなり(むしろほとんど)参考にさせてもらいました。そのポイントを以下の7つにまとめました。
なお、文末にアックゼロヨン受賞サイトの印刷プレビュー(Firefox2)のスクリーンショットと印刷用CSSのリンクを書いておきます。

1. 背景色、背景画像は使わない。

もちろん使ってもよいのですが、使っても意味がないというのが実情です。基本的にブラウザの初期設定では印刷では背景画像や背景色を印刷しないようになっているからです。この点が、印刷用デザインにとっての大きな特徴、というより制約になります。

2. 余白を十分に取る。

このような制約があるので、文章の可読性にも大きな制約が出ます。本文の要素間(見出しと本文など)の余白を大きめに取っておいたほうが各要素の関係性が分かりやすくなり、閲覧者が文章を読みやすくなります。

3. 本文は明朝で、見出しなどはゴシックにする。

ディスプレイでは文章が明朝では読みにくいため、通常ゴシックにしますが、印刷では明朝も使えるため、本文は明朝にします。一方で、見出しなどはタイポグラフィの考え方に従い、ゴシックのほうがよいと思います。

4. 文字サイズのコントラストを大きめに取る。

上記とも関連しますが、例えば本文が12ptくらいであれば、見出しは20ptにするなど、各要素間の文字サイズを思い切って大きく変えてみます。Web2.0系のデザインで流行したデザインのようにです。

5. 太字は本当に必要な時だけ使う。

見出しには太字を当てたくなりますが、我慢したほうがよいかもしれません。印刷における文字の太字はあまりきれいではありません(特にメイリオなど)。太字はstrong要素を使っている箇所など、本当に必要な箇所にだけ使います。

6. 白黒である必要はない。

プリンタがモノクロといえども白黒にこだわる必要はありません。もちろん、強調点が色合いでしか判断できないのは問題かもしれませんが。また、カラーを使うのであれば、PCのWebデザインと揃えると統一性が生まれます。

7. ボーダーを使いすぎない。

背景色、背景画像が使えないとなると、頼りにできるのはボーダーです。しかし、その結果あちこちにボーダーが用いられ、きれいなデザインができないことがあります。ボーダーはどんどん使えばよいのですが、余白やタイポグラフィをうまく使ったほうがきれいにまとまります。

参考:アックゼロヨン受賞作のスクリーンショット

今回、この記事を書くのに参考にしたWebサイトの印刷用デザインのスクリーンショットを貼り付けておきます。印刷用CSSを用意していないところ、また同じ制作会社が担当しているサイトは省きました。また、スクリーンショットはトップページではなく、実際にコンテンツがある下部のページです。

製品の特長 | MORISAWA PASSPORT モリサワ パスポート
http://www.morisawa.co.jp/shrd/print.css

業務分野 一般企業法務 | 西村あさひ法律事務所
http://www.jurists.co.jp/common/css/print.css

リビング ダイニング トヨタホーム|注文住宅 イメージ検索「タグル」
http://tagle.jp/shared/css/print.css

台風前線 2 | プロジェクト概要
http://front.eye.tc/common/css/print.css

ウェブサイト制作|デジパ株式会社
http://digiper.com/css/print.css

旭松食品:おなか納豆のメカニズム
http://www.asahimatsu.co.jp/shared/css/print.css

ブログ, CMS (ホームページ制作会社 アルファサード - アクセシビリティ, ユニバーサルデザイン, ブログ・CMS, モバイル)
http://alfasado.net/common/css/print.css

ファミマTカード(豪華アーティスト真夏の共演!! a-nation 真夏の野外ライブチケット ファミリーマート独占先行販売!!)|FamilyMart
http://www.family.co.jp/css/print.css

開園時間・入園料|東山動植物園
http://www.higashiyama.city.nagoya.jp/inc/print.css