jQueryでフォントサイズ切替機能

2007年1月17日

プログラムは「習うより慣れよ」と思っているので、さっそくjQueryを使ってなにか作ってみることにします。簡単に作れそうなもので、かつ実用性があるものが良いだろうと思い、最近色々なところで目にするようになった「フォントスイッチャー」を作ってみました。文字の大きさが切り替えられるアレです。

今回は予めcss側で異なるフォントサイズを指定したクラスを用意しておき、jQueryによって特定のタグのクラスを切り替えます。今回はbody要素にfontL、fontM、fontSというクラスを付与することにします。cssでの指定は以下の通り

プログラムは「習うより慣れよ」と思っているので、さっそくjQueryを使ってなにか作ってみることにします。簡単に作れそうなもので、かつ実用性があるものが良いだろうと思い、最近色々なところで目にするようになった「フォントスイッチャー」を作ってみました。文字の大きさが切り替えられるアレです。

今回は予めcss側で異なるフォントサイズを指定したクラスを用意しておき、jQueryによって特定のタグのクラスを切り替えます。今回はbody要素にfontL、fontM、fontSというクラスを付与することにします。cssでの指定は以下の通り

前段階・準備

body.fontL #ContentsArea{
	font-size:115%;
}
body.fontM #ContentsArea{
	font-size:100%;
}
body.fontS #ContentsArea{
	font-size:80%;
}

私のサイトの場合ContentsAreaというDiv要素で、文章の部分を囲っているので上記のように書いています。CSSの「継承」を用いた方法ですので、個別の要素に絶対指定でフォントを指定している場合は上手く動かないかもしれません。

次ぎにクリックさせる要素ですが、これは普通に<a>タグを用います。jQueryの場合、特定の要素にイベントの付与(クリックとか、マウスオーバー)とかもできるのですが、ここでは普通に下記のようにしました。

<ul>
<li><a href="#" class="sizeL">フォントを大にする</a></li>
<li><a href="#" class="sizeM">フォントを中にする</a></li>
<li><a href="#" class="sizeS">フォントを小にする</a></li>
</ul>

jQueryで要素を指定する

さて、ここまでは全然プログラムのお話ではないので簡単かと思います。次はいよいよjQueryの書き方です。
jQueryの基本は$()です。考え方はCSSに似ています。$()を使って、特定の要素を指定しその後に処理を書くというやりかたです。ここでは<a>というタグのうち、class=sizeLのものだけを取り出したい場合下記のように書きます。

$("a.sizeL")

「a.sizeL」というのはCSSで指定するのと全く同じですね。それもそのはず、jQueryは通常のCSSの指定をサポートしているからです。通常のDOMを指定するためにはgetElementById()などを使いますが、jQueryでは一切使う必要がありません。

さて、この<a>タグがクリックされたときにプログラムを実行したいのでした。それには「クリックされたとき」というイベントを書いてあげる必要があります。

$("a.sizeL").click

上に書いたように.clickだけでOKです。HTMLの<a>にonClickと書かなくても良いのです。つまりJavaScriptとHTMLを分離し、クリーンなHTMLを保ったまま機能を付加できるというわけです。これもjQueryの特徴の一つです。

クリックしたらクラスを付加する

クリックしたら、その後に実行したい処理を書きます。ここではbody要素に新たにクラスを付加します。クラスを付加するには.addClassを使います。最終的には下記のようなコードになります。

$(function(){
  $("a.sizeL").click(function(){
  $("body").addClass("fontL");
  return false;
  });
});

これでとりあえずプログラムが動くようになりました。「フォントを大にする」をクリックすると全体のフォントサイズが大きくなります。さらに、小、中をクリックしたときに変化するようにするためには下記のように書きます。

$(function(){
  $("a.sizeL").click(function(){
  $("body").removeAttr("class");
  $("body").addClass("fontL");
  return false;
  });
  $("a.sizeM").click(function(){
  $("body").removeAttr("class");
  $("body").addClass("fontM");
  return false;
  });
  $("a.sizeS").click(function(){
  $("body").removeAttr("class");
  $("body").addClass("fontS");
  return false;
  });
});

removeAttr(”class”)と書いているのは一度付加したクラスを消すためです。何故なら、これが無いと永久にクラスを付加し続けることになってしまい、プログラムが上手く動きません。一度クラスを消してリセットしているわけです。

とりあえず、これでjQueryでフォントサイズを変えることができました。

あとはこれにクッキー機能を付ければ、一度ブラウザを閉じても同じ指定フォントで見ることができます。フォントサイズ切替のやり方は他にも色々とあると思うので、もっと良いやり方がありましたら是非教えて下さいませm(_ _)m

関連エントリー

現在、この記事へのトラックバックは受け付けていません。

このエントリーに投稿されたコメント

のーこ - 2007.07.6 -PM 8:12

初めまして今日は。最近jQueryに興味を持ちこちらに辿り着いた者です。説明が丁寧で分かりやすく、jQuery以外のカテゴリーもとても参考になりました!サイトデザインの画像や色の遣い方も素敵です。文章も読みやすいレイアウトなので随分長居してしまいました(笑)

「jQueryでフォントサイズ切替機能」を使いたいのですがクッキー機能の付け方が分からず質問させていただきました。「jQueryを使ってCSS切替機能を実装」でクッキーの説明をされているので参考に・・・と思ったのですが、よく分からなくて・・・。書くのに手間がかかるコードでなければ教えていただけないでしょうか?宜しくお願いします

A.Kawashima - 2007.07.7 -AM 12:27

>のーこさん

はじめまして、こんにちは。
クッキー機能を付け足したバージョンを作りましたので参考にしてみてください。
下記デモページの下部にスクリプト全文も載せてあります。

fontサイズ切替デモ+クッキー付き

fontサイズの切替方法はこのページに書いてあるのと同じです。クリックした時にbodyにそれぞれ異なるclassを付けるようにしています。

何かありましたらまた気軽に書き込んで下さいませ。
今後も役立つjQueryの情報を載せていこうと思っていますので見に来て下さいね :-)

のーこ - 2007.07.7 -AM 1:43

こんばんは。お返事とコードをありがとうございますv早速試したら動きました。
jQueryの解説サイトはあっても英語だったり、基礎知識があること前提だったりと初心者の私にはハードルが高かったのですが、Kawashimaさんのようにひとつひとつ丁寧に説明されているサイトには本当に助けられています。これからも更新を楽しみにしています。ありがとうございました!

tumado - 2007.07.26 -AM 10:39

始めまして、tumadoといいます。
font-sizeを切り替えたくて試行しているときにこのサイトを知りました。何から何まで親切な解説でやっと未消化ながらも、うまく行きました。勝手にサイトの紹介とコードを掲載してしおります。不都合でしたらご指摘ください。直ちに削除いたします。本当にありがとうございました。

A.Kawashima - 2007.07.26 -PM 5:11

>tumadoさん

こんにちは、はじめまして。
多少なりともお役に立てたようでよかったです。サイトの紹介は全然OKですのでじゃんじゃん紹介しちゃってください(笑)

コメントを投稿する場合は次のフォームよりお願いします

コメント投稿フォーム
(スタイル用HTMLタグが使えます)

ページの先頭に戻る