フォームのスタイリング
●フォームはユーザーが能動的に動く場所なので、気の利いたデザインになっているとサイト全体の印象アップにつながる。一方、項目数が多く、見た目が整理されていないフォームは逆に信頼感を大幅に低下させる。使いやすさはもちろんのこと、ユーザーに心地よく感じてもらえるインターフェイスを目指す。
フォームパーツの外観は、OSやブラウザの種類に依存。CSSを使ってもコントロールできるところとできないところがある。基本的には、フォームパーツはOSやブラウザが提供するユーザーインターフェースのデフォルトをそのまま利用し、幅や高さを調節する程度にするのが現実的。
●お問い合わせフォームのシンプルなスタイリング
XHTML
<h1>お問い合わせフォーム</h1>
<form method="post" action="contact.cgi">
<p>入力が完了したら、「送信する」ボタンを押してください。<span class="required"></span>
印は必須事項です。</p>
<fieldset><!-- 一つ目のフィールド -->
<legend>お客様の情報</legend>
<table>
<tr>
<th><label for="name">お名前<span class="required"></span></label></th>
<td><input type="text" id="name" class="text" tabindex="1" /></td>
</tr>
・・・・中略・・・・
<tr>
<th><label fot="tel">電話番号</label></th>
<td>
<input type="text" id="tel" class="text" tabindex="6" />
</td>
</tr>
</table>
</fieldset>
<fieldset><!-- 二つ目のフィールド -->
<legend>お問い合わせ内容<span class="required"></span></legend>
<textarea id="comment" rows="7" cols="40" tabindex="6" />
</fieldset>
<div class="submit"><!-- 送信ボタン -->
<input type="submit" class="submit" value="送信する" tabindex="8" />
</div>
</form>
※tabindex
キーボードのTabキーを使ってリンクやフォームパーツを選択することがあるが、その選択(フォーカス移動)の順番を指定するために、tabindex属性が利用できる。accesskey属性(ショートカットキーの指定)とあわせて、リンクやフォームのユーザビリティ向上のために利用される。
ただし、tabindex属性によって選択順がユーザーの意思に反してしまったり、accesskey属性で指定した値がブラウザのショートカットキーとバッティングし、有効に機能しないことで混乱が生じる場合もあるため、これらの属性の利用には注意が必要。
内容をfieldset要素で「お客様の情報」と「お問い合わせ内容」のふたつにグループ化する。CSSが適用されなくてもフォームの構造がわかりやすいようなマークアップを心がけるようにする。
このサンプルでは、フォームの内容はtable要素でマークアップしている。ユーザビリティの高いフォームにするため、それぞれのフォームパーツに対応するテキストをlabel要素でマークアップし、関連付けしておく。
CSS
/* フォームのスタイル */
form {
padding: 15px 15px 5px 15px;
border: 2px solid #c8eca6;
background: #e3f7bc url(bg.png) repeat-x top left; /* 背景用グラデーション画像を横方向にリ ピート */
}
fieldset {
margin: 0 0 20px 0;
padding: 0;
border: none; /* デフォルトで線が引かれるため非表示に */
font-size: 90%;
}
legend {
margin: 0;
padding: 0 0 10px 0;
font-weight: bold;
}
* html legend {
margin-left: -6px; /* Win IE6 でlegend要素が右によってしまうのを修正 */
}
*:first-chid+html legend {
margin-left: -6px; /* Win IE7 でlegend要素が右によってしまうのを修正 */
}
input.text,
textarea {
padding: 0.3em;
border: 1px solid #ccc;
width: 270px;
color: #666;
font-size: 100%;
}
textarea {
width: 420px;
}
/* フォームパーツ選択時のスタイル */
input.text:focus,
textarea:focus {
color: #000;
background: #fff8ee;
}
div.submit {
padding: 0.8em 0;
width: 500px;
}
input.submit {
padding: 0.3em 1em 0.3em 1.1em;
color: #fff;
background: #54af17;
letter-spacing: 0.1em;
font-size: 100%;
cursor: pointer; /* ボタンが押せることを認識しやすいように、ポインタ型カーソルを指定 */
}
input要素で指定できるtype属性の種類はテキストフィールド(text)、送信ボタン(submit)、リセットボタン(reset)、チェックボックス(checkbox)、ラジオボタン(radio)、汎用ボタン(button)、画像ボタン(image)、ファイル参照コントロール(file)、隠しフィールド(hidden)の9種類。
同じinput要素でありながら、type属性だけでそれぞれ機能や外観が大きく異なるため、CSSでスタイリングする際にセレクタ「input」とだけ指定すると、すべてのinput要素に同じスタイルが適用されてしまうことに注意。
種類ごとに違うスタイルを適用したい場合、属性セレクタを使って指定するのが理想的だが、IE6が対応していないため、現実的にはclass属性などを併用して指定。
フォームパーツに入力中であることがひと目でわかるように、:focus擬似クラスで通常時とは別の文字色と背景色を指定。通常時は濃いめのグレーの文字に白い背景となっているところを、入力中だけ文字色が黒、背景色が薄いクリーム色になるようにしている。コントラストがはっきりとして見やすいように、また入力の妨げにならない色を指定する。
なお、:focus擬似クラスはIE6/7がサポートしていないので、JavaScriptを併用するとベター。
今日はここまで。
2011年10月17日月曜日
2011年10月15日土曜日
三十二日目!(テーブルのスタイリング)
XHTML+CSSの勉強ブログ更新はかなり久しぶりになりますが、続きやっていきます。
テーブルのスタイリング
table要素のスタイリングは、通常ボックスモデル以外にも、行や列のグループ化、セルの境界線など、テーブル特有のマークアップやスタイリングについて知っておく必要がある。
より魅力的なテーブルのスタイリング方法を解説。
●グラデーション背景と立体的に見せるテーブル
シンプルな役員一覧表をたたき台にして、グラデーション背景で立体的に見えるテーブルになるようにスタイリングする。
XHTMLでは構造に大きな特徴はないが、列グループを示す為のcolgroup要素、行グループを示すためのthead/tbody要素を利用し、項目名はth要素で、内容をtd要素でマークアップ。
HTML
<table summary="未来コーポレーション役員一覧">
<caption>役員一覧</caption>
<colgroup id="position"></colgroup>
<colgroup id="name"></colgroup>
<colgroup id="Introduce"></colgroup>
<thead>
<tr>
<th scope="col">役職 / 所属</th>
<th scope="col">氏名</th>
<th scope="col">簡単な自己紹介</th>
</tr>
</thead>
<tbody>
<tr>
<td>代表取締役</td>
<td>山田美子</td>
<td>32歳、主婦業と社長業の両立がんばっています。</td>
</tr>
・・・・・中略・・・・・
<tr>
<td>取締役</td>
<td>水野隆</td>
<td>CTO兼任です。</td>
</tr>
</tbody>
</table>
このデザインの場合、テーブルセルの境界線が重なり合わないため、CSSでborder-collapseプロパティを設定し、値を「separate」とする。
さらにtable要素にはテーブル全体の背景となるグラデーション画像を、th要素には濃いブルーのグラデーション画像を指定する。拡大画像をみると、セルボーダーの左側と上側に明るい色、右側と下側に濃い色を指定することで立体感を出している。
border-spacingプロパティはIE6/7では適用されない為、このデザインを忠実に実現すること優先する場合は、XHTMLのtable要素にcellspacing属性を「0」と指定することでこの問題が回避できる。
(<table cellspacing="0">)。ただし、cellspacing属性は見た目をコントロールする属性なので指定するのは望ましくないが、あくまでもIE6/7の問題を回避するためと考えて指定しておく。
CSS
table, th, td {
margin: 0;
padding: 0;
border-collapse: separate;
border: none;
border-spacing: 0; /* IE 6/7は未対応 */
}
table {
width: 500px;
border: 1px solid #eeeeee;
font-family: sans-serif;
background: #d9e7f6 url(bg-png) repeat-x bottom;
}
caption {
margin-bottom: 10px;
padding-left: 10px;
padding-bottom: 2px;
border-left: 6px solid #307bcf;
line-height: 1.8;
font-weight: bold;
text-align: left;
}
th {
padding: 0.8em 0.5em;
border-color: #629cdd #8db7e6 #629cdd #eeeeee; /* 立体的に見せる */
border-style: solid;
border-width: 1px;
color: #ffffff;
background: #629cdd url(th.png) repeat-x;
font-size: 100%;
text-align: left;
}
td {
padding: 0.8em 0.5em;
border-style: solid;
border-width: 1px;
border-color: #ffffff #81b0e4 #ffffff; /* 立体的に見せる */
font-size: 100%;
}
#position {
width: 100px;
}
#name {
width: 80px;
}
●列の一部をハイライト表示するテーブル
テーブルの列の一部をハイライト表示するには、列グループとしてマークアップしたcolgroup要素に対して背景を指定。
XHTMLで「プレミアム」の列に対して、<col span="1"id="premium"/>と指定し、列グループを示しておく。
ただし、これだけではプレミアム列の角丸を実現できない。あらかしめスライスした角丸上端用の画像を「プレミアム」というテキストが入ったth要素に背景として指定し、角丸下端用の画像を列の最後のセルの背景として指定。
XHTML
<table summary="料金プラン">
<caption>サービス料金プラン</caption>
<col span="1" id="tablehead" />
<col span="1" id="plana" />
<col span="1" id="planb" />
<col span="1" id="planc" />
<col span="1" id="premium" />
<thead>
<tr>
<th scope="col">項目</th><th scope="col">プランA</th><th scope="col">プラン</th>
<th scope="col>プランC</th><th scope="col" class="top">プレミアム</th>
</tr>
</thead>
<tbody>
<tr>
<th class="spec">容量</th>
<td>1GB</td><td>2GB</td><td>3GB</td><td>無制限</td>
</tr>
・・・・中略・・・・
<tr>
<th class="spec">サブドメイン</th>
<td>1つ</td><td>2つ</td><td>3つ</td><td class="bottom">無制限</td>
</tr>
</tbody>
</table>
CSSでは「#premium」に対してオレンジ色の背景を指定。
CSS
・・・・中略・・・・
#premium {
background: #f90; /* プレミアム列にオレンジ色の背景を指定 */
}
th.top {
width: 157px;
border: none;
background: url(top.png) no-repeat left top;
/* プレミアム列の上端に角丸上端背景画像 */
}
td.bottom {
background: url(bottom.png) no-repeat left bottom;
/* プレミアム列の下端に角丸下端背景画像 */
}
th.spec {
background: none;
border: none;
}
colを使ったりするテーブルはまだまだ理解ができにくい。。なにか実際に作ってみないとわかりにくいような気がする。
今日はここまで。
テーブルのスタイリング
table要素のスタイリングは、通常ボックスモデル以外にも、行や列のグループ化、セルの境界線など、テーブル特有のマークアップやスタイリングについて知っておく必要がある。
より魅力的なテーブルのスタイリング方法を解説。
●グラデーション背景と立体的に見せるテーブル
シンプルな役員一覧表をたたき台にして、グラデーション背景で立体的に見えるテーブルになるようにスタイリングする。
XHTMLでは構造に大きな特徴はないが、列グループを示す為のcolgroup要素、行グループを示すためのthead/tbody要素を利用し、項目名はth要素で、内容をtd要素でマークアップ。
HTML
<table summary="未来コーポレーション役員一覧">
<caption>役員一覧</caption>
<colgroup id="position"></colgroup>
<colgroup id="name"></colgroup>
<colgroup id="Introduce"></colgroup>
<thead>
<tr>
<th scope="col">役職 / 所属</th>
<th scope="col">氏名</th>
<th scope="col">簡単な自己紹介</th>
</tr>
</thead>
<tbody>
<tr>
<td>代表取締役</td>
<td>山田美子</td>
<td>32歳、主婦業と社長業の両立がんばっています。</td>
</tr>
・・・・・中略・・・・・
<tr>
<td>取締役</td>
<td>水野隆</td>
<td>CTO兼任です。</td>
</tr>
</tbody>
</table>
このデザインの場合、テーブルセルの境界線が重なり合わないため、CSSでborder-collapseプロパティを設定し、値を「separate」とする。
さらにtable要素にはテーブル全体の背景となるグラデーション画像を、th要素には濃いブルーのグラデーション画像を指定する。拡大画像をみると、セルボーダーの左側と上側に明るい色、右側と下側に濃い色を指定することで立体感を出している。
border-spacingプロパティはIE6/7では適用されない為、このデザインを忠実に実現すること優先する場合は、XHTMLのtable要素にcellspacing属性を「0」と指定することでこの問題が回避できる。
(<table cellspacing="0">)。ただし、cellspacing属性は見た目をコントロールする属性なので指定するのは望ましくないが、あくまでもIE6/7の問題を回避するためと考えて指定しておく。
CSS
table, th, td {
margin: 0;
padding: 0;
border-collapse: separate;
border: none;
border-spacing: 0; /* IE 6/7は未対応 */
}
table {
width: 500px;
border: 1px solid #eeeeee;
font-family: sans-serif;
background: #d9e7f6 url(bg-png) repeat-x bottom;
}
caption {
margin-bottom: 10px;
padding-left: 10px;
padding-bottom: 2px;
border-left: 6px solid #307bcf;
line-height: 1.8;
font-weight: bold;
text-align: left;
}
th {
padding: 0.8em 0.5em;
border-color: #629cdd #8db7e6 #629cdd #eeeeee; /* 立体的に見せる */
border-style: solid;
border-width: 1px;
color: #ffffff;
background: #629cdd url(th.png) repeat-x;
font-size: 100%;
text-align: left;
}
td {
padding: 0.8em 0.5em;
border-style: solid;
border-width: 1px;
border-color: #ffffff #81b0e4 #ffffff; /* 立体的に見せる */
font-size: 100%;
}
#position {
width: 100px;
}
#name {
width: 80px;
}
●列の一部をハイライト表示するテーブル
テーブルの列の一部をハイライト表示するには、列グループとしてマークアップしたcolgroup要素に対して背景を指定。
![]() |
| プレミアムプランのみハイライトされた料金プラン |
ただし、これだけではプレミアム列の角丸を実現できない。あらかしめスライスした角丸上端用の画像を「プレミアム」というテキストが入ったth要素に背景として指定し、角丸下端用の画像を列の最後のセルの背景として指定。
XHTML
<table summary="料金プラン">
<caption>サービス料金プラン</caption>
<col span="1" id="tablehead" />
<col span="1" id="plana" />
<col span="1" id="planb" />
<col span="1" id="planc" />
<col span="1" id="premium" />
<thead>
<tr>
<th scope="col">項目</th><th scope="col">プランA</th><th scope="col">プラン</th>
<th scope="col>プランC</th><th scope="col" class="top">プレミアム</th>
</tr>
</thead>
<tbody>
<tr>
<th class="spec">容量</th>
<td>1GB</td><td>2GB</td><td>3GB</td><td>無制限</td>
</tr>
・・・・中略・・・・
<tr>
<th class="spec">サブドメイン</th>
<td>1つ</td><td>2つ</td><td>3つ</td><td class="bottom">無制限</td>
</tr>
</tbody>
</table>
CSSでは「#premium」に対してオレンジ色の背景を指定。
CSS
・・・・中略・・・・
#premium {
background: #f90; /* プレミアム列にオレンジ色の背景を指定 */
}
th.top {
width: 157px;
border: none;
background: url(top.png) no-repeat left top;
/* プレミアム列の上端に角丸上端背景画像 */
}
td.bottom {
background: url(bottom.png) no-repeat left bottom;
/* プレミアム列の下端に角丸下端背景画像 */
}
th.spec {
background: none;
border: none;
}
colを使ったりするテーブルはまだまだ理解ができにくい。。なにか実際に作ってみないとわかりにくいような気がする。
今日はここまで。
2011年10月10日月曜日
三十一日目!(番外編その2)
ブログ更新久しぶりです。
先週1週間は実際にクライアントさんから依頼を受けて作成しているHPのお手伝いをする機会を頂きまして、やっておりました。
そのHP自体は、ベースがかなり古くからあって更新やリニューアルを重ねているものだったので、このブログで勉強している「XHTML」や「CSS」とは少し違ったりもしたんですが、先週の実務作業のテーマとしては、
「Dreamweaver」「Fireworks」などのWeb作成ソフトになれよう!
という感じでした。
とはいえ、少し前のブログでも書いていたと思いますが、現在私が職場で使用しているPCはスペックも高くなく、上記の様な有料(結構高額)なソフトなど入っていませんので、htmlやcssを書くときは、テキストエディタで、画像はGinp2やペイントでやってました。
しかし、ほんとベタに「現代の技術はすごい!」とか思ったんですが、本社にWeb制作に欠かせないソフトが一通り揃った高性能なPCがあるのですが、それを離れた場所から遠隔で使用できるいう!ソフトはもちろん、性能もそのままなんですね。まったくびっくりです。
まずはDreamweaver、まだまだ使いこなせていないのですが、かなり便利だと思います。とにかく今までのテキストエディタのみで作成していくのが大変すぎだった。。というのもあるかもしれないですが、htmlソース、cssソース、実際のデザイン、ブラウザ表示などが簡単に確認できるので、それだけでもすごく便利でした。ソースなども途中まで入力したら、アシスト的に候補になりそうなものが、出てきたり、この間ブログで勉強していた「ロールオーバー」なんかも簡単に作成できたりするようです。
そしてFTPとか?(実はこのあたりまだちゃんと把握できていない・・)と繋がっているようで、既にUPされているHPからファイルを落としてきて、変更したり、追加したりして、またすぐにUPする作業が簡単にできました。
ただ思ったのが、最初からhtmlやcssのことを勉強するときにこのソフトを使わなくてよかったと思います。ある程度htmlやcssの知識を身につけてから使うソフトで、制作の効率や速度UPの手助けをしてくれるという感じ。「全くの初心者でもこれさえあればHP作成が簡単!」ではないとは思います。
Fireworksについてはこっちも全然使いこなせてないです。今回の作業ではサイズ変更と、画像の明るさなどの調節くらいしかやってないのでまだまだですね。
検索してみるとFireworksの使い方やコツなんかのブログはかなりたくさんあったので、そういうのを見ながら勉強していきたいと思います。
これでかなりWeb制作の環境は整ってきたので、ステップアップしていくために更に勉強を進めていきたいと思います。
今日はここまで。
先週1週間は実際にクライアントさんから依頼を受けて作成しているHPのお手伝いをする機会を頂きまして、やっておりました。
そのHP自体は、ベースがかなり古くからあって更新やリニューアルを重ねているものだったので、このブログで勉強している「XHTML」や「CSS」とは少し違ったりもしたんですが、先週の実務作業のテーマとしては、
「Dreamweaver」「Fireworks」などのWeb作成ソフトになれよう!
という感じでした。
とはいえ、少し前のブログでも書いていたと思いますが、現在私が職場で使用しているPCはスペックも高くなく、上記の様な有料(結構高額)なソフトなど入っていませんので、htmlやcssを書くときは、テキストエディタで、画像はGinp2やペイントでやってました。
しかし、ほんとベタに「現代の技術はすごい!」とか思ったんですが、本社にWeb制作に欠かせないソフトが一通り揃った高性能なPCがあるのですが、それを離れた場所から遠隔で使用できるいう!ソフトはもちろん、性能もそのままなんですね。まったくびっくりです。
まずはDreamweaver、まだまだ使いこなせていないのですが、かなり便利だと思います。とにかく今までのテキストエディタのみで作成していくのが大変すぎだった。。というのもあるかもしれないですが、htmlソース、cssソース、実際のデザイン、ブラウザ表示などが簡単に確認できるので、それだけでもすごく便利でした。ソースなども途中まで入力したら、アシスト的に候補になりそうなものが、出てきたり、この間ブログで勉強していた「ロールオーバー」なんかも簡単に作成できたりするようです。
そしてFTPとか?(実はこのあたりまだちゃんと把握できていない・・)と繋がっているようで、既にUPされているHPからファイルを落としてきて、変更したり、追加したりして、またすぐにUPする作業が簡単にできました。
ただ思ったのが、最初からhtmlやcssのことを勉強するときにこのソフトを使わなくてよかったと思います。ある程度htmlやcssの知識を身につけてから使うソフトで、制作の効率や速度UPの手助けをしてくれるという感じ。「全くの初心者でもこれさえあればHP作成が簡単!」ではないとは思います。
Fireworksについてはこっちも全然使いこなせてないです。今回の作業ではサイズ変更と、画像の明るさなどの調節くらいしかやってないのでまだまだですね。
検索してみるとFireworksの使い方やコツなんかのブログはかなりたくさんあったので、そういうのを見ながら勉強していきたいと思います。
これでかなりWeb制作の環境は整ってきたので、ステップアップしていくために更に勉強を進めていきたいと思います。
今日はここまで。
2011年9月28日水曜日
三十日目!(~ロールオーバー続き)
昨日の続き進めます。
次のようにグローバルナビゲーションを定義したXHTMLに、さまざまなテクニックでロールオーバー効果を設定していく。
XHTML
<ul id="nav">
<li id="nav-top" class="current"><a href="/">トップページ</a></li>
<li id="nav-service"><a href="/service/">サービス内容</a></li>
<li id="nav-workflow"><a href="/workflow/">ご利用の流れ</a></li>
<li id="nav-price"><a href="/price/"料金表</a></li>
<li id="nav-estimate"><a href="/estimate/">自動見積</a></li>
<li id="nav-faq"><a href="/faq/">よくあるご質問</a></li>
</ul>
●「テキストのみ」または「テキスト+background」で実現
「テキスト」のみではサンプルのようなデザインは実現できない。テキストをCSSでそれっぽくスタイリングしたり、backgroundプロパティで背景画像を指定することもできますが、デザインの完全再現はムリといえる。
●「テキスト+text-indent+background」で実現(画像置換)
a要素にテキストを含め、背景画像を指定しただけでは、背景画像の上にテキストが重なって表示されてしまう。テキストを非表示化する方法のひとつが、text-indentプロパティを利用すること。
たとえば、「text-indent: -9999px;」と指定する。
●li要素を横並びにする
サンプルではli要素に「float:left;」と指定することで、横並びにしている。「display:inline;」を使うこともできるが、その場合、行内に余白が確保されてしまうため、縦方向のmarginやpaddingを指定しても思い通りの表示ができない。
シンプルにテキストを横並びにするのであれば「display:inline;」を、グラフィカルで幅固定されたナビゲーションを横並びにするのであれば、「float:left;」を利用するというように適宜使い分ける。
●クリッカブル領域のアウトライン
text-indentプロパティをマイナス値で指定することで、a要素のクリッカブル領域のアウトライン(点線)がはみ出して表示されるブラウザがある。
これを回避するために「overflow:hidden;」と指定する。「outline:none;」ではクリッカブル領域を認識しづらくなる弊害があるため、「overflow: hidden;」のほうがよい方法である。
CSS
/* ナビゲーション全体のスタイリング */
ul#nav, ul#nav li, ul#nav li a {
margin: 0;
padding: 0;
display: block;
height: 28px;
}
ul#nav {
background: url(bg.png) repeat-x; /* 背景画像を横方向にリピート */
}
/* ナビゲーション項目に共通のスタイリング */
ul#nav li {
float: left; /* 項目を横並びにする */
width: 100px; /* 項目に含めた画像それぞれの幅は100px */
}
ul#nav li a {
overflow: hidden; /* クリッカブル領域の外にはみ出してしまうアウトライ ンを隠す */
text-indent: -100000em; /* テキストを画面左側に追いやって見えなくする(オフレット) */
}
/* ナビゲーション項目それぞれのスタイリング */
ul#nav li#nav-top {
background: url(hover/top.png) no-repeat;
}
ul#nav li#nav-top a {
background: url(top.png) no-repeat;
}
・・・(中略)・・・
ul#nav li#nav-faq {
width: 101px;
background: url(hover/faq.png) no-repeat;
}
ul#nav li a:hover,
ul#nav li.current a {
background-image: none !important; /* ロールオーバー時に項目それぞれの背景画像を隠す */
}
次に、CSSだけでロールオーバー効果をどのように実現するか考えてみる。親要素のul要素にこのナビゲーション全体のリピート背景を指定、子要素のli要素それぞれにロールオーバー後の背景を指定、孫要素のa要素それぞれにロールオーバー前の背景を指定し、a要素の「:hover」(ロールオーバー時)だけ背景をなくすことで、li要素の背景が出現する仕組みでロールオーバーを実現している。
なお、現在表示しているページやカテゴリーに該当するli要素には「class="current"」と指定してはじめから背景をなくし、ロールオーバー後の背景が表示されるようにしている。
●CSS Sprites
このサンプルでは、リンクひとつひとつに対してそれぞれ単独の背景画像をしていしているが、画像をひとまとめにしてbackground-positionプロパティを使って位置指定する方法もある。
画像ファイルのリクエスト数を減らせる為、アクセス数の多い検索サイトやWebサービスなどでしばしば利用されているテクニックで、「CSS Sprites」と呼ばれている。
●「テキスト+display:none+background」で実現(画像置換)
text-indentプロパティを利用してテキストを非表示化するのではなく、「display:none;」で非表示化する方法もある。ただし、次のようにa要素のなかにspan要素を加えなければならない。
XHTML
<ul id="nav">
<li id="nav-top" class="current"><a href="/"><span>トップページ</span></a></li>
<li id="nav-service"><a href="/service/"><span>サービス内容</span></a></li>
<li id="nav-workflow"><a href="/workflow/"><span>ご利用の流れ</span></a></li>
<li id="nav-price"><a href="/price/"><span>料金表</span></a></li>
<li id="nav-estimate"><a href="/estimate/"><span>自動見積</span></a></li>
<li id="nav-faq"><a href="/faq/"><span>よくある質問</span></a></li>
</ul>
CSSはいたってシンプルで、span要素に対して「display:none;」と指定すれば非表示化される。
CSS
ul#nav li a span {
display: none; /* テキストを非表示にする */
}
ただし、音声ブラウザのなかには「display: none;」と指定された内容を読み上げないものがあり、text-indentプロパティを利用する方法に比べてアクセシビリティが低くなる。また構造とは無関係にspan要素を使う点も好ましくない。
●画像置換とSEOの関係
img要素を使わずに、CSSの「画像置換」というテクニックを利用する動機には、デザイン変更時にCSSだけを修正すれば済むという「メンテナンス性の向上」のほか、「SEO」もある。検索サービスのなかにはalt属性値を収集対象に含めないものがあるというわれており、(また、クローラーの挙動やアルゴリズムが変更される可能性があるため)、alt属性値よりも普通のテキストのほうが確実だから。
一方、検索サービス各社は、ガイドラインで「隠しテキストや隠しリンクは使用しないこと」としているため、違反するサイトはスパムと見なされ、大幅に検索順位が下がったり、検索結果に表示されなくなる(いわゆる「SEOスパムサイト」と判断されてしまう)恐れがある。Googleの「ウェブマスター向けガイドライン」を参照のこと。
ただし、Googleは「画像置換が視覚的なユーザーエクスペリエンスを改善するためであれば、スパムになると心配する必要はない」と述べているため、あからさまにスパム目的で無い限り問題はないと考えられる。
●「img要素+JavaScript」で実現
CSSの画像転換を利用したロールオーバーと異なり、従来通りimg要素を埋め込む方法は、CSSオン・画像表示オフ環境ではalt属性値が表示されるため、そこにどのような画像が埋め込まれているかユーザーに伝えることができる。デザイン変更時にすべてのXHTMLを修正する手間はありますが、どのような環境でも対応できる安全かつ確実な方法。
ただし、img要素だけではロールオーバーは実現できないので、専用のJavaScriptを用意したり、jQueryなどのJavaScriptライブラリを利用する。
なお、次のようにJavaScriptのイベントハンドラをimg要素に直接指定し、ロールオーバーを実現することもできるが、構造のなかに振る舞いの指定が含まれることになってしまうため、JavaScriptの外部ファイルから実行させるようがよい点に注意。
<img src="images/nav-top.gif" alt="トップページ"
onmouseover="this.src='images/nav-top_on.gif'"
onmouseout="this.src='images/nav-top.gif'"/>
ロールオーバーはHP作成となるとほぼ必須に近いテクニックだと思います。前回作成したHPでもトップページのサイドバーで使用されてましたが、作成した部分ではサイドバーは触れなかったため、まだ実践できてないので実際に試しに作成してみないと。。という感じです。
本日はここまで。
次のようにグローバルナビゲーションを定義したXHTMLに、さまざまなテクニックでロールオーバー効果を設定していく。
XHTML
<ul id="nav">
<li id="nav-top" class="current"><a href="/">トップページ</a></li>
<li id="nav-service"><a href="/service/">サービス内容</a></li>
<li id="nav-workflow"><a href="/workflow/">ご利用の流れ</a></li>
<li id="nav-price"><a href="/price/"料金表</a></li>
<li id="nav-estimate"><a href="/estimate/">自動見積</a></li>
<li id="nav-faq"><a href="/faq/">よくあるご質問</a></li>
</ul>
●「テキストのみ」または「テキスト+background」で実現
「テキスト」のみではサンプルのようなデザインは実現できない。テキストをCSSでそれっぽくスタイリングしたり、backgroundプロパティで背景画像を指定することもできますが、デザインの完全再現はムリといえる。
●「テキスト+text-indent+background」で実現(画像置換)
a要素にテキストを含め、背景画像を指定しただけでは、背景画像の上にテキストが重なって表示されてしまう。テキストを非表示化する方法のひとつが、text-indentプロパティを利用すること。
たとえば、「text-indent: -9999px;」と指定する。
●li要素を横並びにする
サンプルではli要素に「float:left;」と指定することで、横並びにしている。「display:inline;」を使うこともできるが、その場合、行内に余白が確保されてしまうため、縦方向のmarginやpaddingを指定しても思い通りの表示ができない。
シンプルにテキストを横並びにするのであれば「display:inline;」を、グラフィカルで幅固定されたナビゲーションを横並びにするのであれば、「float:left;」を利用するというように適宜使い分ける。
●クリッカブル領域のアウトライン
text-indentプロパティをマイナス値で指定することで、a要素のクリッカブル領域のアウトライン(点線)がはみ出して表示されるブラウザがある。
これを回避するために「overflow:hidden;」と指定する。「outline:none;」ではクリッカブル領域を認識しづらくなる弊害があるため、「overflow: hidden;」のほうがよい方法である。
CSS
/* ナビゲーション全体のスタイリング */
ul#nav, ul#nav li, ul#nav li a {
margin: 0;
padding: 0;
display: block;
height: 28px;
}
ul#nav {
background: url(bg.png) repeat-x; /* 背景画像を横方向にリピート */
}
/* ナビゲーション項目に共通のスタイリング */
ul#nav li {
float: left; /* 項目を横並びにする */
width: 100px; /* 項目に含めた画像それぞれの幅は100px */
}
ul#nav li a {
overflow: hidden; /* クリッカブル領域の外にはみ出してしまうアウトライ ンを隠す */
text-indent: -100000em; /* テキストを画面左側に追いやって見えなくする(オフレット) */
}
/* ナビゲーション項目それぞれのスタイリング */
ul#nav li#nav-top {
background: url(hover/top.png) no-repeat;
}
ul#nav li#nav-top a {
background: url(top.png) no-repeat;
}
・・・(中略)・・・
ul#nav li#nav-faq {
width: 101px;
background: url(hover/faq.png) no-repeat;
}
ul#nav li a:hover,
ul#nav li.current a {
background-image: none !important; /* ロールオーバー時に項目それぞれの背景画像を隠す */
}
次に、CSSだけでロールオーバー効果をどのように実現するか考えてみる。親要素のul要素にこのナビゲーション全体のリピート背景を指定、子要素のli要素それぞれにロールオーバー後の背景を指定、孫要素のa要素それぞれにロールオーバー前の背景を指定し、a要素の「:hover」(ロールオーバー時)だけ背景をなくすことで、li要素の背景が出現する仕組みでロールオーバーを実現している。
なお、現在表示しているページやカテゴリーに該当するli要素には「class="current"」と指定してはじめから背景をなくし、ロールオーバー後の背景が表示されるようにしている。
●CSS Sprites
このサンプルでは、リンクひとつひとつに対してそれぞれ単独の背景画像をしていしているが、画像をひとまとめにしてbackground-positionプロパティを使って位置指定する方法もある。
画像ファイルのリクエスト数を減らせる為、アクセス数の多い検索サイトやWebサービスなどでしばしば利用されているテクニックで、「CSS Sprites」と呼ばれている。
●「テキスト+display:none+background」で実現(画像置換)
text-indentプロパティを利用してテキストを非表示化するのではなく、「display:none;」で非表示化する方法もある。ただし、次のようにa要素のなかにspan要素を加えなければならない。
XHTML
<ul id="nav">
<li id="nav-top" class="current"><a href="/"><span>トップページ</span></a></li>
<li id="nav-service"><a href="/service/"><span>サービス内容</span></a></li>
<li id="nav-workflow"><a href="/workflow/"><span>ご利用の流れ</span></a></li>
<li id="nav-price"><a href="/price/"><span>料金表</span></a></li>
<li id="nav-estimate"><a href="/estimate/"><span>自動見積</span></a></li>
<li id="nav-faq"><a href="/faq/"><span>よくある質問</span></a></li>
</ul>
CSSはいたってシンプルで、span要素に対して「display:none;」と指定すれば非表示化される。
CSS
ul#nav li a span {
display: none; /* テキストを非表示にする */
}
ただし、音声ブラウザのなかには「display: none;」と指定された内容を読み上げないものがあり、text-indentプロパティを利用する方法に比べてアクセシビリティが低くなる。また構造とは無関係にspan要素を使う点も好ましくない。
●画像置換とSEOの関係
img要素を使わずに、CSSの「画像置換」というテクニックを利用する動機には、デザイン変更時にCSSだけを修正すれば済むという「メンテナンス性の向上」のほか、「SEO」もある。検索サービスのなかにはalt属性値を収集対象に含めないものがあるというわれており、(また、クローラーの挙動やアルゴリズムが変更される可能性があるため)、alt属性値よりも普通のテキストのほうが確実だから。
一方、検索サービス各社は、ガイドラインで「隠しテキストや隠しリンクは使用しないこと」としているため、違反するサイトはスパムと見なされ、大幅に検索順位が下がったり、検索結果に表示されなくなる(いわゆる「SEOスパムサイト」と判断されてしまう)恐れがある。Googleの「ウェブマスター向けガイドライン」を参照のこと。
ただし、Googleは「画像置換が視覚的なユーザーエクスペリエンスを改善するためであれば、スパムになると心配する必要はない」と述べているため、あからさまにスパム目的で無い限り問題はないと考えられる。
●「img要素+JavaScript」で実現
CSSの画像転換を利用したロールオーバーと異なり、従来通りimg要素を埋め込む方法は、CSSオン・画像表示オフ環境ではalt属性値が表示されるため、そこにどのような画像が埋め込まれているかユーザーに伝えることができる。デザイン変更時にすべてのXHTMLを修正する手間はありますが、どのような環境でも対応できる安全かつ確実な方法。
ただし、img要素だけではロールオーバーは実現できないので、専用のJavaScriptを用意したり、jQueryなどのJavaScriptライブラリを利用する。
なお、次のようにJavaScriptのイベントハンドラをimg要素に直接指定し、ロールオーバーを実現することもできるが、構造のなかに振る舞いの指定が含まれることになってしまうため、JavaScriptの外部ファイルから実行させるようがよい点に注意。
<img src="images/nav-top.gif" alt="トップページ"
onmouseover="this.src='images/nav-top_on.gif'"
onmouseout="this.src='images/nav-top.gif'"/>
ロールオーバーはHP作成となるとほぼ必須に近いテクニックだと思います。前回作成したHPでもトップページのサイドバーで使用されてましたが、作成した部分ではサイドバーは触れなかったため、まだ実践できてないので実際に試しに作成してみないと。。という感じです。
本日はここまで。
2011年9月27日火曜日
二十九日目!(リスト、ロールオーバー~)
リストとリンクのスタイリング
グローバルナビゲーション、パンくずリスト、リンクリスト、用語集など、よくある事例をもとにリストのスタイリングを学んでいく。リストではさまざまなスタイリングテクニックを利用することができ、CSSの実践力を頭と体に叩き込む絶好のチャンスである。
また、ナビゲーションにしてもパンくずリストにしても、項目のなかに(a要素)を含むケースが多いため、リストとリンクのスタイリングをまとめて取り上げる。
リストやリンクのスタイリングのコツは、XHTMLのブロックレベル要素とインライン要素という「しばり」にとらわれずに表現方法を考えること。たとえばリンク(a要素)はインライン要素だが、「display:block;」でブロックレベル要素のように見せることができるし、背景画像と組み合わせてロールオーバー効果をつけるなど、さまざまなコンテンツに応用できる。
●リンクリストのスタイリング
2カラムでレイアウトしているサイトやブログで、サイドバーに最新記事一覧を配置しているところをよく見かける。
行頭では記事をあらわすアイコンが置いてあり、訪問済みリンクの右端には「訪問済みであること」を示すチェックマークが表示されている。
デザインとしては、すべての項目に同じアイコンを表示させていることもあり、一見「順不同」な(ul要素でマークアップする)リンクリストだが、新しい順序で並んでいることを考えると、次のように順序つきリスト(ol要素)でマークアップするこもできる。
XHTML
<div id="recent-entries" class="section">
<h2><img src="h2.png" alt="最新ブログ記事" /></h2>
<ol>
<li><a href="article1.html">【連動書籍執筆中】 CSS Nite...</a></li>
<li><a href="article2.html">Fireworks デベロッパーに...</a></li>
<li><a href="article3.html">Twitter関連サイト...</a></li>
<li><a href="article4.html">Web Designing 9月号...</a></li>
<li><a href="article5.html">最近のお知らせダイジェスト</a></li>
</ol>
</div>
このXHTMLをもとにCSSを製作していく。まずはスタイルを適用していない状態でXHTMLファイルをブラウザで開いてみる。
●リストの先頭に任意のアイコンを表示
ol要素でマークアップしているため、ブラウザのデフォルトスタイルでは項目の先頭に番号が振られている。これは、ol要素内のliに対して、ブラウザのデフォルトスタイルが「list-style-type: decimal;」(先頭に1,2,3と番号を振る)になっているため。まず「list-style-type:none;」と指定してマーカーを消す。
次に、小さなアイコンをリスト先頭に表示させる。ここではbackgroudプロパティでli要素の背景として指定することで、あたかもリストマーカーが小さくなってアイコンになっているようにする。ひとつだけ表示させるために「no-repeat」、位置を指定するために「0 3px」(左から0、上から3pxの位置)と指定する。最後に、アイコンの表示スペースを確保するために、padding-leftプロパティで「18px」と指定する。
CSS
#recent-entries ol li {
list-style-type: none; /* ブラウザデフォルトのリストマーカーを消す */
backgroud: url(icon.gif) no-repeat 0 3px; /* アイコン画像と表示方法、位置の指定 */
padding-left: 18px; /* アイコンの表示スペースを確保 */
}
※list-style-image/list-style-positionの注意点
行頭のアイコンはbackgroundプロパティではなくlist-style-imageプロパティでも指定できる。その場合、行頭アイコンの位置は、list-style-positionプロパティで指定できる。
ただし、list-style-positionプロパティでは、リストマーカーを内容の外側(outside)と内側(inside)のどちらかに表示するかしか指定がないため、細かな位置指定はできない。またli要素に「display: inline;」と指定してインライン化した(横に並べた)場合、ほとんどのブラウザでリストマーカーを自動的に消してしまう為、backgroundプロパティを利用するしかない。したがって、デザインの再現性やブラウザの挙動を考えると、リストマーカーを任意の画像にする場合は、backgroundプロパティで実現したほうがよい。
●リンクの末尾に任意のアイコンを表示させる
li要素の中のa要素について、訪問済みであることを示すための「ひと工夫」をする。訪問済みのスタイルは:visited擬似クラスで指定する。基本的なスタイルはリストの先頭にアイコンを表示させることと変わらないが、訪問済みリンクのみ末尾に「check.gif」(訪問済みを示すチェックマーク)が表示されるように設定する。
#recent-entries ol li a:visited {
padding-right: 10px /* アイコンの表示スペースを確保 */
color: #222266; /*訪問済みリンクの文字色 */
background: url(check.png) no-repeat right 5px; /* アイコン画像と表示方法、位置の指定 */
}
なお、a要素に指定する擬似クラスは、「:link」「:visited」「:hover」「:focus」「active」の順で指定する点に注意。
リンクリストスタイリング実現に必要なCSS
#recent-entries {
width: 180px;
background: #dce4b1 url(recent_bottom.gif) no-repeat left bottom;
}
#recent-entries ol {
margin: 0;
padding: 10px 0 10px 0; /* ボックス内のol要素の位置を調整 */
}
#recent-entries ol li {
margin: 0 12px 7px 15px; /* liリストの位置、間隔を調整 */
list-style-type: none; /* ブラウザデフォルトのリストマーカーを消す */
background: url(icon.gif) no-repeat 0 3px; /* アイコン画像と表示方法、位置の指定 */
padding-left: 18px; /* アイコンの表示スペースを確保 */
}
#recent-entries ol li a {
color: #ffffff; /* リンク文字色 */
}
#recent-entries ol li a:visited {
padding-right: 10px; /* アイコンの表示スペースを確保 */
color: #222266; /* 訪問済みリンクの文字色 */
background: url(check.png) no-repeat right 5px /* アイコン画像と表示方法、位置の指定 */
}
#recent-entries ol li a:hover,
#recent-entries ol li a:focus,
#recent-entries ol li a:active, {
color: #ffffff; /* カーソルオン、フォーカス、アクティブ時の文字色 */
}
●ナビゲーションのスタイリングと画像置換
ロールオーバーで背景色や背景画像が入れ替わる、という視覚効果を設定したナビゲーションは、ユーザーに対してカーソルアクションを明確に伝えることができ、ユーザビリティの向上に効果がある。一般的なグローバルナビゲーションを例に、「画像置換」というテクニックを利用したロールオーバー効果の実現方法を解説。
グローバルナビゲーションの例
ロールオーバー効果を実現するにはさまざまな方法があり、それぞれにメリットとデメリットがある。サイトの規模や更新のしやすさ、音声読み上げを含むユーザーの利用環境を考慮しながら、メリットとデメリットを理解した上で最適な方法を選ぶ。
中途半端ですが今日はここまで。
<li><a href="article3.html">Twitter関連サイト...</a></li>
<li><a href="article4.html">Web Designing 9月号...</a></li>
<li><a href="article5.html">最近のお知らせダイジェスト</a></li>
</ol>
</div>
このXHTMLをもとにCSSを製作していく。まずはスタイルを適用していない状態でXHTMLファイルをブラウザで開いてみる。
![]() |
| CSSを適用する前に、XHTMLファイルをブラウザで表示させた例 |
●リストの先頭に任意のアイコンを表示
ol要素でマークアップしているため、ブラウザのデフォルトスタイルでは項目の先頭に番号が振られている。これは、ol要素内のliに対して、ブラウザのデフォルトスタイルが「list-style-type: decimal;」(先頭に1,2,3と番号を振る)になっているため。まず「list-style-type:none;」と指定してマーカーを消す。
次に、小さなアイコンをリスト先頭に表示させる。ここではbackgroudプロパティでli要素の背景として指定することで、あたかもリストマーカーが小さくなってアイコンになっているようにする。ひとつだけ表示させるために「no-repeat」、位置を指定するために「0 3px」(左から0、上から3pxの位置)と指定する。最後に、アイコンの表示スペースを確保するために、padding-leftプロパティで「18px」と指定する。
CSS
#recent-entries ol li {
list-style-type: none; /* ブラウザデフォルトのリストマーカーを消す */
backgroud: url(icon.gif) no-repeat 0 3px; /* アイコン画像と表示方法、位置の指定 */
padding-left: 18px; /* アイコンの表示スペースを確保 */
}
※list-style-image/list-style-positionの注意点
行頭のアイコンはbackgroundプロパティではなくlist-style-imageプロパティでも指定できる。その場合、行頭アイコンの位置は、list-style-positionプロパティで指定できる。
ただし、list-style-positionプロパティでは、リストマーカーを内容の外側(outside)と内側(inside)のどちらかに表示するかしか指定がないため、細かな位置指定はできない。またli要素に「display: inline;」と指定してインライン化した(横に並べた)場合、ほとんどのブラウザでリストマーカーを自動的に消してしまう為、backgroundプロパティを利用するしかない。したがって、デザインの再現性やブラウザの挙動を考えると、リストマーカーを任意の画像にする場合は、backgroundプロパティで実現したほうがよい。
●リンクの末尾に任意のアイコンを表示させる
li要素の中のa要素について、訪問済みであることを示すための「ひと工夫」をする。訪問済みのスタイルは:visited擬似クラスで指定する。基本的なスタイルはリストの先頭にアイコンを表示させることと変わらないが、訪問済みリンクのみ末尾に「check.gif」(訪問済みを示すチェックマーク)が表示されるように設定する。
#recent-entries ol li a:visited {
padding-right: 10px /* アイコンの表示スペースを確保 */
color: #222266; /*訪問済みリンクの文字色 */
background: url(check.png) no-repeat right 5px; /* アイコン画像と表示方法、位置の指定 */
}
なお、a要素に指定する擬似クラスは、「:link」「:visited」「:hover」「:focus」「active」の順で指定する点に注意。
リンクリストスタイリング実現に必要なCSS
#recent-entries {
width: 180px;
background: #dce4b1 url(recent_bottom.gif) no-repeat left bottom;
}
#recent-entries ol {
margin: 0;
padding: 10px 0 10px 0; /* ボックス内のol要素の位置を調整 */
}
#recent-entries ol li {
margin: 0 12px 7px 15px; /* liリストの位置、間隔を調整 */
list-style-type: none; /* ブラウザデフォルトのリストマーカーを消す */
background: url(icon.gif) no-repeat 0 3px; /* アイコン画像と表示方法、位置の指定 */
padding-left: 18px; /* アイコンの表示スペースを確保 */
}
#recent-entries ol li a {
color: #ffffff; /* リンク文字色 */
}
#recent-entries ol li a:visited {
padding-right: 10px; /* アイコンの表示スペースを確保 */
color: #222266; /* 訪問済みリンクの文字色 */
background: url(check.png) no-repeat right 5px /* アイコン画像と表示方法、位置の指定 */
}
#recent-entries ol li a:hover,
#recent-entries ol li a:focus,
#recent-entries ol li a:active, {
color: #ffffff; /* カーソルオン、フォーカス、アクティブ時の文字色 */
}
●ナビゲーションのスタイリングと画像置換
ロールオーバーで背景色や背景画像が入れ替わる、という視覚効果を設定したナビゲーションは、ユーザーに対してカーソルアクションを明確に伝えることができ、ユーザビリティの向上に効果がある。一般的なグローバルナビゲーションを例に、「画像置換」というテクニックを利用したロールオーバー効果の実現方法を解説。
グローバルナビゲーションの例
![]() |
| 練習もかねてGINP2で例画像作成 |
ロールオーバー効果を実現するにはさまざまな方法があり、それぞれにメリットとデメリットがある。サイトの規模や更新のしやすさ、音声読み上げを含むユーザーの利用環境を考慮しながら、メリットとデメリットを理解した上で最適な方法を選ぶ。
中途半端ですが今日はここまで。
2011年9月26日月曜日
二十八日目!(フォントとテキストのスタイリング)
連休中は、GINP2をさわって遊んでました。だいぶ前ではありますが、イラストレーターやフォトショップも少しはやったことがあり、レイヤーやペシェ曲線などなんとなくはわかっていたので、少しずつ使い方が分かってきました。
続きすすめていきます。
フォントとテキストのスタイリング
●フォントはユーザー環境に依存
そのフォントが表示されるかどうかはユーザー環境に依存する(ユーザーのパソコンにインストールされていないフォントは別のフォントになってしまう)という条件があるものの、特に欧文フォントはさまざまな種類が最初からOSに入っており、それぞれから文字の表情をいろいろ読み取ることができる。
Webページの本文部分は読みやすさを重視すべきであり、文字が主張しすぎるのは考えものだが、見出しなどで個性的なフォントを効果的に使うことで、画像を使わなくてもかなり豊かな表現ができるようになる。
書体の選択の際には、すべての環境に完璧に対応するのは難しいことをまず認識する。Windows Vistaに入っているフォント、Windows XPに入っているフォント、Mac OS Xに入っているフォント、これら全てのOSに入っているフォント、名称は違うけれど雰囲気の似ているフォントなどを理解したうえで、イメージどおりに書体が選択されるように指定する。
「choco*choco Cafe And Sweets」というロゴを例に、XHTML+CSSだけでスタイリングする。このような表現を実現するには、画像を使うのが一般的だが、あえてチャレンジングなサンプルとして。
このロゴをXHTML+CSSで実現するために、次のような細かなポイントを順番に確認する。
これらのポイントに注意しながら作成したXHTMLとCSS
XHTML
<h1>choco*choco<span>Cafe And Sweets</span></h1>
CSS
h1 {
margin: 0;
padding: 0;
width: 310px;
height: 104px;
color: #663300;
font-size: 40px;
font-weight: bold;
font-family: Verdana, Helvetica, Arial, sans-serif;
text-align: center;
}
h1 span {
margin: 5px auto 0;
display: block;
width: 300px;
line-height: 1.6;
color: #ffffff;
background-color: #663300;
font-size: 20px;
font-weight: normal;
font-variant: small-caps;
letter-spacing: 5px;
}
●希望の書体に近いフォントをあわせて指定する
font-familyプロパティでフォントの種類を指定する際は「Verdana」だけでなく比較的近いフォントを指定しておく。先に書いてあるフォントが優先的に適用され、もしもそのフォントがなければ次に書かれているフォントという順序で適用される。
「Verdana」に雰囲気が似たフォントとして、「Helvetica」はMac OS Xの多くに、「Arial」はWindowsやMac OS Xの多くにインストールされているので、これらも指定しておく。いずれのフォントも入っていない環境のために総称ファミリー(ここではゴシック体を意味する「sans-serif」)を指定しておくことで、より多くの環境に対応させることができる。
h1 { font-family: Verdana, Helvetica, Arial, sans-serif; }
●文字の大きさを調整する
「choco*choco」は「Cafe And Sweets」に比べて文字が大きくなっている。フォントの大きさはfont-sizeプロパティで指定する。単位をピクセルで指定すれば大きさを忠実に再現できる。
なお、IE6以前では、単位がピクセルで指定されていると、文字サイズを変更してもフォントサイズが変わらないという問題がある。ロゴについてはこれでよしと考えるか、CSSハックでIEに対してのみ、「em」などの相対単位を適用する。
●文字の太さを調整する
「chocochoco」は「Cafe And Sweets」に比べて文字が太くなっている。文字の太さはfont-weightプロパティで指定。font-weightプロパティの値は「normal」「bold」「bolder」「lighter」「100~900」(100刻みの数値)が指定できる。ただし、現在普及しているブラウザでは「100~900」の数値で指定しても100から500は「normal」と同等に、600から900は「bold」と同等になるため、はじめから「normal」か「bold」を選ぶのが現実的。
「bold」を選んだ場合、そのフォントファミリーにbold用の書体が含まれている場合、その書体でレンダリングされる。たとえば、「ヒラギノ角ゴ Pro」ファミリーで表示されている要素に対し「font-weight: normal」と指定した場合は「ヒラギノ角ゴ Pro W6」で表示される。
ただし、ブラウザの種類やバージョンによって、この機能をサポートしていない場合がある。その場合は「normal」で表示される書体を単純に太らせたかたちで表示される。
●文字間隔を調整する
「Cafe And Sweets」の文字間隔を多少広めにするためにはletter-spacingプロパティを利用する。このロゴのように幅や高さを固定している場合にはピクセルで指定する。本文部分で文字の大きさに合わせて読みやすさを確保する目的で使う、letter-spacingプロパティには、ピクセルではなく「em」で指定し、文字サイズとのバランスをもとに間隔が設定されるようにする。
●スモールキャップスの設定
「Cafe And Sweets」単語の先頭が通常の大文字、他の文字は小さめの大文字となっている。このような表現を「スモールキャップス」といい、font-variantプロパティで「small-caps」と指定することで実現できる。
今日はここまで。
続きすすめていきます。
フォントとテキストのスタイリング
●フォントはユーザー環境に依存
そのフォントが表示されるかどうかはユーザー環境に依存する(ユーザーのパソコンにインストールされていないフォントは別のフォントになってしまう)という条件があるものの、特に欧文フォントはさまざまな種類が最初からOSに入っており、それぞれから文字の表情をいろいろ読み取ることができる。
Webページの本文部分は読みやすさを重視すべきであり、文字が主張しすぎるのは考えものだが、見出しなどで個性的なフォントを効果的に使うことで、画像を使わなくてもかなり豊かな表現ができるようになる。
書体の選択の際には、すべての環境に完璧に対応するのは難しいことをまず認識する。Windows Vistaに入っているフォント、Windows XPに入っているフォント、Mac OS Xに入っているフォント、これら全てのOSに入っているフォント、名称は違うけれど雰囲気の似ているフォントなどを理解したうえで、イメージどおりに書体が選択されるように指定する。
「choco*choco Cafe And Sweets」というロゴを例に、XHTML+CSSだけでスタイリングする。このような表現を実現するには、画像を使うのが一般的だが、あえてチャレンジングなサンプルとして。
このロゴをXHTML+CSSで実現するために、次のような細かなポイントを順番に確認する。
| 書体 | Verdana |
|---|---|
| 色 | 「choco*choco」の文字色は#663300、「Cafe And Sweets」の文字色は#ffffff |
| 文字同士の間隔 | 「Cafe And Sweets」の間隔が広めになっている |
| 大文字・小文字 | 「choco*choco」はすべて小文字、「Cafe And Sweets」はスモールキャップスの大文字 |
| 背景色 | 「choco*choco」の背景色は#ffffff、「Cafe And Sweets」の背景色は#663300 |
| 上下左右のマージンとパディング | 画像を拡大して値をどうするか確認 |
これらのポイントに注意しながら作成したXHTMLとCSS
XHTML
<h1>choco*choco<span>Cafe And Sweets</span></h1>
CSS
h1 {
margin: 0;
padding: 0;
width: 310px;
height: 104px;
color: #663300;
font-size: 40px;
font-weight: bold;
font-family: Verdana, Helvetica, Arial, sans-serif;
text-align: center;
}
h1 span {
margin: 5px auto 0;
display: block;
width: 300px;
line-height: 1.6;
color: #ffffff;
background-color: #663300;
font-size: 20px;
font-weight: normal;
font-variant: small-caps;
letter-spacing: 5px;
}
●希望の書体に近いフォントをあわせて指定する
font-familyプロパティでフォントの種類を指定する際は「Verdana」だけでなく比較的近いフォントを指定しておく。先に書いてあるフォントが優先的に適用され、もしもそのフォントがなければ次に書かれているフォントという順序で適用される。
「Verdana」に雰囲気が似たフォントとして、「Helvetica」はMac OS Xの多くに、「Arial」はWindowsやMac OS Xの多くにインストールされているので、これらも指定しておく。いずれのフォントも入っていない環境のために総称ファミリー(ここではゴシック体を意味する「sans-serif」)を指定しておくことで、より多くの環境に対応させることができる。
h1 { font-family: Verdana, Helvetica, Arial, sans-serif; }
●文字の大きさを調整する
「choco*choco」は「Cafe And Sweets」に比べて文字が大きくなっている。フォントの大きさはfont-sizeプロパティで指定する。単位をピクセルで指定すれば大きさを忠実に再現できる。
なお、IE6以前では、単位がピクセルで指定されていると、文字サイズを変更してもフォントサイズが変わらないという問題がある。ロゴについてはこれでよしと考えるか、CSSハックでIEに対してのみ、「em」などの相対単位を適用する。
●文字の太さを調整する
「chocochoco」は「Cafe And Sweets」に比べて文字が太くなっている。文字の太さはfont-weightプロパティで指定。font-weightプロパティの値は「normal」「bold」「bolder」「lighter」「100~900」(100刻みの数値)が指定できる。ただし、現在普及しているブラウザでは「100~900」の数値で指定しても100から500は「normal」と同等に、600から900は「bold」と同等になるため、はじめから「normal」か「bold」を選ぶのが現実的。
「bold」を選んだ場合、そのフォントファミリーにbold用の書体が含まれている場合、その書体でレンダリングされる。たとえば、「ヒラギノ角ゴ Pro」ファミリーで表示されている要素に対し「font-weight: normal」と指定した場合は「ヒラギノ角ゴ Pro W6」で表示される。
ただし、ブラウザの種類やバージョンによって、この機能をサポートしていない場合がある。その場合は「normal」で表示される書体を単純に太らせたかたちで表示される。
●文字間隔を調整する
「Cafe And Sweets」の文字間隔を多少広めにするためにはletter-spacingプロパティを利用する。このロゴのように幅や高さを固定している場合にはピクセルで指定する。本文部分で文字の大きさに合わせて読みやすさを確保する目的で使う、letter-spacingプロパティには、ピクセルではなく「em」で指定し、文字サイズとのバランスをもとに間隔が設定されるようにする。
●スモールキャップスの設定
「Cafe And Sweets」単語の先頭が通常の大文字、他の文字は小さめの大文字となっている。このような表現を「スモールキャップス」といい、font-variantプロパティで「small-caps」と指定することで実現できる。
今日はここまで。
2011年9月22日木曜日
二十七日目!(フォームパーツのマークアップ)
続きいきます。
●フォームパーツのマークアップ
fieldset要素と、legend要素を利用してグループ化することができる。フォームの入力項目を内容的・段階的にグループ化できる場合などに利用。
fieldset要素でグループ化する部品の範囲を示し、legend要素でグループのタイトルを示す。この例では、fieldset要素の背景色を設定することで、グループであることがいっそう際立つようにスタイリングしている。これらの要素を使わなくてもフォームとしては十分機能するが、グループ化した方がユーザーが利用しやすかったり、構造的に必要な場合は、このようにマークアップを行う。
●フォームのユーザービリティ向上のためのlabel要素
label要素はフォームのユーザビリティを向上させるのに欠かせない要素である。たとえばラジオボタンやチェックボックスはブラウザで小さく表示され、マウスでクリックする領域が狭いため、使う人によってはたいへん操作しづらい。label要素を使えばテキストをクリックしてもパーツが反応するため、ユーザビリティが大幅に向上する。テキスト入力欄など比較的クリックできる範囲が大きいパーツも、ラベルが設定されていればパーツとラベルのどちらをクリックしてもきちんと反応するので、ユーザーの直観的な操作を支援することができる。
フォームパーツにラベルを設定する方法は少しややこしいので、順序立て手作業することが大切。
1、ラベルにするテキストを書く(たとえば「お名前」)
2、そのテキストをlabel要素でマークアップする(<label>お名前</label>)
3、フォームパーツにIDを名をつける(<input id="name" .../>)
4、label要素にfor属性をつけ、パーツと同じID名を値として指定する(<label> for="name">お名前</label>)
<input type="radio" name="sex" id="man" /><label for="man">男性</label>
<input type="radio" name="sex" id="woman" /><label for="woman">女性</label>
●フォームのマークアップの工夫
フォームの中身のマークアップにはさまざまな方法がある。p要素を積み重ねてつくるのがもっともシンプルだが、「ラベルテキスト」と「フォームパーツ」が対になっているケースが多いことから、dl要素やtable要素でまとめる方法がよく利用される。
でも解説の通り、どれもマークアップとして間違いではないため、ターゲットユーザーの好みや対応デバイスを意識したマークアップを心がけることが大切。
フォームの内容をdl要素でマークアップした例
<form action=".../cgi-bin/qu" method="post">
<fieldset>
<legend>お客様の情報</legend>
<dl id="customer">
<dt><label for="name">お名前</label></dt>
<dd><input type="text" id="name" value="" /></dd>
<dt>性別</dt>
<dd>
<input type="radio" name="sex" id="man" /><label for="man">男性</label>
<input type="radio" name="sex" id="woman" /><label fot="woman">女性</label>
</dd>
</dl>
</fieldset>
<fieldset>
<legend>評価</legend>
<dl id="rating">
<dt>作品の良かったところをお聞かせください(複数回答可)</dt>
<dd>
<ul>
<!-- 以下のリスト内のlabel要素では、暗示的なマークアップ -->
<li><label><input type"checkbox" value="all" />全体的によかった</label></li>
・・・・中略・・・・
<li><label><input type"checkbox" value="other" />その他</label></li>
</ul>
</dd>
<dt><label for="freetext">ご意見などがありましたら、お願いいたします</label></dt>
<dd><input type="text" size="50" id="freetext" /></dd>
</dl>
</fieldset>
<div><input type="submit" value="入力内容を確認する" /></div>
</form>
少し短いですがきりがいいので、今日はここまで。
●フォームパーツのマークアップ
fieldset要素と、legend要素を利用してグループ化することができる。フォームの入力項目を内容的・段階的にグループ化できる場合などに利用。
fieldset要素でグループ化する部品の範囲を示し、legend要素でグループのタイトルを示す。この例では、fieldset要素の背景色を設定することで、グループであることがいっそう際立つようにスタイリングしている。これらの要素を使わなくてもフォームとしては十分機能するが、グループ化した方がユーザーが利用しやすかったり、構造的に必要な場合は、このようにマークアップを行う。
●フォームのユーザービリティ向上のためのlabel要素
label要素はフォームのユーザビリティを向上させるのに欠かせない要素である。たとえばラジオボタンやチェックボックスはブラウザで小さく表示され、マウスでクリックする領域が狭いため、使う人によってはたいへん操作しづらい。label要素を使えばテキストをクリックしてもパーツが反応するため、ユーザビリティが大幅に向上する。テキスト入力欄など比較的クリックできる範囲が大きいパーツも、ラベルが設定されていればパーツとラベルのどちらをクリックしてもきちんと反応するので、ユーザーの直観的な操作を支援することができる。
フォームパーツにラベルを設定する方法は少しややこしいので、順序立て手作業することが大切。
1、ラベルにするテキストを書く(たとえば「お名前」)
2、そのテキストをlabel要素でマークアップする(<label>お名前</label>)
3、フォームパーツにIDを名をつける(<input id="name" .../>)
4、label要素にfor属性をつけ、パーツと同じID名を値として指定する(<label> for="name">お名前</label>)
<input type="radio" name="sex" id="man" /><label for="man">男性</label>
<input type="radio" name="sex" id="woman" /><label for="woman">女性</label>
●フォームのマークアップの工夫
フォームの中身のマークアップにはさまざまな方法がある。p要素を積み重ねてつくるのがもっともシンプルだが、「ラベルテキスト」と「フォームパーツ」が対になっているケースが多いことから、dl要素やtable要素でまとめる方法がよく利用される。
でも解説の通り、どれもマークアップとして間違いではないため、ターゲットユーザーの好みや対応デバイスを意識したマークアップを心がけることが大切。
フォームの内容をdl要素でマークアップした例
<form action=".../cgi-bin/qu" method="post">
<fieldset>
<legend>お客様の情報</legend>
<dl id="customer">
<dt><label for="name">お名前</label></dt>
<dd><input type="text" id="name" value="" /></dd>
<dt>性別</dt>
<dd>
<input type="radio" name="sex" id="man" /><label for="man">男性</label>
<input type="radio" name="sex" id="woman" /><label fot="woman">女性</label>
</dd>
</dl>
</fieldset>
<fieldset>
<legend>評価</legend>
<dl id="rating">
<dt>作品の良かったところをお聞かせください(複数回答可)</dt>
<dd>
<ul>
<!-- 以下のリスト内のlabel要素では、暗示的なマークアップ -->
<li><label><input type"checkbox" value="all" />全体的によかった</label></li>
・・・・中略・・・・
<li><label><input type"checkbox" value="other" />その他</label></li>
</ul>
</dd>
<dt><label for="freetext">ご意見などがありましたら、お願いいたします</label></dt>
<dd><input type="text" size="50" id="freetext" /></dd>
</dl>
</fieldset>
<div><input type="submit" value="入力内容を確認する" /></div>
</form>
少し短いですがきりがいいので、今日はここまで。
登録:
投稿 (Atom)










