html5、CSS3、JavaScriptなどなど、Web開発者のためのフレームワーク10

それぞれ、特定の用途に特化していて、いつか使いそうなJavaScriptやCSSのフレームワークに関するメモ。

もし実際に使った感想があれば教えてください。

TimeGlider

年表という表現でいいのかな?

JSONデータからグリグリ動く年表を作るためのフレームワークです。

treesaver

デジタルカタログ風のコンテンツを作成するためのフレームワーク。

スマフォへの対応をメインにしているらしく、よくある「めくる」演出ではなくスライドでページを移動します。

LimeJS

HTML5でネイティブアプリに近いゲームを作成するためのフレームワーク。

Wink Toolkit

スマフォ対応サイトを作るためのフレームワーク。

jqTouchに近い印象。よさげなんですけど、サーバー死んでます。^^;

xui.js

HTML5に特化したjQueryみたいな感じ?

x$()という記述が、気になります。^^

Baker Ebook Framework

iPhone、iPad向けの電子書籍を作るためのフレームワーク。

サンプルはApp Storeへのリンクが貼られています。ということは…

ActiveJS

jQueryとかprototype.jsのようなJavaScriptフレームワーク。

ソースをパッと見しただけですが、これといった特徴をつかめませんでした。

RightJS

jQuery UIとかExt.jsなどのように様々なUIを簡単に実装するためのフレームワーク。

これはいいかもしれない。

EZ-CSS

CSSでレイアウトを組む際に手助けしてくれるフレームワーク。

あらかじめ用意されたレイアウトのバリエーションからクラス属性をコピペするだけで使用できるようです。

Atatonic CSS

横方向の罫線に対してきれいに揃えたいみたいなことをやってくれるCSSフレームワーク。

jQueryでドロップダウンメニューをつくるまでの4ステップ

WordPressのメニューなどを、jQueryを使ってちょっとかっこいいドロップダウンメニューにするためのメモ。

あまり凝ったデザインや演出はありませんが、実はほとんどがCSSで対処できますのでノンプログラマーの人におすすめです。

ステップ1: メニューのHTMLを準備する。

メニューのHTMLは以下のようなネストしたリストを前提としています。

<ul id="nav">
    <li><a href="a.html">製品案内</a></li>
    <li><a href="b.html">会社概要</a>
        <ul>
            <li><a href="c.html">交通アクセス</a></li>
        </ul>
    </li>
<ul>

ステップ2: CSSを準備する。

CSSは以下のような感じで。背景などの装飾は一切加えていないテンプレートのようなものです。

#nav, #nav ul
{
    margin: 0;
    padding: 0;
    list-style-type: none;
}
#nav > li
{
    float: left;
    position: relative;
    height: 40px;
    line-height: 40px;
}
#nav a
{
    display: block;
    white-space: nowrap;
}
#nav ul
{
    display: none;
    position: absolute;
    top: 40px;
    left: 0px;
    z-index: 10;
}

ステップ3: JavaScriptを用意する。

意外なことにJavaScriptは、とてもシンプル。
以下のソースを</body>の直前にコピペしてください。

jQueryはあらかじめ読んでおいてくださいね。

$('#nav > li').each(function(){
    if ($('ul', this).length) {
        $(this).addClass('has_child');
    }
    $(this).bind('mouseenter', function(){
        $('ul', this).slideDown(200);
    });
    $(this).bind('mouseleave', function(){
        $('ul', this).hide();
    });
});

ステップ4: かっこよくする。

ここから先はデザインに応じてCSSを試行錯誤することになります。

  • #navに背景を設定する。
  • #nav ulに背景を設定する。
  • a要素に背景を設定する。
  • a:hoverで背景を変える。
  • 行の高さや文字サイズ、余白などの微調整。(特に孫となるリスト要素などに注意。)
  • このJavaScriptではサブメニューがあるli要素にhas_childという値を持つクラス属性をつけていますので、たとえば三角のアイコンを設置するなどのCSSを設定する。

はい、実はステップ4が最も大変なのでした。^^

以下のようなCSSと組み合わせると幸せになれると思います。

CSS3 Fancy Menu / LavaLamp Menu

JavaScriptは苦手だけどCSSはいけるぜ!という人はぜひ挑戦を。^^

facebook向けiframeアプリの横幅や高さの設定方法

現在、WordPressをfacebookのアプリとして動作させるためのプラグインを作ってるのですが、コンテンツ部分の横幅や高さに関するメモ。

アプリのキャンバスの横幅

