2009.07.15.

ソーシャルブックマークのボタンをつくる

最近よく見かけるソーシャルブックマークのボタンを付けてみることにしました。
ブックマークするための複数のボタンをまとめて設置できるサービスは、ウェブ上にたくさんあります。コードを貼り付けるだけなので、設定も簡単・・・
簡単すぎておもしろくない。特にボタンの形状は、たいていブックマークサービスのアイコンを使用しているので、ボタンに見えるものもあるし、見えないものもある。並べてみても統一感がありません。

そんなわけで、当サイトに合わせてアイコンから作ってみました。

まずは、それぞれのアイコンを作成。サイトのイメージに合わせてあまり目立ちすぎない程度に色調を統一。サイズもそろえてボタンふうにアレンジ。通常のアイコンとマウスを重ねた時用の二種類用意します。それからマウスカーソルを重ねたときにボタン名を表示するようにフキダシふうタイトルも追加(ボタンのタイトルは、リンクタグにtitle属性を加えておけば一応表示するんだけど、ワンテンポ遅れるし、この手作り感がいいかなと思って)

次に、クリックしたときにブックマークサービスに飛んで、タイトルやurlを入れてくれるようにコードを設定します。
ここで使ったブックマークサービスは、上から順に
twitter、delicious、Yahoo!ブックマーク、Googleブックマーク、はてなブックマーク、livedoorクリップ。

<ul  class="social_bookmarks">
	<li class="twitter_icon"><a href="http://twitter.com/home?status=<?= urlencode(mb_convert_encoding(the_title("","",false),"UTF-8")) ?> <?php the_permalink() ?>"target="_blank"><img src = "保存したアイコンのURL" alt = "twitter" /><span>twitterでつぶやく</span></a>
	</li>

	<li class="delicious_icon"><a href="http://delicious/post?url=<?php the_permalink() ?>&amp;amp;amp;amp;amp;title=<?= urlencode(mb_convert_encoding(the_title("","",false),"UTF-8")) ?>" target="_blank"><img src = "保存したアイコンのURL" alt = "del.icio.us " /><span>delicious</span></a>
	</li>

	<li class="yahoo_icon"><?php echo '<a href="http://bookmarks.yahoo.co.jp/action/bookmark?t='.urlencode(the_title('','',false)).'&amp;amp;amp;amp;amp;u='.urlencode(get_permalink()).'" target="_blank"><img src = "保存したアイコンのURL" alt = "Yahoo!ブックマーク" /><span>Yahoo!ブックマーク</span></a>';?>
</li>

	<li class="google_icon"><a href="http://www.google.com/bookmarks/mark?op=edit&amp;amp;amp;amp;amp;bkmk=<?php the_permalink() ?>&amp;amp;amp;amp;amp;title=<?= urlencode(mb_convert_encoding(the_title("","",false),"UTF-8")) ?>" target="_blank"><img src = "保存したアイコンのURL" alt = "Googleブックマーク" /><span>Googleブックマーク</span></a>
	 </li>

	<li class="hatena_icon"><a href="http://b.hatena.ne.jp/append?<?php the_permalink() ?>" target="_blank"><img src = "保存したアイコンのURL" alt = "はてなブックマーク" /><span>はてなブックマーク</span></a>
	</li>

	<li class="livedoor_icon"><a href="http://clip.livedoor.com/redirect?link=<?php the_permalink() ?>&amp;amp;amp;amp;amp;title=<?php bloginfo("name"); ?>%20:%20<?= urlencode(mb_convert_encoding(the_title("","",false),"UTF-8")) ?>" target="_blank"><img src = "保存したアイコンのURL" alt = "livedoorクリップ" /><span>livedoorクリップ</span></a>
	</li>
</ul>

JavaScriptは使わないのと、WordPlessを前提にしてあります。
twitterはブックマークじゃないし、Googleはブックマークだけどソーシャルじゃないというのは、ちょっと置いておいて・・・

CSSはこんな感じ

ul.social_bookmarks a img {
	border: none;
}

ul.social_bookmarks {
	list-style: none;
	width: 145px; /*ボタンの数に合わせてサイズ調整*/
	margin: 1em 0 1em auto;/*右寄せ*/
	padding: 0px;
}

ul.social_bookmarks li { /*横並びに*/
	float: left;
	width: 16px;
	height: 16px;
	margin-left: 7px;
}

ul.social_bookmarks:after { /*floatの解除*/
	content: ".";
	display: block;
	height: 0;
	clear: both;
	visibility: hidden;
}

