[CSS]スマートフォンで表示した際、サイドバーの広告を効果的な配置にするテクニック
Post on:2012年3月28日
当サイトのようにサイドバーに広告を掲載している人には朗報のテクニックを紹介します。
下記のようなサイドバーをもったレイアウトをスマートフォンなどの小さいサイズで表示する際、サイドバーのレイアウトをどのようにしますか?
通常(デスクトップ)時のレイアウト
サイドバーを全部、下に移動しますか?
[ad#ad-2]
サイドバーを全部下にしてしまうと残念な感じになるので、サイドバーの各広告をコンテンツの間に配置するテクニックを紹介します。
スマートフォンなどのレイアウト
[ad#ad-2]
デモ
このCSSのテクニックはCSS3 Regionsを使用しているため、Chrome16+, Safari5.2でご覧ください。
IE10もおそらく対応しています。
デモページ:幅1200pxで表示
スマートフォンやタブレットなど表示サイズが小さい時には、コンテンツの間にサイドバーの広告が配置されます。
デモページ:幅800pxで表示
実装
HTML
HTML5を使っての実装です。
ポイントとなるのは、メインコンテンツの各記事のarticle要素の間に、サイドバーの広告の移動先であるdiv要素を配置しておきます。また、サイドバーはaside要素内は空にしておいて、広告は別に配置します。
<section class="main-content"> <article> ... </article> <div class="ad-region-1"> <!-- empty, ads flow into here as needed --> </div> <article> ... </article> <div class="ad-region-2"> <!-- empty, ads flow into here as needed --> </div> <article> ... </article> <div class="ad-region-3"> <!-- empty, ads flow into here as needed --> </div> </section> <aside> <!-- Fallback content in this flow region, probably clone #ad-source --> </aside> <!-- Source of flowing content, essentially hidden as an element --> <div id="ad-source"> <a href="#"><img src="ads/1.jpg"></a> <a href="#"><img src="ads/2.jpg"></a> <a href="#"><img src="ads/3.jpg"></a> <a href="#"><img src="ads/4.png"></a> </div>
CSS
まずは対象となる要素を定義します。「ads」は任意の名前です。
#ad-source { -webkit-flow-into: ads; -ms-flow-into: ads; }
※2012年3月現在、対応ブラウザはWebkit系とIE10なのでベンダープレフィックスも2つだけです。
次に、サイドバー(aside)と記事間のdiv要素(ad-region)にこのコンテンツを配置してみましょう。
aside, [class^='ad-region'] { -webkit-flow-from: ads; -ms-flow-from: ads; }
最後に、Media Queriesを使って設定します。
[class^='ad-region'] { display: none; height: 155px; width: 100%; /* Weird that this is required */ } @media (max-width: 800px) { [class^='ad-region'] { display: block; } [class^='ad-region']:last-child { height: 300px; /* I wish height auto worked */ } aside { display: none; } }
sponsors