2010年を迎えました。今年が皆さんにとって良い年でありますように。
昨年のクリスマスから2週間ほどクリスマス休暇をいただいてましたが、今日から仕事始めです。ppBlogのサポートも再開したいと思います。
2010/1/11
2010年を迎えました。今年が皆さんにとって良い年でありますように。
昨年のクリスマスから2週間ほどクリスマス休暇をいただいてましたが、今日から仕事始めです。ppBlogのサポートも再開したいと思います。
— posted by martin at 12:50 pm
Comment [0]
TrackBack [0]
2009/12/24
カテゴリー » 開発日誌 » JavaScript
こんばんは、martinです。FirefoxやWebKit系のSafari、グーグルのChromeなどは、CSS3の魅力的な機能を色々取り入れています。中でも、CSS3のtransform
やドロップシャドウ系は、ブログで写真を見せる場合などに凝った演出が出来るので、仕様が正式に決まるのが待ち遠しいですね(そう言えば、ボックスのドロップシャドウ box-shadowですが、CSS3の勧告候補から消えた
のかなぁ)。便利な仕様だとは思うのですが。
ちなみに、transformとは「変形」のことで、CSSのみで画像やらボックスやらを自在に回転させたり、ゆがませたりできる優れものです。で、例によってIE系はCSS3の対応は遅れています。とは言っても(これまたいつものように)transformに関しては、IEは実にIE5.5の時から似たようなものを実装していました
! なので、それらを駆使すれば、CSS3相当のtransformが実装できそうです。

画像の回転に関して、FirefoxやWebKit系は、画像の中心を回転軸として回転させます(なので回転軸は移動しない)。これは直感的で分かりやすいです。これに対して、IEは回転軸が指定した回転角度によって刻々と移動します。なので、標準仕様に似せようと思うと、回転軸を動かさない様にするための補正計算が必要になります。この計算にちょっとてこずりましたが、何とか回転軸が動かないような補正をすることが出来ました。

で、とりあえずモノになりそうなものが出来たのでデモサイトを挙げておきます。画像へのマウスオーバーで拡大なんてのもCSSのみで出来るのですが、それもIEで動くようにしています。
→「CSS3 Transformを使ったギャラリー(IE互換)
」
progid:DXImageTransform.Microsoft.dropshadow(enable=true,OffX=3, OffY=7, Color='#11000000', Positive='true');
実は最近知ったのですが、フィルターのColorには通常のRGB形式だけでなく、透明度も指定できる#AARRGGBBの形式が使えるので、黒色の透明度を高くすればより影っぽくなります。CSS3レベルのぼやけた感じまでは出ませんが、まぁ、これで良しとしましょう。
使い方は、簡単で、形はHTCファイルですが、JavaScriptの外部ファイルとして動作するようにしてます。これは、以前のドロップシャドウのスクリプトと同じです。それをIEのみが解釈する条件コメントの中に書いています。<!--[if IE]> <script type="text/javascript" src="js/css3transform.htc"></script> <![endif]-->
これを書いておくだけで、スタイルシートに記された
-moz-transform: rotate(-2deg);
-webkit-transform: rotate(-2deg);
transform: rotate(-2deg);
などを解釈して、IEのフィルター機能(Matrix Filter)で同等のことを表現します。デモページにあるように、IEでもCSS3のtransformはおよそ実現できるみたいです(まぁ、そもそもがIEのMatrix仕様を参考に実装したのでしょうけど)。このスクリプトを添付しておきます。
— posted by martin at 05:02 am
Comment [17]
TrackBack [0]

これは、アーカイブ表示に準じてそうしたのですが数が増えてくると縦表示は見辛いですね。もっとも、スタイルシートの制御で横に並べることは出来ますが、タグクラウドの特徴のひとつである「エントリー数に応じて文字の大きさを制御する」というところまではしていませんで(PHPプログラムのmodules/tags.inc.phpの方で)。
なので、modules/tags.inc.phpをタグクラウド表示に見合うように修正しました。適切にスタイルシートを設定すると以下のような表示になります。このショットはこのサイトでの例なのですが、タグ数が少ないのであまり雲って感じではないんですが、増えてくると見栄えも違ってくるでしょう。これよりもうちょいタグ数が多い、個人ブログの方はこんな感じ
ちなみに、テーマ「ベーシック」での、この部分の表示は以下のようにしています。参考になれば。クラス名などは従来通りです。
/*---------------------------[ タグ 一覧表示用 ]----------------------*/
div.tags-list {
width: 450px;
margin: 30px auto;
background: url(Images/clouds96.png) right top no-repeat;
}
div.tags-list ul {
list-style: none;
margin-top: 60px;
}
div.tags-list ul li{
margin: 0 6px 3px 6px;
white-space: nowrap; /* 日本語ワードの改行を適切にするための指定 */
display: inline;
text-align: center;
zoom: 1;
}
div.tags-list h3 {
margin: 2em auto;
color: navy;
}
これに対応したmodules/tags.inc.phpを添付しておきます。
あ、追記ですが、この添付ファイルの最初の方に、
$minFontSize = 13; // 最小文字サイズ(ピクセル) $maxFontSize = 36; // 最大文字サイズ(ピクセル)
という2行があります。これはタグ表示の文字サイズを制御するためのものです。エントリー数に応じて、タグの文字が大きくなっていきますが、際限なく大きくなっても困るので、上限を設けています。ピクセル指定です。適宜、調整して下さい。
— posted by martin at 01:29 am
Comment [2]
TrackBack [0]
2009/12/21
カテゴリー » WEB DESIGN » CSS
「タグボックス(いわゆるタグクラウド)に含まれる日本語のキーワードが途中で改行されることがありますが、これを防ぐ方法はありますか?」
という質問があったように記憶しています(探し出せませんでしたが・・・)。その時は、「日本語折り返しの制御はなかなか難しいかもですねぇ」みたいに答えていたと思いますが、ちょっとやってみたところ解決できたのでエントリーとして残しておきます。
まずは、以下のショットを。これはppBlogを含めた多くのブログで見かけるタグクラウドGですが、日本語の文字列が途中で改行されて、一瞥しただけではキーワードが認識しにくくなっています。このサンプルのタグクラウドは、まだエントリー数が少ないのでそうでもないですが、タグの数が多くなると、結構みづらくなるのではと思います。

