<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>head.js &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/head-js/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Tue, 16 Jul 2013 01:49:29 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>head.jsのローダーを少し便利に使う拡張「head-require.js」</title>
		<link>https://blog.mach3.jp/2013/07/16/head-require.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 16 Jul 2013 01:49:29 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Extension]]></category>
		<category><![CDATA[head.js]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Loader]]></category>
		<category><![CDATA[require.js]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3170</guid>

					<description><![CDATA[自分用に書いて使っていたのですが、わりと便利だったのでここに記しておきます。 おさらい : head.jsってなに だいぶむかしに記事を書いたことがありましたが、 「head要素に入れるべき唯一のスクリプト」 と称してい [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>自分用に書いて使っていたのですが、わりと便利だったのでここに記しておきます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-3Xj7mHWDjX8/UeLVOBMVM6I/AAAAAAAACHU/MdxjxwS7S5s/s400/20130715-00.png" alt="head.jsのリソースローダーを少し便利に使う拡張「head-require.js」"/></figure>



<p></p>



<span id="more-3170"></span>



<h2 class="wp-block-heading">おさらい : head.jsってなに</h2>



<p>だいぶむかしに記事を書いたことがありましたが、 <em>「head要素に入れるべき唯一のスクリプト」</em> と称している便利なスクリプトです。</p>



<p>cf) <a href="/2011/03/headjs.html">head要素に読み込むべき唯一のスクリプト「headjs」 | Mach3.laBlog</a></p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-3chTZXvUfB0/UeLVOKBzDqI/AAAAAAAACHU/jA2cONh5YxI/s500/20130715-01.png" alt="HeadJS, the only script in your head"/></figure>



<p><a href="http://headjs.com/">  </a></p>



<p>なにをしてくれるのかというと、</p>



<ul class="wp-block-list">
<li>Require.jsのようにリソースローダーとして機能する</li>



<li>Modenizrのようにモダン環境向けの機能判別をしてくれる</li>



<li>html5shivのように、レガシー環境でもHTML5のエレメントを使えるようにしてくれる</li>



<li>レスポンシブデザイン向けに、動的にHTML要素のクラス（.lt-1024等）を設定してくれる</li>
</ul>



<p>などなど、なかなか広い守備範囲です。 専門のスクリプトに敵わない部分もあると思いますが、「器用貧乏は美徳」をモットーとするわたくしとしてはとても他人とは思えず、大変気に入っています。</p>



<h2 class="wp-block-heading">リソースローダー機能拡張の経緯</h2>



<p>自分の中でhead.jsが最も大きな役割を果たしているのがリソースローダーの機能で、</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">head.js(
    <span class="hljs-string">"scripts/jquery.js"</span>,
    <span class="hljs-string">"scripts/underscore.js"</span>,
    <span class="hljs-string">"scripts/backbone.js"</span>,
    ...
);
</code></span></pre>


<p>などとすると、渡したパスのスクリプトをまとめて読みこんでくれます。 ですが、Require.jsとの2つの大きな違いをかねてよりもどかしく思っておりました。</p>



<ul class="wp-block-list">
<li>スクリプトをまとめてくれるコンパイラの存在</li>



<li>data-main属性でインポートしてくれるローダー</li>
</ul>



<p>他にも、強力な依存関係解決機能などがありますが、そこまで求めるならRequire.jsを素直に使うべきでしょう。 ジェネラリストはスペシャリストをその分野において超えない物。</p>



<h2 class="wp-block-heading">&#8220;head-require.js&#8221;</h2>



<p>そこで本題ですが、そのリソースローダー周りを解決する拡張機能を書いてみました。</p>



<h3 class="wp-block-heading"><a href="https://github.com/mach3/head-require">head-require</a></h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-h9u3VGNKvo4/UeLVOMDefjI/AAAAAAAACHU/uuqMBHEmapw/s500/20130715-02.png" alt="head-require by mach3"/></figure>



<p><a href="https://github.com/mach3/head-require">  </a></p>



<p>色々ごちゃごちゃと入っておりますが、ブラウザで使用する際の本体は <em>dist/head-require.js</em> あるいは <em>dist/head-require.min.js</em> です。</p>



<h2 class="wp-block-heading">基本的な使い方</h2>



<p>まずはHTMLで <em>head.js</em> と <em>head-require.js</em> を読み込みます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"scripts/head.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"scripts/head-require.js"</span> <span class="hljs-attr">data-main</span>=<span class="hljs-string">"scripts/main.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>ここでhead-require.jsの要素に記述した <em>data-main</em> 属性のスクリプトを自動的に読み込みます。 main.js の中身は、例えば次のような感じに。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">head.<span class="hljs-keyword">require</span>(
    <span class="hljs-string">"vendors/jquery.js"</span>,
    <span class="hljs-string">"vendors/underscore.js"</span>,
    <span class="hljs-string">"vendors/backbone.js"</span>,
    <span class="hljs-string">"app/myapp.js"</span>
);
</code></span></pre>


<p><em>head.require()</em> は、引数に渡したスクリプトをまとめて読み込んで順次実行していきます。 myapp.js の中身が実行される頃には、jQueryもBackboneも初期化されて使えるようになっています。 また、内部で使用している head.js() の特性上、スクリプトが実行される頃にはDOMも準備万端なのでDOM readyを待つ必要はありません。</p>



<h3 class="wp-block-heading">注意事項</h3>



<ul class="wp-block-list">
<li>スクリプトへのパスは、HTMLドキュメントではなく <em>main.jsからの相対パス</em> です。</li>



<li>最後の引数は、 <em>head.js()</em> のようにコールバックは受け取れません。</li>
</ul>



<h2 class="wp-block-heading">コンパイラ（Gruntタスク）</h2>



<p>コンパイラは <a href="http://gruntjs.com/">Grunt</a> を使用します。 CLIも用意はしましたが、Gruntの方が色々と捗るのではないでしょうか。</p>



<p>まずnpmでインストールします。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$ npm install head-<span class="hljs-built_in">require</span>
</code></span></pre>


<p>Gruntタスクの設定はこんな具合です。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-built_in">module</span>.exports = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">grunt</span>)</span>{
    grunt.npmLoadTasks(<span class="hljs-string">"head-require"</span>);
    grunt.initConfig({
        <span class="hljs-attr">headRequire</span>: {
            <span class="hljs-attr">dist</span>: {
                <span class="hljs-attr">options</span>: {
                },
                <span class="hljs-attr">files</span>: {
                    <span class="hljs-string">"scripts/dest.js"</span>: <span class="hljs-string">"scripts/main.js"</span>
                }
            }
        }
    });
};
</code></span></pre>