.social_bookmarks ul li.twitter_icon {
	background-image: url("マウスを重ねたときの画像URL") ;
	background-repeat: no-repeat;
}

.social_bookmarks ul li.delicious_icon {
	background-image: url("マウスを重ねたときの画像URL") ;
	background-repeat: no-repeat;
}

.social_bookmarks ul li.yahoo_icon {
	background-image: url("マウスを重ねたときの画像URL") ;
	background-repeat: no-repeat;
}

.social_bookmarks ul li.google_icon {
	background-image: url("マウスを重ねたときの画像URL") ;
	background-repeat: no-repeat;
}

.social_bookmarks ul li.hatena_icon {
	background-image: url("マウスを重ねたときの画像URL") ;
	background-repeat: no-repeat;
}

.social_bookmarks ul li.livedoor_icon {
	background-image: url("マウスを重ねたときの画像URL") ;
	background-repeat: no-repeat;
}

ul.social_bookmarks span {
	margin: 0;
	padding: 0;
	background-image: url("タイトル用フキダシ画像のURL");
	background-repeat: no-repeat;
	width: 116px;
	height: 34px;
	position:relative;
	top: -50px;
	left: -50px;
	text-align: center;
	font-size: 11px;
	line-height: 20px;
	color:black;
	display: none; /*ボタンタイトルを非表示に*/
}

ul.social_bookmarks a:hover span { /*マウスを重ねたときにボタンタイトル表示*/
	display: block;
}

ul.social_bookmarks a:hover { /*ボタンタイトルの下線消去*/
	text-decoration: none;
}

ul.social_bookmarks a:hover img { /*マウスを重ねたときボタン画像を非表示にしてバックグラウンド画像を表示*/
	visibility: hidden;
}

リストにしたソーシャルブックマークボタンを横並びに変えます。
ボタンのバックグランド画像(ボタン-02)を設定し、その上にボタンイメージ(ボタン-01)を重ねます。
ボタンにマウスカーソルを重ねたとき、ボタン-01を非表示にして、その下のボタン-02が現れるようにします。
同時に非表示にしてあったボタンタイトルを表示。

せっかく作ったので、フリーアイコンとして公開しておきます。気に入ったら使ってみてください。もしリクエストがあれば他のボタンも作ります(気長に待ってもらえればですが・・・)

social_bookmarks.zip(12kb)

わざわざこんな手間をかけるより簡単にソーシャルブックマークボタンを並べたい人は、ネット上を探してみて下さい。ブログに貼り付けるだけで設置できるのがいろいろ見つかります。

2009.05.19.

Picasa スライドショーのサイズを調整してサイドバーに入れる

よくブログでサイドバーにFlickrのブログパーツを表示しているのを見かけますが、Picasaでも似たようなのがないかなと探してみたら、Picasa内に「スライドショーを埋め込む」ボタンを見つけました。

Picasa ウェブアルバムのスライドショーにしたいアルバムを開いて、横にある「このアルバムへのリンク」をクリックすると、「スライドショーを埋め込む」という項目が出るので、クリック。プレビューとともにスライドショー作成の画面が出ます。
何種類かのサイズを選べるんだけど、サイドバーで使えそうなサイズは、「小144ピクセル」と「中288ピクセル」くらい。
ところがこのサイズは、まわりの黒い部分も含めた大きさです。

中288ピクセル「中288ピクセル」

中144ピクセル「小144ピクセル」

最近のブログでは、サイドバーもだんだん幅広タイプが増えているような気もしますが、普通は180〜200ピクセルくらいが多いのではないでしょうか。
288ピクセルは大きすぎるし、144ピクセルだと写真部分が小さすぎて見にくい。
そこで、サイドバーに入れやすいように大きさを調整してみました。
できれば縁の黒いのもやめて、自分で好きな形にしたいし。

まずは、Picasaの「スライドショーを埋め込む」の貼り付け用コードをコピーして、自分のブログのサイドバー部分にペースト。どれでもいいんだけど今回は「中288ピクセル」を選んでいます。
中身を見ると、width=”288″ height=”192″というのがあるのでwidth=”160″ height=”120″に変更。
それからスライドショー部分を適当なidを付けて囲ってやります。
< div id="picasa-slideshow"> スライドショーのコード </div>
こんな感じで。

次は、cssで微調整。

#picasa_slideshow {
width:160px;
height:120px;
margin:15px auto;
border: 1px solid #333333;
}

marginで上下の間隔調整とセンター配置。
細いボーダーも追加してます。