facebook アプリは、アプリとして登録するとiframeで外部サーバーのコンテンツを表示しています。

iframeなので、好き勝手に横幅を設定しちゃとスクロールバーが出てカッコ悪いので、CSSなどで横幅を予め合わせておく必要があります。

わかりにくいのですが、アプリは単独で開かれる場合とタブで開かれる場合があって、それぞれ最大の横幅が違います。

  • タブ経由で開かれる場合の横幅 – 520px
  • アプリ単独で開かれる場合の横幅 – 760px

アプリ側のbody要素のmarginとpaddingの調整もお忘れなく。

アプリの高さ

高さもコンテンツが縦長になると縦スクロールが出てみっともない事になってしまいますが、これはfacebookのJavaScript SDKで親ページのiframeの高さを変更するためのAPIが提供されています。

以下はAPIを使った高さ調節の例で、body要素の終了タグ直前にコピペしてください。

jQueryを使ってます。

FB.Canvas.setAutoResize() で自動的に高さが調整されるのですが、サイトによっては FB.Canvas.setSize() も紹介されていることが多いようです。

個人的には、FB.Canvas.setSize() のほうは他のJavaSCript でコンテンツ領域の高さが変わる場合に、いちいちコールする必要があったので、使いにくいと思いました。

CSSが適用されない!? – CSSの優先順位

本サイトで配布しているWordPressプラグインEnhancing CSSを使用するとWordPressに外部スタイルシートを適用することが可能ですが、実際にスタイルを適用するには若干のコツが必要です。

詳細度による優先順位

CSS内に記述されたスタイルには詳細度による優先順位という概念があり、スタイル指定が重複した場合は、この詳細度によって適用されるかどうかが決定されます。

詳細度に関する詳細は以下のサイトをどうぞ。

これらを正しく理解すると、ほとんどのケースで外部スタイルシートからスタイルを変更可能です。

importantルールについて

スタイルシートでは、!important という記述を入れることで特定のスタイルを優先させることが可能です。

div {
    font-size: 12px !important;
}

これを上手く利用すれば、外部スタイルシートを追加することによるスタイルの変更がやや簡単になりますが、多用しすぎるとメンテナンス性が悪くなりますので要注意です。

読み込み順による優先順位

詳細度による優先順位が同じであったり、!importantルールが使用されていない要素に対するCSSは、あとから書いたものや読み込んだものが優先して適用されます。

便利なツール

Firefoxの拡張機能「Web Developper」では、マウスオーバーした要素のスタイルがどのCSSからどのように指定されているかを簡単に調べることが可能です。

Enhancing CSS 0.3

WordPressに外部CSSを添付するプラグインの”Enhancing CSS”をアップデートしました。

更新内容

条件付きGET(Conditional GET)に対応

CSSのデータを出力する際に、”Last-Modified”ヘッダを出力し、クライアントからの”If-Modified-Since”または”If-None-Match”に条件が一致した場合に”HTTP/1.1 304 Not Modified”を返します。

これによりブラウザ側でCSSがキャッシュされパフォーマンスが向上します。

子テーマを作成するためのstyle.cssをダウンロード

保存した外部CSSをもとに、子テーマを作成するためのstyle.cssがダウンロード出来るようになりました。

ダウンロード用のstyle.cssには親テーマのstyle.cssへのリンクや、子テーマとして動作するための最低限のコメントが、自動的に挿入されます。

子テーマ作成に関する詳細は以下のページを御覧ください。

子テーマ – WordPress Codex 日本語版

Enhancing CSS & JavaScriptでTwenty Tenテーマをカスタマイズ

このサイトで配布しているEnhancing CSSプラグインとEnhancing JSプラグインは、それぞれ外部CSSと外部JavaScriptをWordPressに添付するプラグインです。

今回の記事では、これらのプラグインを使ってTwenty Tenテーマをカスタマイズする方法をご紹介します。

カスタマイズ例

以下の画像はTwenty TenテーマにEnhancing CSS及びEnhancing JavaScriptを使用して、外部CSS及びJavaScriptでカスタマイズした事例です。

CSSとJavaScript以外はメニューの設定も含めて全て同じです。もちろんテーマファイルの書き換えも一切行っていません。

はじめに

以下のサンプルを試す前にプラグインをインストールしてください。

メニューの位置を変更する