<p>中身は至って単純で、　<em>scripts/main.js</em> の中の <em>head.require()</em> に引数として渡されたファイル達を ひとつにかためたものを <em>scripts/dest.js</em> に突っ込んでいるだけです。</p>



<p><em>options</em> には以下の物が渡せます。</p>



<ul class="wp-block-list">
<li>uglify:Boolean (false) &#8211; uglify.jsでミニファイするかどうか</li>



<li>banner:String (&#8220;&#8221;) &#8211; ファイルの先頭にライセンス情報などを記したコメントをつけられます</li>



<li>head:String (&#8220;head&#8221;) &#8211; headオブジェクトの名前をhead_confで変更した時に</li>
</ul>



<h2 class="wp-block-heading">おまけ機能</h2>



<h3 class="wp-block-heading">appオブジェクト</h3>



<p><em>head-require.js</em> を読み込むと、<em>app</em> というオブジェクトがグローバルに生えます。 名前空間のように使うもよし、必要なければそっておいてあげてください。</p>



<p>appオブジェクトは簡単なゲッターセッターも備えているので、 アプリケーション間で共有したい値などあれば、どうぞ。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">app.set(<span class="hljs-string">"name"</span>, <span class="hljs-string">"MACH3"</span>);
app.get(<span class="hljs-string">"name"</span>); <span class="hljs-comment">// "MACH3";</span>

app.set({
    <span class="hljs-string">"name"</span>: <span class="hljs-string">"MACH3"</span>,
    <span class="hljs-string">"age"</span>: <span class="hljs-number">17</span>
});
app.get(); <span class="hljs-comment">// {"name": "MACH3", "age":17}</span>
</code></span></pre>


<p>衝突などを避けるためにappという名前を変更したい場合は、 <em>data-appname</em> 属性を使用します。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">...</span> <span class="hljs-attr">data-main</span>=<span class="hljs-string">"scripts/main.js"</span> <span class="hljs-attr">data-appname</span>=<span class="hljs-string">"myapp"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<h2 class="wp-block-heading">まとめ</h2>



<p>小中規模のサイトではわりと便利に使えています。 なにぶん目下開発中なもので、他にも実験中の隠し機能とかあったりしますが、 見つけたら優しくしてあげてください。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>条件分岐に特化したリソースローダー「yepnope.js」を試してみる</title>
		<link>https://blog.mach3.jp/2011/04/21/yepnope-js.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 21 Apr 2011 01:10:35 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[head.js]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Loader]]></category>
		<category><![CDATA[yepnope.js]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1773</guid>

					<description><![CDATA[最近ブログ記事のソースコードで見かけるようになった「yepnope.js」を試してみました。 条件分岐によって読むリソースを切り分ける事に特化したライブラリです。 yepnope.jsとは yepnope.js &#124; A  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>最近ブログ記事のソースコードで見かけるようになった「yepnope.js」を試してみました。<br />
条件分岐によって読むリソースを切り分ける事に特化したライブラリです。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/_JJkNs5Ixl70/Ta8a3xZKMfI/AAAAAAAABRc/0wOEy_xcmO0/201104210240.png" alt="条件分岐に特化したリソースローダー「yepnope.js」を試してみる"/></figure>



<p></p>



<span id="more-1773"></span>



<h2 class="wp-block-heading">yepnope.jsとは</h2>



<p><a href="http://yepnopejs.com/">yepnope.js | A Conditional Loader For Your Polyfills!</a></p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/_JJkNs5Ixl70/Ta8a8Txez6I/AAAAAAAABRg/KgUOlep2XoQ/201104210238.png" alt="yapnope.js"/></figure>



<p></p>



<p>手書き風のロゴがかわいい。</p>



<p><em>yep</em>はyes、<em>nope</em>はnoの口語体で、固く言えば「yesno.js」。<br />
与えた条件がtrueの場合とfalseの場合で読むJS/CSSを切り替えるのが得意な<br />
リソースローダーです。</p>



<h2 class="wp-block-heading">最も簡単なサンプル</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript">yepnope(<span class="hljs-string">"hoge.js"</span>);
yepnope(<span class="hljs-string">"style.css"</span>);
</code></span></pre>


<p>単一ファイルをロードするだけの簡単なサンプルです。<br />
内部的には、ドキュメント内で一番最初のScript要素を探して、<br />
その前にinsertBeforeしているみたい。</p>



<p>ちなみに、スクリプトローダーではなく<em>「リソースローダー」</em>なので<br />
JavaScriptだけではなくCSSもロード出来ます。</p>



<h2 class="wp-block-heading">複数ファイルを読んでみる</h2>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">yepnope</span>({
    <span class="hljs-attribute">load </span>: &#91; <span class="hljs-string">"hoge.js"</span>, <span class="hljs-string">"fuga.js"</span> ]
});
</code></span></pre>


<dl>
<dt>load</dt>
<dd>後述するtestの結果に関わらず、とにかく読み込む。</dd>
</dl>



<h2 class="wp-block-heading">条件分岐で読むJSを分ける</h2>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">yepnope</span>({
    <span class="hljs-attribute">test </span>: (<span class="hljs-string">'localStorage'</span> in window) &amp;&amp; window&#91;<span class="hljs-string">'localStorage'</span>] !== null,
    yep : &#91; <span class="hljs-string">"hoge.js"</span>, <span class="hljs-string">"fuga.js"</span> ], <span class="hljs-comment">/* testの結果がtrueの場合こっちを読む */</span>
    nope : &#91; <span class="hljs-string">"foo.js"</span>, <span class="hljs-string">"bar.js"</span> ] <span class="hljs-comment">/* testの結果がfalseの場合こっちを読む */</span>
});
</code></span></pre>


<dl>
<dt>test</dt>
<dd>基準となる条件文等</dd>
<dt>yep</dt>
<dd>testがtrueの時に読み込むファイル。単一ファイルの場合は文字列でも可。</dd>
<dt>nope</dt>
<dd>testがfalseの時に読み込むファイル。単一ファイルの場合は文字列でも可。</dd>
</dl>



<p>上の例は、localStorageが使用可能である場合は<em>yep</em>に設定したhoge.js,fuga.jsがロードされ、<br />
そうでない場合は<em>nope</em>に設定したfoo.js,bar.jsがロードされます。</p>



<h2 class="wp-block-heading">コールバックを設定する</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript">yepnope({
    <span class="hljs-attr">test</span> : (<span class="hljs-string">'localStorage'</span> <span class="hljs-keyword">in</span> <span class="hljs-built_in">window</span>) &amp;&amp; <span class="hljs-built_in">window</span>&#91;<span class="hljs-string">'localStorage'</span>] !== <span class="hljs-literal">null</span>,
    <span class="hljs-attr">yep</span> : &#91; <span class="hljs-string">"hoge.js"</span>, <span class="hljs-string">"fuga.js"</span> ],
    <span class="hljs-attr">nope</span> : &#91; <span class="hljs-string">"foo.js"</span>, <span class="hljs-string">"bar.js"</span> ]
    <span class="hljs-attr">callback</span> : <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"> url, result, key </span>)</span>{
        <span class="hljs-built_in">console</span>.log( url ); <span class="hljs-comment">/* ロードされたリソースのURL */</span>
        <span class="hljs-built_in">console</span>.log( result ); <span class="hljs-comment">/* testの結果（true|false） */</span>
        <span class="hljs-built_in">console</span>.log( key ); <span class="hljs-comment">/* yep|nope におけるインデックス（またはキー） */</span>
    },
    <span class="hljs-attr">complete</span> : <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-built_in">console</span>.log( <span class="hljs-string">"全部読み込み終わりました！"</span> );
    }
});
</code></span></pre>