これはスタイルシート(CSS)をうまく使うことで解決できます。IE系なら、IE5の時代からword-breakというW3Cのワーキングドラフトに含まれる仕様
を先行実装しているので、これを使えば少なくともIE5-7では意図した結果が得られます。この値の指定をkeep-allにすればOKです。これで日本語の単語が途中で改行されることはなくなります。でも、これはFirefoxが対応していません。さらには、IE8ではbreak-allの挙動がIE5-7と違うようで、Safari/Chromeと同じように振舞うようです。その結果、keep-allを指定しても、日本語の単語は途中で改行され得ます(参考:「CSS 3におけるテキストの自動改行と禁則処理の定義
」)。
なのでword-breakに頼らずに別の仕様をあたることにします。
ラッキーなことにどのブラウザでも対応しているものがありました。white-spaceです。
white-spaceプロパティは、ソース中の半角スペース・タブ・改行の表示の仕方を指定する際に使用します。
空白だけでなく、改行の表示にもかかわっているのがポイントですね。ppBlogでは、タグクラウドはだいたい以下のようなソースを出力します。
<ul class="sidebar-tags"> <li><a href="#" rel="tag" style="font-size: 11px;">DOM storage</a></li> <li><a href="#" rel="tag" style="font-size: 11px;">Flex</a></li> <li><a href="#" rel="tag" style="font-size: 12px;">CSS</a></li> <li><a href="#" rel="tag" style="font-size: 13px;">フーリエ級数</a></li> <li><a href="#" rel="tag" style="font-size: 11px;">PHP</a></li> <li><a href="#" rel="tag" style="font-size: 15px;">トラベラーズ</a></li> <li><a href="#" rel="tag" style="font-size: 11px;">ppBlogTips</a></li> <li><a href="#" rel="tag" style="font-size: 29px;">ppBlog</a></li> <li><a href="#" rel="tag" style="font-size: 11px;">無限級数</a></li> <li><a href="#" rel="tag" style="font-size: 11px;">Ajax</a></li> <li><a href="#" rel="tag" style="font-size: 21px;">アップデート</a></li> <li><a href="#" rel="tag" style="font-size: 29px;">JavaScript</a></li> <li><a href="#" rel="tag" style="font-size: 11px;">Firefox</a></li> <li><a href="#" rel="tag" style="font-size: 11px;">アマゾン</a></li> <li><a href="#" rel="tag" style="font-size: 11px;">ゴールドバッハの予想</a></li> </ul>
これに対して、スタイルシートの指定は以下のようにすれば、うまく行きます。
ul.sidebar-tags li {
display: inline;
white-space: nowrap; /* これがポイント! */
padding-right: 3px;
zoom: 1; /* これはIE7以下向け */
}
基本的には、white-space: nowrap;で事足りますが、これだけだと、IE7以下で表示が崩れるので、IE7以下のhasLayoutGを有効にするためにzoom:1という指定をしています。これはほかのブラウザでは無視されます。
では、具体的なサンプルを見てみましょう。→http://p2b.jp/demo/tagCloud.html
ちなみに、タグクラウドという名称の由来は、雲(=クラウド, cloud)みたいだからです。なのでサンプルでは、雲のイラストを付けてみました。パワーポイントで円や直線、3角形を組み合わせて適当に作成したんですが、思わずに良い出来栄えになりました
— posted by martin at 05:37 am
Comment [2]
TrackBack [0]
2009/12/18

従来だと、この戻るリンクで戻ると、マウスのカーソルは長々しいテキストエリアの先頭に戻っているので、再度編集部位を探しつつ、そこまでスクロールする必要がありました(Ctrl+Fで検索するのが常套手段ですが)。スタイルシートの編集では、テキスト量が多い傾向にあり、直前の編集部位を探し出すのは大変です。
なのでその辺を改善してみました。やりたいのは以下のことです。
テキストエリアのスクロールバーの位置はJavaScriptから制御することが出来ます。具体的には、scrollTop を使います。流れとしては、プレビューボタンを押したタイミングで、スクロール量を取得(scrollTopで可能)、プレビューから戻ったときに、取得した値を指定すれば良いわけです(指定もscrollTopです)。実際には、テキストエリアだけではなく、ブラウザのスクロールバーもscrollTopで制御できるので、この2つのスクロール量を保持するようにしています。
やってみると意外と簡単に実装できました。もっと早くやっておけば良かったです。試されたい方は、以下のutils.phpとmodules/theme.inc.phpでどうぞ。
— posted by martin at 01:46 pm
Comment [0]
TrackBack [0]
Comments