カスタマイズ例ではメニューの位置が画像の上部に変更されています。
この修正は、CSSでも可能ですが、JavaScriptにて行ないました。

  1. まず、Enhancing JavaScriptの管理画面(外観->拡張JavaScript)を開いて、Enqueue Scriptsの中からprototypeにチェックを入れて保存してください。
    以上の操作でテーマファイル側にprototype.jsが組み込まれます。
  2. 以下のソースをコピーしてJavaScriptのエディター内にペーストしてください。

コピー&ペーストするソース

function init(){
  var oImg = $('branding').getElementsByTagName('IMG')[0];
  if (document.getElementsByTagName('BODY')[0].className.indexOf('home') >= 0) {
    $('masthead').appendChild(oImg);
  } else {
    $('branding').removeChild(oImg);
  }
}

Event.observe(window, 'load', init);

サイトタイトル部分に画像を使用する

  1. まず任意のロゴ画像を作成して、WordPressのメディアからアップロードして、画像のURLをコピーしてください。
  2. 以下のソースを”外観” -> ”拡張CSS” のCSSエディター内にペーストして、画像のパスの部分をアップロード画像と書き換えてください。(画像の横幅や高さもかえましょう!)
#site-title a
{
  background-image: url(/wp-content/uploads/2010/09/buttonw-grey-8bit.png);
  background-position: left top;
  background-repeat: no-repeat;
  display: block;
  width: 178px;
  height: 58px;
  text-indent: -9999px;
  overflow: hidden;
}

#site-description
{
  text-align: right;
}

サイトを確認してください。
もし、何も表示されていなければ画像のURLに間違いがあります。
また、ロゴ画像の上下左右が欠けている場合は、横幅と高さを調べて上記のソースと差し替えてください。

メニューをカッコよくする

以下のソースを”外観” -> “拡張CSS” のCSSエディター内に追加してください。

/* メニュー全体の背景の設定 */
#access
{
  background-color: #ffffff;
  background-image: url(/wp-content/uploads/2010/09/menu.png);
  background-repeat: repeat-x;
  background-position: left top;
  color: #000000;
  border-bottom: 1px solid #cccccc;
  margin-bottom: 5px;
  padding: 5px 0;
}

/* メニューのリンク文字列 */
#access a
{
  color: #000000;
}

/* メニューの項目別の背景 */
#access li > a
{
  background-image: url(/wp-content/uploads/2010/09/menu-items.png);
  width: 150px;
  height: 40px;
  padding: 0px;
  text-align: center;
  margin-right: 3px;
}

/* メニューの項目別の背景(マウスオーバー及びカレントページ) */
#access ul li.current_page_item > a,
#access li:hover > a
{
  background-image: url(/wp-content/uploads/2010/09/menu-items.png);
  background-position: left bottom;
  color: #666666;
}

/* ポップアップメニューを無効にする */
#access ul li:hover > ul
{
  display: none;
}

まとめ

すごく、ざっとした説明で恐縮ですが、以上のような手順で、JavaScriptによるHTMLの書き換え+CSSというテクニックを使用すれば、複雑なテンプレートタグを使用しなくても十分に実用的なサイトが作れることがおわかりいただければ幸いです。

参考までにサンプルで使用した画像をおいておきますので、ご利用いただければ上記の事例が簡単に再現できると思います。

サンプル画像のダウンロード

IE7でボタンにCSSのbackground-imageを設定する

素直に<input type=”image”>とすればよかったのだが、CSSだけでロールオーバーみたいなことをしたかったのと、Firefoxでいけてたので意固地になっていろいろ試してしまった。

ちなみに、IE8ではもともと問題なしで、以下はIE7での現象。
IE6以前では試していません。(もう過去の人です。)

結論から言うと、私がテストした限りでは以下の条件を満たすと、ボタンの背景にも画像を設定できた。

  • background-imageだけでなくbackground-colorも指定する。
  • text-indent: -9999pxみたいなことはできない?

ボタンのテキストも画像にしたかったのだが、

text-indent: -9999px;

と記述したとたんに背景画像が消えたので、これは素直にあきらめた。

background-colorを指定したとたんに背景画像が表示されたのには驚いた。

参考までに、今回使用したCSSは以下のような感じ。

input.save {
 background-color: #ffffff;
 background-image: url(../images/next.gif);
 background-repeat: no-repeat;
 background-position: left top;
 border: none;
 width: 119px;
 height: 44px;
 cursor: pointer;
 font-weight: bolder;
 font-size: 120%;
 color: #ffffff;
 padding-left: 50px;
 text-align: left;
}

input.save:hover{
 background-position: left bottom;
}