<p>ロード完了時の処理を<em>callback/complete</em>で設定出来ます。<br />
ファイルのロードは非同期に行われる為、<br />
読むリソースを元に何かを処理したい場合はこれらのコールバックを使用します。</p>



<dl>
<dt>callback</dt>
<dd>リソースが読み込まれる度に呼ばれる。</dd>
<dt>complete</dt>
<dd>全リソースがロードし終えた時に一度だけ呼ばれる。</dd>
</dl>



<h2 class="wp-block-heading">「無ければ読めばいいじゃない」を実装する</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> Init = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">if</span>( !<span class="hljs-built_in">window</span>.MyClass ){ <span class="hljs-keyword">return</span>; }
    <span class="hljs-keyword">new</span> MyClass();
};

yepnope({
    <span class="hljs-attr">test</span> : <span class="hljs-built_in">window</span>.MyClass,
    <span class="hljs-attr">nope</span> : <span class="hljs-string">"myclass.js"</span>,
    <span class="hljs-attr">complete</span> : Init
});
</code></span></pre>


<p><strong>myclass.js</strong></p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> MyClass = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-built_in">console</span>.log( <span class="hljs-string">"Hello, MyClass"</span> );
};
</code></span></pre>


<p>MyClassが無い場合はjsファイルをロードしてから、<br />
既にある場合はスルーして<em>complete</em>が呼ばれるのでそのまま初期化。</p>