「中288ピクセル」の写真部分のサイズは200×150、「小144ピクセル」は72×54 になっています。
いろいろためしてみた結果、写真だけの表示にしてサイドバーで使えそうなサイズは、

  • 200×150
  • 160×120
  • 144×108
  • 72×54

こんなところです。サイドバーの横幅に合わせて使い分けてください。
あとは、cssで見せ方を工夫してやればOK。

実際に設置してみたのは、こちら「えぞりすノート

2009.03.08.

CSSでドロップダウンメニュー

このブログを作るに当たって、いろいろと試行錯誤をした記録です。すぐ忘れてしまうので、覚書として書き留めています。今回はヘッダーのメニュー編。

CSSのドロップダウンメニューです。テストバージョンのオリジナルWordPress Themeで一部表示がおかしくなっているところがあったので、少し整理してみました。
ヘッダー部分に横並びメニューとしてデザインしていて、メニュー項目にカーソルを合わせると階層式に子メニューが表示される、よく見るタイプです。

まずはメニューなのでリンク項目であることを前提に、リストとしてマークアップします。(DEMOではリンク部分でも別のページに飛ばないようにしています)

<div id="menu-sample">
<ul>
  <li><a href="#">01 S</a>
  <ul>
    <li><a href="#">02 短く</a></li>
    <li><a href="#">02 ても</a></li>
    <li><a href="#">02 幅一定</a></li>
  </ul>
  </li>
  <li><a href="#">01 middle</a>
  <ul>
    <li><a href="#">02 Mサイズ</a></li>
    <li><a href="#">02 真ん中</a>
    <ul>
      <li><a href="#">03 長い文章も折り返さずに表示</a></li>
      <li><a href="#">03 一番長い横幅にそろいます</a>
        <ul>
        <li><a href="#">04 menu-aaaaaaaa</a></li>
        <li><a href="#">04 menu-bbbbbbb</a></li>
        <li><a href="#">04 menu-cccccccc</a>
        <ul>
          <li><a href="#">05 menu-a</a></li>
          <li><a href="#">05 menu-b</a></li>
          <li><a href="#">05 menu-c</a></li>
        </ul>
        </li>
       </ul>
       </li>
      <li><a href="#">03 ただしIEを除く</a></li>
    </ul>
    </li>
    <li><a href="#">02 Mサイズ</a></li>
  </ul>
  </li>
  <li><a href="#">01 For a long sentence</a>
  <ul>
    <li><a href="#">02 基本の</a></li>
    <li><a href="#">02 横幅は</a></li>
    <li><a href="#">02 94pxに</a></li>
    <li><a href="#">02 設定</a>
    <ul>
      <li><a href="#">03 文字数が多くなると</a></li>
      <li><a href="#">03 IE以外は</a></li>
      <li><a href="#">03 最大の横幅に</a></li>
      <li><a href="#">03 合わせて広がります</a></li>
    </ul>
    </li>
  </ul>
  </li>
</ul>
</div>

1段目は横並びのメニュー項目で、2段目以降は入れ子構造にしていきます。

次はCSS。
まずは、ドロップダウンメニューとしての基本形。

#menu-sample ul { /*リスト全体*/
  list-style: none;
  margin: 0;
  padding: 0;
}

#menu-sample li { /*リストの1段目*/
  float: left;
  min-width: 94px;
  white-space: nowrap;
}

#menu-sample ul ul { /*2段目以降*/
  display: none;
  position: absolute;
  z-index: 10;
}

#menu-sample li li { /*2段目以降のリスト項目*/
  clear: left;
  position:relative;
  width: 100%;
}

#menu-sample ul ul ul { /*3段目以降*/
  top: 0;
  left: 100%;
}

#menu-sample ul li:hover > ul {
  display: block;
}

*+html #menu-sample ul ul a { /*IE用*/
width: 72px; /*(94-10-10-1-1)パディングとボーダーの分を引いた値*/
white-space: normal; /*幅に応じて改行*/
}

ul:リストの装飾は不要なので削除。マージン、パディングも0にして、いったんきれいな身体に。

1段目のliをfloat: leftで横並びにします。
できればひとつひとつのメニュー項目の幅をそろえたいと思いますが、文字数によってはピッタリ納まるとは限らないので、あくまでも最小幅とし、文字数が増えても対応できるようにしておきます。それがmin-width: 94px部分。94pxはヘッダーの幅と入れたいメニュー項目数から逆算して適当に決めた数値。
white-space: nowrapは下層のメニュー項目も改行しないようにしています。これを入れておかないと3段目以降で固定幅になって、文字が改行されてしまいます(なぜなのかよくわからない)

