1カラムデザインをもっと柔軟に
サイドバーいらない論では、1カラムのメリットを強調しましたが、その中のはてブコメントで、一段の文字数が短い方が読みやすいから(マルチカラムの方がよい)という意見がありました。
これに対して、私はCSSで最大幅を指定すればいいじゃないと言いましたが、どこか腑に落ちていない点もありました。というのは私が逆に文字数が断然多い方がいいタイプなんですね。
だからmax-widthで最大幅を指定されると、逆に幅が限定されて困るケースがあるんですよ。それにmax-widthで指定された「最適な」最大幅は、あくまで運営者が思っていることで、実際ユーザが最適だと思っているとは限らないんですね。
で、あるならばユーザがCSSを切り替えるように、自分の最適な1行の文字数を決められるのが最適解なんじゃないか、そう思ったんです。
ということで、既にサイト右下の方に実装した通り、1行の文字数と文字サイズをユーザーがスライダーで動的に変更できる仕組みを導入しています。なお、設定された値はCookieに保存していますので、一度設定すれば常時設定した文字数と文字サイズでサイトが表示されるようになります。つまり、サイトのカスタマイズができると言うことです。
やり口としては以下のエントリをかなり参考にしました。というか以下のエントリがなければできていなかったと思います。スクリプト WebFXの作者さんと紹介していたyujiroさん、どうもありがとうございました。
ちなみに今回のスクリプトはこれに以下の機能を追加した物です。
- 値をCookieに保存する
- Cookieが設定されていれば、それをデフォルト値に設定し、幅・サイズ変更を実行する
- max-width / font-size プロパティの最小値・最大値の振れ幅を設定する機能
- max-width / font-size プロパティを変更する単位を設定する機能
なお、このスクリプトは現状ではIE6以下に対応していません(IE7には対応しています)。理由としては
- max-widthプロパティに対応していない
- position: fixedに対応していない
- 幅・サイズ拡大時にボックス幅が内容領域を超えてしまうことがある
ためです。ただ、前2つはjavascriptで同様の機能を実現するfixed.jsやminmax.jsを使えば解決できそうです。
問題なのは1番最後の物で、おそらくIEのバグではないかなと思っているのですが、解決できる方法を探しています。もし、解決法をおわかりの方がいましたら、コメントをお寄せいただければ嬉しいです。
というわけで、現状は以下のブラウザに対応しています。配布物にもIE5,6には出力しないように設定しています。
- Windows Internet Explorer(バージョン7.0以上)
- Mozilla Firefox
- Opera
- Safari for Windows
技術的な話
技術的にはスライダーの変更時にjavascriptで動的に本文*1のスタイルを変える方法をとっています。なので、やろうとすれば文字幅・文字サイズだけではなく、行間や背景色なども変えられるでしょう。
当然ですが、このサイトのマークアップに最適化されていますので、導入される際はCSSのID名などは自分のサイトの物に書き換えてください。
なお、当サイトでのマークアップ図をページ末尾に書いてありますので、よければ参考にしてください。
導入について
では、WordPressへの導入方法について。まず、以下のファイルをダウンロードしてください。
- ダウンロード
- スライダ設定スクリプトセット (v0.1 20070810)
- スライダー表示PHPスクリプト (v0.1 20070811)
- ライセンス
- サイト全体と同じくCreative Commonsライセンス、ただしWebFXスクリプトはApache Software Licese 2.0を引き続き適用
更新履歴は先の記事をご覧下さい
ダウンロード後にファイルを解凍したら、「スライダ設定スクリプトセット」をそのままWordPressのトップフォルダにコピーしてください。その後、お使いのテーマに以下の記述を加えてください。
<link rel="stylesheet" type="text/css" media="screen, handheld" href=" bloginfo('url'); /wp-includes/images/slider/style.css" />
<script type="text/javascript" src=" bloginfo('url'); /wp-includes/js/slider/range.js"></script>
<script type="text/javascript" src=" bloginfo('url'); /wp-includes/js/slider/timer.js"></script>
<script type="text/javascript" src=" bloginfo('url'); /wp-includes/js/slider/slider.js"></script>次にスライダーを動作させるjavascriptを読み込む部分を記述します。まず「スライダー表示PHPスクリプト」をお使いのテーマのフォルダにコピーした後、テーマの</body>の直前に以下の記述を加えてください。
include ("module/make_slider.js.php");そして、そのスライダーを表示する部分を記述します。絶対配置しているので、場所はどこでもいいのですが、body開始タグの直後あたりに以下を記述してください。
include_once ("module/show_slider.inc.php"); 最後にテーマのCSSに以下を記述します。
/* Slider */
.slider{
opacity: 0.6;
}
.slider:hover{
opacity: 1.0;
}
div#slider-1{
position: fixed;
right: 10px;
bottom: 40px;
}
div#slider-2{
position: fixed;
right: 10px;
bottom: 10px;
}
#slider-icon{
position: fixed;
right: 160px;
bottom: 10px;
}
#slider-icon img{
display: block;
}設定は以下のファイルで行います。ここでは最大幅とフォントサイズの単位・振れ幅を設定できます。なお、単位が%以外の際は(つまり基準が100%ではない場合)、基準を設定する必要があるので、必ず入力してください。
// max-width や font-size の単位
define("unit_width", "em");
define("unit_fontsize", "%");
// unit_xxx が "%"以外の場合は基準となる値を設定
define("default_width", "55");
define("default_fontsize", "");
// max-width や font-size の振れ幅
// ex: [最小] 40% <== $range_fontsize(%) ==> 100% <== $range_fontsize(%) ==> 160% [最大]
// (この場合の range_fontsize は 60)
define("range_width", "25");
define("range_fontsize", "60");なお、最大幅やフォントサイズの変更に影響されたくない要素(長くなる傾向にあるソースコードやテーブルなど)があれば、スタイルシートで!important命令付きで個別的に指定してください。
導入方法は以上です。
結びに
というソリューションを提案してみたわけですが、いかがでしょうか > 行間が狭い方が読みやすい派の方
ちなみに、マルチカラムでの導入方法はこの次の記事で書きます。このサイトでは、これからも1カラムの理想的なデザインを模索していくつもりです。
スライダーで動的に本文とサイドバーの比率を変更・保存するスクリプト(2カラム版)にて2カラム版を書きました。 なお、この手のスクリプトにありがちですが、空divなどを2つほど生成しています。strict派な人には気になるかもしれませんが、私はアクセシビリティ確保のためには、現状はある程度このようなイレギュラーなマークアップをすることもやむなしと考えています。むろん、このようなマークアップをすることナシにブラウザ側がユニバーサルにコントロールできることが理想的ではありますが。
- 当スクリプトではdiv#contentの内容。なお、変更時に背景が見えないように親要素に白の背景色を設定しています[戻る]
- キーワード:
この記事はシリーズものの一篇です。ブログのIA研究シリーズのそのほかの記事もよろしければご覧ください
このシリーズ記事のフィード




読者のコメント
7件