<p>コールバックで再度条件分岐をしているのは、myclass.jsが読み込めたかどうかの保証が無い為。<br />
myclass.jsが404でも、タイムアウト後に<em>complete</em>は呼ばれてしまいます。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>以前、<a href="/2011/03/headjs.html">ローダーもくっついている器用な「head.js」</a>を記事にしましたが、<br />
やはり特化したローダーともなると、さすがに色々と気が効いています。<br />
基本的にJavaScriptファイルはパックしてしまう事が多いのですが、<br />
新要素のフォールバック等にはかなり活用出来るかもしれませんね！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JS/CSSでふわりとフェードするボタンをつくる</title>
		<link>https://blog.mach3.jp/2011/03/24/fadebutton-by-js-and-css.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 24 Mar 2011 01:10:44 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[head.js]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Transitions]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1660</guid>

					<description><![CDATA[震災後、なんやかんやで2週間あけてしまいました。こんにちは、私は元気です。 今日は、せっかくCSS3で色々な事が出来るようになってきたところで、 ふわりとフェードするボタンの作りなどを記してみる。 作るもの こういったU [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>震災後、なんやかんやで2週間あけてしまいました。こんにちは、私は元気です。<br />
今日は、せっかくCSS3で色々な事が出来るようになってきたところで、<br />
ふわりとフェードするボタンの作りなどを記してみる。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/_JJkNs5Ixl70/TYozxeh8WgI/AAAAAAAABP4/5craRuCkCzI/201103240253.png" alt="JS/CSSでふわりとフェードするボタンをつくる"/></figure>



<p></p>



<span id="more-1660"></span>



<h2 class="wp-block-heading">作るもの</h2>



<ul class="wp-block-list">
<li>マウスオーバーすると、ふわーっと表示が切り替わるボタン。 </li>



<li>画像を二枚重ね、上の画像の透明度を変化させて表示を切り替える。</li>
</ul>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/_JJkNs5Ixl70/TYoz7kuit1I/AAAAAAAABP8/1gK5hFbzGZI/201103240254.png" alt="マウスオーバーすると、ふわーっと表示が切り替わるボタン"/></figure>



<p></p>



<p>こういったUIにあたるエフェクトは好みが別れる気がしますが、<br />
個人的にはリッチな感じがして結構好きです。</p>



<p>HTML</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"demo"</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"fadeButton"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span>&gt;</span>FadeButton<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></span></pre>


<p>基本となるCSS</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-id">#demo</span> {
    <span class="hljs-attribute">display</span>: block;
    <span class="hljs-attribute">width</span>: <span class="hljs-number">135px</span>;
    <span class="hljs-attribute">height</span>: <span class="hljs-number">135px</span>;
    <span class="hljs-attribute">background-position</span>: left top;
    <span class="hljs-attribute">background-repeat</span>: no-repeat;
    <span class="hljs-attribute">background-image</span>: <span class="hljs-built_in">url</span>(default.png);
}

<span class="hljs-selector-id">#demo</span> <span class="hljs-selector-tag">a</span> {
    <span class="hljs-attribute">display</span>: block;
    <span class="hljs-attribute">width</span>: <span class="hljs-number">135px</span>;
    <span class="hljs-attribute">height</span>: <span class="hljs-number">135px</span>;
    <span class="hljs-attribute">text-indent</span>: -<span class="hljs-number">9999px</span>;
    <span class="hljs-attribute">overflow</span>: hidden;
    <span class="hljs-attribute">background-position</span>: left top;
    <span class="hljs-attribute">background-repeat</span>: no-repeat;
    <span class="hljs-attribute">background-image</span>: <span class="hljs-built_in">url</span>(hover.png);
}
</code></span></pre>


<h2 class="wp-block-heading">まずはCSS3のTransitionsで</h2>



<p>Transitionsを使うと恐ろしく簡単なコードで実現できちゃいます。</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-class">.fadeButton</span> <span class="hljs-selector-tag">a</span> {
    <span class="hljs-attribute">opacity</span>: <span class="hljs-number">0</span>;
    <span class="hljs-attribute">-webkit-transition</span>: opacity .<span class="hljs-number">5s</span> linear;
}