ul ulはメニューの2段目以降を指定しています。ここで下層のメニューが見えないようにdisplay: noneで 非表示にします。
positionの使い方がわかりにくいですが、ul ulにposition: absoluteを指定して、2段目以降のulにabsoluteがかかるようにします。2段目のulの親要素である1段目のliにはpositionが指定されていないので、親要素の下に絶対配置されます。
z-index: 10は念のため。サイドバーなどにメニュー項目が重なったとき、下になって隠れてしまう場合もあるので。

2段目以降のリスト項目li liはclear: leftで縦並びに戻します。
position:relativeを入れて2段目以降のリスト項目左上を基準とします。
width: 100%は、リスト項目どれかの文字数が多いときにそれに合わせて同じ幅になるようにしています。

3段目以降を示すul ul ulにもabsoluteがかかっていますが、親要素である2段目以降のliでposition:relativeを指定してあるのでその要素の左上が基点となり、子要素であるulにtop、leftなどで基点からの位置を指定します。
ここではtop: 0でliと下段のulのラインを揃えて、left: 100%で親要素のul幅分右へずらしています。
4段目、5段目と階層が増えても、親要素、子要素の関係は変わらないので同じように表示されます。

あとは、li:hover > ul で子要素がある項目にカーソルが重なったときに直下のulをdisplay: blockで表示するようにします。

例によって、IE用の対策。

まずIEではli liでwidth: 100%を指定してもなぜか最大幅のメニュー項目に合わせて同じ幅に広がってくれないので、*+htmlハックでIE用にメニューの幅を固定して改行するように指定してます。
他のブラウザと見た目が少し変わりますが読めるから大丈夫、というレベルで対応。

そもそもIE6は疑似クラスの :hover や min-width が効かないので、「Google Code」の「IE7.js」を使わせてもらいます。

htmlのhead部分に

<!--[if lt IE 7]>
<script src="http://ie7-js.googlecode.com/svn/version/2.0(beta3)/IE7.js" type="text/javascript"></script>
<![endif]-->

を書き込むだけです。

IE6は、しょうがないから最低限の対応だけしておくか、というスタンスなのでご勘弁を。
これに関しては、「なるべくならIE用のHackは使いたくない」と「「IE7.js」で IE6 でも透過 PNG、疑似クラス :hover に対応」を見てください。
上記の*+htmlハック部分も「IEの条件付きコメント」を使って別ファイルにしたほうがスッキリします。

あとは、メニューっぽく装飾を施します。

#menu-sample li {
  margin-left: 3px;
}

#menu-sample a { /*1段目以降のメニュー文字*/
  font-size: 13px;
  line-height:15px;
  color: #dadada;
  text-decoration: none;
  text-align: center; /*1段目は文字を中央合わせに*/
  padding: 5px 10px;
  background-color: #242424;
  display: block;
}

#menu-sample a:hover {
  color: #f90;
  background-color: #111;
}

#menu-sample ul ul {
  padding-top: 2px;/*2段目を少し下げた*/
}

#menu-sample ul ul ul { /*3段目以降*/
  padding-top: 0; /*2段目のパディング2pxを元に戻す*/
}

#menu-sample li li {
  margin-left: 0; /*liのmargin-left: 3pxを元に戻す*/
}

#menu-sample ul ul a { /*2段目以降のメニュー文字*/
  font-size: 11px;
  line-height: 1.3;
  text-align: left; /*2段目以降は左寄せにもどす*/
  border-top: solid 1px #555555;
  border-right: solid 1px #070707;
  border-bottom: solid 1px #070707;
  border-left: solid 1px #555555;
  background-color: #343434;
}

文字色やバックグラウンドの色は、メニュー内のa要素で指定。display: block;でブロック要素にしてサイズを固定します。
a:hoverでカーソルが乗った位置がわかるように文字色とバックグラウンド色が変わるようにします。
2段目以降は文字サイズを少し小さくしてみました。
その他諸々の指定は、個人個人の好みの問題です。

ただ、やっぱりIEが絡んでくるとなかなかうまく表示されない場合もあって、たとえば2段目と3段目で少し隙間を空けようかとか、逆にちょっと重ねてみようかと思うと、細かいところでいろいろ苦労をすることになります。Operaも少し挙動が変になったりします。

とりあえずこのサンプルでは、その辺も考えた上での基本形ということで IE6,7,8、Opera、Firefox、Safari それぞれのブラウザであまり苦労をしないで動くような最低限のデザインにしてあります。