<span class="hljs-selector-class">.fadeButton</span> <span class="hljs-selector-tag">a</span><span class="hljs-selector-pseudo">:hover</span> {
    <span class="hljs-attribute">opacity</span>: <span class="hljs-number">1</span>;
    <span class="hljs-attribute">-webkit-transition</span>: opacity .<span class="hljs-number">5s</span> linear;
}
</code></span></pre>


<p>ね、簡単でしょう？（ボブ</p>



<p>が、現在はまだサポートしているブラウザは少ないので、<br />
サポート外のブラウザについてはJavaScriptに頼らざるを得ません。</p>



<h2 class="wp-block-heading">Transition非対応の環境の為のJavaScriptを用意する</h2>



<p>Transition非対応のブラウザ用に、JavaScriptによるフォールバックを用意します。<br />
判別には<a href="/2011/03/headjs.html">先日紹介した「head.js」</a>を使用。</p>



<h3 class="wp-block-heading">CSSの:hoverスタイルを上書き</h3>



<p>非対応の場合の:hoverスタイルを無効にしておきます。<br />
Transitions非対応な場合は、head.jsが<br />
&#8220;no-csstransitions&#8221;をhtml要素のclassに追加してくれるので<br />
こんな感じで。</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-class">.no-csstransitions</span> <span class="hljs-selector-class">.fadeButton</span> <span class="hljs-selector-tag">a</span><span class="hljs-selector-pseudo">:hover</span>{
    <span class="hljs-attribute">opacity</span>:<span class="hljs-number">0</span>;
}
</code></span></pre>


<h3 class="wp-block-heading">JavaScriptでフェードイン/アウトさせる</h3>



<p>jQueryを使った次のようなコードで、<br />
大体似たようなエフェクトを付加させられます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">(<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-params">($)</span> </span>{
    <span class="hljs-keyword">if</span> (!head.transitions) { <span class="hljs-comment">// head.jsでTransitions対応を判別</span>
        $(<span class="hljs-string">".fadeButton"</span>).each(<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-params">()</span> </span>{
            <span class="hljs-keyword">var</span> <span class="hljs-keyword">self</span> = $(this);
            <span class="hljs-keyword">self</span>.bind({
                mouseover: <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-params">(e)</span> </span>{
                    <span class="hljs-keyword">self</span>.children(<span class="hljs-string">"a"</span>).stop().animate({
                        opacity: <span class="hljs-number">1</span>
                    }, <span class="hljs-number">500</span>);
                },
                mouseout: <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-params">(e)</span> </span>{
                    <span class="hljs-keyword">self</span>.children(<span class="hljs-string">"a"</span>).stop().animate({
                        opacity: <span class="hljs-number">0</span>
                    }, <span class="hljs-number">500</span>);
                }
            });
        });
    }
})(jQuery);
</code></span></pre>


<h2 class="wp-block-heading">デモ＆ファイナルコード</h2>



<p><a href="http://jsdo.it/mach3/1Voz">JS/CSSでふわりとフェードするボタンをつくる &#8211; jsdo.it &#8211; Share JavaScript, HTML5 and CSS</a></p>



<h2 class="wp-block-heading">注意！</h2>



<p>IEで透過PNGを使ってフェードしようとすると不具合が生じるので注意。<br />
DD_belatedPNG等を使って回避する必要があります。<br />
» <a href="/2011/02/png-and-opacity-on-explorer.html">IEの透過PNG+opacityの不具合を治すメモ | Mach3.laBlog</a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