あとは応用ですので、バックの色やボーダー、イメージ画像を使ったりしていろいろバリエーションを楽しめると思います。

参考サイト

2009.01.28.

WordPressの解説本

このサイトを作成するときに参考にした書籍を紹介します。

WordPress標準ガイドブック―導入&基本操作からフルチューンまで
マクラケン 直子 WordPress Japan
毎日コミュニケーションズ
売り上げランキング: 68207

WordPressを使ってみようと思って、最初に買った参考書です。WordPressはMovable Typeに比べて、解説本が少ないですが書店でいろいろ見比べながらわかりやすそうだったので購入しました。大正解。導入からカスタマイズまでこれ1冊でほぼ足りてしまうくらいで、説明も丁寧です。
cssをいじったことがあるくらいの人で(私です)少し試してみようかなという場合には最適だと思います。

この本を読みながら(もちろん他にもいろいろ参考にさせていただいた本やサイトはたくさんありますが…)こうかな?どうだろ?と試行錯誤しながら作ったのがこのサイトなわけです。

残念ながら私の手元にあるこの本は、2007年7月発行で対応しているのは古いバージョンです。中身的には問題なく使えると思いますが…
どちらにしても最新版が書籍で出る頃にはWordPressのバージョンもさらに上がっていたりするので、最新情報はネットで追いかけることになりますけどね。

解説本2冊目は、

WordPressサイト構築スタイルブック―デザイナーのためのテンプレートタグリファレンス+サイトデザインテクニック
エ・ビスコム・テック・ラボ
毎日コミュニケーションズ
売り上げランキング: 4061

こちらは、テンプレートタグの解説と、WordPressを使ってブログ以外にウェブサイト(ホームページ)を作成するための解説がたいへん役にたちました。参考例がたくさん載っていてわかりやすいです。この2冊があれば、ひととおり自分でWordPressを導入して自分のオリジナルブログを作るところくらいまで出来ると思います。ただしこれらの本にはcssについての説明は載ってませんので、オリジナルのテーマをデザインするには、別途cssの勉強も必要。

単純に、WordPressでブログをはじめたい人は、「WordPress標準ガイドブック」だけあれば十分じゃないかな。

2008.09.06.

ファビコンを付けてみた

ブラウザのアドレスバーとかタブの頭に付く小さいアイコンです。
ファビコン ←アドレスバーに表示されてるかな。対応していないブラウザもあるみたいだけど。
作り方をメモしておきます。

まずは、16×16 サイズの画像を作ります。小さいから複雑なものを作ろうとしてもきれいに見えません。大きめの画像を作ってから縮小する方法もありますが、あまりおすすめしません。どうしてもつぶれてしまって何の絵なのかわからなくなったりします。それならいっそ、最初から16×16 サイズで作っちゃった方がいいと。
ブックマークなどで他のサイトと一緒にたくさん並んだときに、一目で見分けられるようにシンプルで特徴的なデザインにします。
画像が出来たら GIF か JPG 、あるいは PNG で一旦保存します。

次にこのファイルを favicon に変換します。今は大抵のブラウザが GIF でも PNG でもファビコンとして認識してくれるようですが、IE は、favicon 形式の ICO フォーマットじゃないと認識しないので、ICO に変換しておきます。
変換方法については、ソフトやネットサービスなどいろいろあるようですが、私は Favicon Japan というサイトの「Favicon自動生成」を利用させていただきました。非常に簡単で便利です。
アップロードして作成するボタンを押すだけ。ファイル名.ico の拡張子付きでダウンロードできます。

今度は、この favicon を自分のサイトにアップしてから、HTML の head 部分に

HTML<link rel="shortcut icon" href="アップした場所/ファイル名.ico" />

を書き込んだら終わり。

参考サイト

  • IDEA*IDEA より:favicon.ico(ファビコン)の作り方
    favicon を作るためのいろいろなサービスをまとめてくれています。
  • Favicon Japan:favicon のサイト。favicon 用に手軽に変換もしてくれる。いろんなファビコンも集めているので、作るときの参考になります。

と、ここまで来ていまさら気が付いたんだけど、Firefox の Google ツールバーからブックマークを開いてみると、favicon が表示されていない。
ブラウザに入っているブックマークでは、Firefox も Safari も Opera もみんなちゃんと表示されてるのに、Google のブックマークだけ出てこない。
よく見ると、他のサイトでもGoogle ブックマークで表示されているところと、されていないところがあるみたいだ。なんでだろ?
また謎が増えた。