<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>CSSデザインノート</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/" />
    <link rel="self" type="application/atom+xml" href="http://www.coolwebwindow.com/csstips/atom.xml" />
    <id>tag:www.coolwebwindow.com,2008-08-15:/csstips//4</id>
    <updated>2010-03-06T05:47:26Z</updated>
    <subtitle>CSS（カスケードスタイルシート）のメモ帳</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.21-ja</generator>

<entry>
    <title>CSS3のアニメーション機能を利用してメニューを彩る</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/csstechnic/000274.php" />
    <id>tag:www.coolwebwindow.com,2010:/csstips//4.274</id>

    <published>2010-03-06T05:30:46Z</published>
    <updated>2010-03-06T05:47:26Z</updated>

    <summary> 小技の効いたサイトを発見しました。 せせらぎダイニング このサイトで、左のメニ...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="CSSの小技" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="メニュー" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css3transition" label="CSS3 transition" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
小技の効いたサイトを発見しました。
</p>
<p class="link">
<a href="http://www.seseragidining.jp/">せせらぎダイニング</a>
</p>
<p>
このサイトで、左のメニューにカーソルを合わせると英語表記のところがゆっくりと色が変化していくのがわかると思います。トランジション効果と言えばよいのでしょうか、アニメーション処理がしてあります。
</p>
<p>
このサイトの場合は、画像のロールオーバー時に、JavaScriptでアニメーション処理をしていると思うのですが、今回画像なしで似たような動作をやってみます。CSS3とそれに対応しているブラウザを使用します。残念ながら現在はSafari4.0とGoogle Chomeしか動作しないようです。
</p>
<p>
<h3>サンプル</h3>
<p class="link">
<a href="/csstips/sample/000274">サンプルはこちらから</a>
</p>
<h3>動作確認</h3>
<p>
Google Chrome 4.0、Safari 4.0.4 for Windows XPです。
</p>
<p>
CSS3はまだ正式勧告されていないので、使用する場合にはプロパティの前にベンダープリフィックスと呼ばれる接頭辞をつける必要があります。SafariおよびChomeは｢-webkit-｣です。
</p>
<p class="textHTML">(X)HTMLコード</p>
<pre class="HTML prettyprint"><code>&lt;ul&gt;
&lt;li&gt;&lt;a href="concept.html"&gt;コンセプト&lt;span&gt;&lt;br /&gt;CONCEPT&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="menu1.html"&gt;メニュー&lt;span&gt;&lt;br /&gt;MENU&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;新着・お得情報&lt;br /&gt;&lt;span&gt;NEW&amp;EVENTS&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;お問合せ・ご予約&lt;br /&gt;&lt;span&gt;CONTACT&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="info.html"&gt;店舗情報・地図&lt;br /&gt;&lt;span&gt;INFORMATION&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</code></pre>
<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>ul {
   width:200px;
   background:#735D4A;
   margin:0;
   padding:0 10px;
}

li {
   list-style:none;
   border-bottom:#524139 1px solid;
}

li:last-child {
   border-bottom:none;
}

li a {
   display:block;
   padding:15px 0 15px 30px;
   font-family:"ＭＳ 明朝",serif;
   color:#F7F3EF;
   font-size:14px;
   text-shadow:2px 2px 2px rgba(0,0,0,0.6);
   -moz-text-shadow:2px 2px 2px rgba(0,0,0,0.6);
   -webkit-text-shadow:2px 2px 2px rgba(0,0,0,0.6);
   line-height:1.4;
   letter-spacing:1px;
   background:url("bg_list.gif") 10px 50% no-repeat;
   text-decoration:none;
   outline: none;
}

li a span {
   color:#080808;
   font-family: "arial",sans-serif;
   font-size:10px;
   text-shadow:none;
   -moz-text-shadow:none;
   -webkit-text-shadow:none;
   -webkit-transition-duration:0.4s;
}

li a:hover span {
   color:#F79239;
}</code></pre>
<p>
｢-webkit-transition-duration:0.4s｣というのがアニメーション部分の指定になります。メニューをマウスオーバーしたときに、英語表記の部分だけが0.4秒かけて色がゆっくりと変わります。
</p>
<p>
また、CSS3のテキストにシャドーをつけれる｢text-shadow｣、親子関係の最後の子要素だけに適用する｢:last-child｣も併せて使用しています。
</p>]]>
        
    </content>
</entry>

<entry>
    <title>コンテンツ量が少なくてもデザインくずれを起こさないようにフッターを固定する</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/csstechnic/000273.php" />
    <id>tag:www.coolwebwindow.com,2010:/csstips//4.273</id>

    <published>2010-02-26T23:18:29Z</published>
    <updated>2010-02-26T23:30:10Z</updated>

    <summary> ホームページのデザインによっては、コンテンツ部分が少ないとフッターの下に余白が...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="CSSの小技" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="レイアウト" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
ホームページのデザインによっては、コンテンツ部分が少ないとフッターの下に余白ができてかっこ悪くなる場合があります。
そのような場合には、フッターを固定する事でデザインのくずれを防ぐことができます。
</p>
<p>
ポイントは｢フッター以外の要素を囲むブロック要素｣と｢フッターを囲む要素｣を作る事です。このブロック要素にpading-bottomで、フッター分の余白を設け、フッターをposition:relativeで位置を決めます。ここで重要な事はフッターの縦の大きさは固定でなければならないということです。
</p>
<h3>サンプル</h3>
<p>
当サイトで配布しているCSSテンプレート｢pub002｣をフッター固定にしてみました。
</p>
<p class="link">
<a href="/csstips/sample/000273/">サンプルはこちらから</a>
</p>
<h3>動作確認</h3>
<p>

Firefox3.5.8、Google Chrome 4.0、Safari 4.0.4、Opera 10.10、IE6 for Windows XPです。
</p>
<p class="textHTML">(X)HTMLコード</p>
<pre class="HTML prettyprint"><code>&lt;div id="top"&gt;
   &lt;div id="header"&gt;&lt;/div&gt;&lt;!-- header end --&gt;
   &lt;div id="contents"&gt;
      &lt;div id="main"&gt;&lt;/div&gt;&lt;!-- main end --&gt;
      &lt;div id="sub"&gt;&lt;/div&gt;&lt;!-- sub end --&gt;
   &lt;/div&gt;&lt;!-- contents end --&gt;
&lt;/div&gt;&lt;!-- top end --&gt;
&lt;div id="footerWrap"&gt;
   &lt;div id="footer"&gt;
      &lt;div id="totop"&gt;&lt;/div&gt;
      &lt;div id="footerMenu"&gt;&lt;/div&gt;&lt;!-- footerMenu end --&gt;
   &lt;/div&gt;&lt;!-- footer end --&gt;
&lt;/div&gt;&lt;!-- footerWrap end --&gt;</code></pre>

<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>/* ========FOOTER FIX======== */
* {
   margin:0;
}

html,
   body,
   div#top {
   height:100%;
}

body > div#top {
   height: auto;
   min-height: 100%;
}

div#contents {
   padding-bottom:150px;/* フッターの高さと同じ値にする */
}

div#footerWrap {
   position:relative;
   margin-top:-150px;/* フッターの高さと同じ値にする */
   height:150px;/* フッターの高さを指定 */
}</code></pre>]]>
        
    </content>
</entry>

<entry>
    <title>カーソルを合わせたメニューを強調する</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/csstechnic/000270.php" />
    <id>tag:www.coolwebwindow.com,2010:/csstips//4.270</id>

    <published>2010-01-20T13:41:34Z</published>
    <updated>2010-01-22T09:55:41Z</updated>

    <summary> CSS HappyLifeの平澤さんが新しいサイト「CSS HappyLife...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="CSSの小技" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="メニュー" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="rollover" label="roll-over" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
<a href="http://css-happylife.com/">CSS HappyLife</a>の平澤さんが新しいサイト「<a href="http://css-happylifezero.com/">CSS HappyLife ZERO</a>」をオープンされたのですが、そのメニュー部分がとても素敵だったので、参考に同じようなものを作ってみました。
</p>
<p>
ちなみに全くソースコードは拝見していませんので、同じようには作られてはいないと思います。
</p>
<p>
前回の記事「<a href="http://www.coolwebwindow.com/csstips/csstechnic/000265.php">アクセシビリティの高いCSSロールオーバーメニュー</a>」を参考にすれば、比較的簡単に作れそうです。
</p>
<h3>サンプル</h3>
<p class="link">
<a href="/csstips/sample/000270/">サンプルはこちらから</a>
</p>
<h3>動作確認</h3>
<p>
Firefox3.5.7、Google Chrome 3.0、Safari 4.0.4 for Windows XPです。IE6はhoverに対応していませんので、強調する効果は得られませんが、不具合なく表示する事はできます。<del>Opera 10.10は正常に動作しません。なぜでしょう。</del>「ul#menu li a」に「display:inline-block;」を追加するとちゃんと動作しました。
</p>
<p class="textHTML">(X)HTMLコード</p>
<pre class="HTML prettyprint"><code>&lt;ul id="menu"&gt;
   &lt;li class="menu1"&gt;&lt;a href="#" class="current"&gt;&lt;img src="images/menu1.gif" alt="menu1" /&gt;&lt;/a&gt;&lt;/li&gt;
   &lt;li class="menu2"&gt;&lt;a href="#"&gt;&lt;img src="images/menu2.gif" alt="menu2" /&gt;&lt;/a&gt;&lt;/li&gt;
   &lt;li class="menu3"&gt;&lt;a href="#"&gt;&lt;img src="images/menu3.gif" alt="menu3" /&gt;&lt;/a&gt;&lt;/li&gt;
   &lt;li class="menu4"&gt;&lt;a href="#"&gt;&lt;img src="images/menu4.gif" alt="menu4" /&gt;&lt;/a&gt;&lt;/li&gt;
   &lt;li class="menu5"&gt;&lt;a href="#"&gt;&lt;img src="images/menu5.gif" alt="menu5" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</code></pre>
<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>img {
   border:0;
}

ul#menu {
   float:left;
   margin:0;
   padding:0;
}

ul#menu:hover {
   background: url(images/bg_menu_hover.gif) no-repeat;
}

ul#menu li {
   float:left;
   margin:0;
   padding:0;
   list-style:none;
}

ul#menu li a {
   display:block;
   display:inline-block;
   width:100px;
   height:30px;
}

ul#menu li a:hover,
ul#menu li a.current {
   background-image:url(images/bg_menu_on.gif);
}

ul#menu li.menu1 a:hover,
ul#menu li.menu1 a.current {
   background-position:0 0;
}

ul#menu li.menu2 a:hover,
ul#menu li.menu2 a.current {
   background-position:-100px 0;
}

ul#menu li.menu3 a:hover,
ul#menu li.menu3 a.current {
   background-position:-200px 0;
}

ul#menu li.menu4 a:hover,
ul#menu li.menu4 a.current {
   background-position:-300px 0;
}

ul#menu li.menu5 a:hover,
ul#menu li.menu5 a.current {
   background-position:-400px 0;
}

ul#menu li img {
   position:relative;
   z-index:-1;
}</code></pre>
<p>
考え方としては、リスト（ul）の背景に目立たない用のリスト画像を指定し、特定のメニューにカーソルがあったときはそのメニューだけオンマウス用の画像に切り替え、他のメニューはリストの一番下に回りこませてることにより目立たない用のリスト画像が表示されるというわけです。
</p>
<p>
また、現在表示しているページのメニューも目立たせたい場合は、a要素にcurrentというクラス名をつけて、CSSのほうで個別にスタイルを指定するとよいと思います。
</p>
]]>
        
    </content>
</entry>

<entry>
    <title>基本的な縦型リストの作り方</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/csstechnic/000266.php" />
    <id>tag:www.coolwebwindow.com,2009:/csstips//4.266</id>

    <published>2009-12-30T01:29:22Z</published>
    <updated>2009-12-30T02:07:39Z</updated>

    <summary> 基本のHTMLソースコードは以下のとおりです。divでリストを囲まなくてもよい...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="CSSの小技" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="メニュー" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
基本のHTMLソースコードは以下のとおりです。divでリストを囲まなくてもよいですが、メニュー部分ということがわかりやすいですし、デザインに幅が広がります。
class名は｢section｣でなくて、｢menu｣や｢submenu｣などでもよいです。
</p>
<p class="textHTML">(X)HTMLコード</p>
<pre class="HTML prettyprint"><code>&lt;div class="section"&gt;
&lt;h2&gt;メニュー&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#"&gt;HOME&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;最新情報&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;事業内容&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;会社概要&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;採用情報&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;お問い合わせ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;!-- /section --&gt;</code></pre>

<h3>デザイン案１</h3>
<p>
ではデザインです。まずは基本ということで、リストマークを画像化、テキスト部分がアンカーになっているデザインにします。
</p>
<p>
<p class="textSample">サンプル</p>
<div id="csstips000266-1" class="sample">
<div class="section">
<h2>メニュー</h2>
<ul>
<li><a href="#">HOME</a></li>
<li><a href="#">最新情報</a></li>
<li><a href="#">事業内容</a></li>
<li><a href="#">会社概要</a></li>
<li><a href="#">採用情報</a></li>
<li><a href="#">お問い合わせ</a></li>
</ul>
</div><!-- /sample1 -->
</div>
<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>div.section {
   width:200px;
   padding:3px;
   background:#E7E7E7;
}

div.section h2 {
   margin:0;
   font-size:12px;
   color:#fff;
   line-height:3.0;
   padding:2px 5px 0px 5px;
   background:#3C3C3C;
}

div.section ul{
   margin:5px 0 0 0;
   padding:0;
   list-style:none;
}

div.section li{
   margin:0 0 0 5px;
   padding-left:10px;
   font-size:12px;
   line-height:2.0;
   border-bottom:1px solid #fff;
   background:url(bg_list.gif) 0 50% no-repeat;
}

div.section a {
   color:#5A5D00;
   text-decoration:none;
}

div.section a:hover {
   color:#7B8200;
   border-bottom:1px solid #7B8200;
}</code></pre>
<p>
リストマークを画像化するためには、ulでlist-style(-type)をnoneにし、liの背景画像でリストを表示するのが一般的です。リストの位置は、background-posionで指定（今回は一括指定しています。）、リストとテキストの余白はliのpadding-leftで調整します。
</p>
<h3>デザイン案２</h3>
<p>
上記の場合、アンカー領域がテキスト部分のみなので、人によってはクリックしにくい場合もあるかもしれません。そういう場合は、リスト部分をアンカー領域にしてクリックしやすくします。
</p>
<p class="textSample">サンプル</p>
<div id="csstips000266-2" class="sample">
<div class="section">
<h2>メニュー</h2>
<ul>
<li><a href="#">HOME</a></li>
<li><a href="#">最新情報</a></li>
<li><a href="#">事業内容</a></li>
<li><a href="#">会社概要</a></li>
<li><a href="#">採用情報</a></li>
<li><a href="#">お問い合わせ</a></li>
</ul>
</div><!-- /sample2 -->
</div>
<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>div.section {
   width:200px;
   padding:3px;
   background:#E7E7E7;
}

div.section h2 {
   margin:0;
   font-size:12px;
   text-align:center;
   background:#295DAD url(bg_h2.gif) 0 0;
   line-height:3.0;
   color:#fff;
}

div.section ul {
   margin:0;
   padding:0;
   list-style-type:none;
}

div.section li {
   margin:0;
   padding:0;
   font-size:12px;
   color:#333;
   padding-bottom:1px;
   background:#fff url(bg_dotline.gif) 0 100% repeat-x;
}

div.section li a {
   display:block;
   color:#7C9C2D;
   padding:10px 0 10px 20px;
   background:#fff url(bg_list.gif) 5px 50% no-repeat;
}

div.section li a:hover {
   color:#9CC23D;
   background:#fff url(bg_list.gif) 5px 50% no-repeat;
}</code></pre>

<p>
ポイントは、a要素を｢display:block;｣でブロック要素にすることです。そして、リストの画像をli要素ではなくa要素に指定する事です。こうすることで、リストマークのところまでクリックできるようになります。
</p>]]>
        
    </content>
</entry>

<entry>
    <title>アクセシビリティの高いCSSロールオーバーメニュー</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/csstechnic/000265.php" />
    <id>tag:www.coolwebwindow.com,2009:/csstips//4.265</id>

    <published>2009-12-29T03:11:09Z</published>
    <updated>2009-12-29T03:32:16Z</updated>

    <summary> これまでロールオーバーメニューをCSSのみで作ろうとした場合、ちらつきが起こっ...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="CSSの小技" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="メニュー" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="rollover" label="roll-over" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
これまでロールオーバーメニューをCSSのみで作ろうとした場合、ちらつきが起こったり、画像をオフにしていたら見れなかったり、アクセシビリティが低くなってしまっていました。
</p>
<p>
しかし、ある程度これらを克服したCSSの書き方がありました！しかも非常にCSSソースコードがコンパクトになっています。
</p>
<p class="link">
<a href="http://css-eblog.com/css-only/dkir-rollover.html">ピュアCSSで実装するDKIRを応用した画像ボタンのロールオーバー効果 | CSS-EBLOG</a>
</p>
<p>
詳細は上記のブログを参考にしていただければと思います。
</p>
<p>
ポイントは画像の使い方でしょうか。
HTMLにて&lt;img src="" alt="" /&gt;でマウスオーバー前の画像を表示、CSSにて背景画像でマウスオーバー時の画像を配置し、マウスオーバー時に表示する範囲をbackground-positionで設定しています。
</p>
<p>
これらの画像をz-indexでレイヤーの順番を変更にする事で、重なった画像がうまく表示されるという仕組みですね。
</p>
<p>
本来display:-9999pxで画面外にとばしてしまうところですが、うまく下のレイヤーに隠すとはなかなか面白いですね。
</p>
<p>
altでメニューの代替テキストを表示することで、画像がオフだったり読み込まれないときでも一応読めます。
</p>
<p>
また、最初からマウスオーバー時の画像を読み込んでいるので、マウスオーバー時にちらつきが発生することもありません。
</p>
<p>
難点は画像を作るのが面倒ってことですかね。メニュー個別に分かれたマウスオーバー前の画像と、マウスオーバー時の全てのメニューがくっついた画像を用意しないといけないのは、少し手間がかかりますね。その分、CSSソースコードはシンプルになるのですが。
</p>
<p>
ソースコードを引用させていただきます。
</p>
<p class="textHTML">(X)HTMLコード</p>
<pre class="HTML prettyprint"><code>&lt;ul id="menu"&gt;
   &lt;li class="home"&gt;&lt;a href="#"&gt;&lt;img src="btn_home.png" alt="HOME" /&gt;&lt;/a&gt;&lt;/li&gt;
   &lt;li class="product" id="current"&gt;&lt;a href="#"&gt;&lt;img src="btn_product.png" alt="Product" /&gt;&lt;/a&gt;&lt;/li&gt;
   &lt;li class="about"&gt;&lt;a href="#"&gt;&lt;img src="btn_about.png" alt="About" /&gt;&lt;/a&gt;&lt;/li&gt;
   &lt;li class="blog"&gt;&lt;a href="#"&gt;&lt;img src="btn_blog.png" alt="Blog" /&gt;&lt;/a&gt;&lt;/li&gt;
   &lt;li class="contact"&gt;&lt;a href="#"&gt;&lt;img src="btn_contact.png" alt="Contact" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</code></pre>

<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>#menu li {
	float: left;
	position: relative;
	z-index: 3;
}
#menu li a {
	background: url(menu.png) left top no-repeat;
	display: -moz-inline-box; /* Firefox2 用のスタイル */
	display: inline-block;
}
#menu li.product a { background-position: -135px 0; }
#menu li.about a { background-position: -255px 0; }
#menu li.blog a { background-position: -375px 0; }
#menu li.contact a { background-position: -495px 0; }
#menu li a:hover {
	position: static;
}
#menu li a:hover img ,
#menu li#current a img {
	position: relative;
	z-index: -1;
}</code></pre>
<h3>参考サイト</h3>
<p class="link">
<a href="http://css-eblog.com/css-only/dkir-rollover.html">ピュアCSSで実装するDKIRを応用した画像ボタンのロールオーバー効果 | CSS-EBLOG</a>
</p>]]>
        
    </content>
</entry>

<entry>
    <title>IE6でもposition:fixedと同じ動作をさせる(改訂版）</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/csstechnic/000264.php" />
    <id>tag:www.coolwebwindow.com,2009:/csstips//4.264</id>

    <published>2009-12-29T01:23:32Z</published>
    <updated>2009-12-29T02:23:34Z</updated>

    <summary> 以前、IE6でもposition:fixedと同じ動作をさせるというコラムを書...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="CSSの小技" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="レイアウト" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="fixed" label="fixed" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="position" label="position" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
以前、<a href="/csstips/csstechnic/templatelayout/000256.php">IE6でもposition:fixedと同じ動作をさせる</a>というコラムを書きましたが、実際にデザインしているときに不具合に気づきました。
</p>
<p>
例えば、fixはしたくないけどもposition:absoluteで絶対配置したいボックスが、スクロールすると画面に固定になってしまうのです。当たり前なのですが。
</p>
<p>
よってIEの場合、スクロールするためのdivボックス（scrollボックス）を用意し、fix表示したいボックスはscrollボックスより外に出すようにしなければなりません。
scrollボックスでスクロールするようにしているので、htmlおよびbodyではスクロールしないようにします。
</p>
<p class="link">
<a href="/csstips/sample/sample000264.html">サンプルページはこちらから</a>
</p>
<p>
ソースコードは以下のとおりです。
</p>
<p class="textHTML">(X)HTMLコード</p>
<pre class="HTML prettyprint"><code>&lt;div id="scroll"&gt;
   &lt;div id="contents"&gt;
      &lt;div class="absolute"&gt;絶対配置で表示したい要素&lt;/div&gt;
   &lt;/div&gt;&lt;! -- /contents --&gt;
&lt;/div&gt;&lt;! -- /scroll --&gt;
&lt;div id="fix"&gt;固定したい要素&lt;/div&gt;</code></pre>

<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>/* IE6用 */
* html ,
* html body {
   height:100%;
   overflow:hidden;
}

* html #scroll {
   position:relative;
   width:100%;
   height:100%;
   overflow-y:auto;
   overflow-x:hidden;
}

/* 共通 */
div#contents {
   position:relative;
}

div#absolute {
   position:absolute;
   top:0;
   right:0;
}

div#fix {
   position:fixed;
   top:100%;
   right:100%;
}

/* IE6用 */
* html div#fix {
   position:absolute;
}</code></pre>

<h3>参考サイト</h3>
<p class="link"><a href="http://css-eblog.com/csstechnique/position-fixed-forie6.html">CSSのみでIE6にposition:fixedを対応させる | CSS-EBLOG</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>IEでimgにpaddingが効かない</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/help/000261.php" />
    <id>tag:www.coolwebwindow.com,2009:/csstips//4.261</id>

    <published>2009-11-03T11:19:49Z</published>
    <updated>2009-11-03T11:24:36Z</updated>

    <summary> 例えば、画像をポラロイド風に見せたいときなど、画像にpaddingを指定しても...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="ヘルプ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="ie" label="IE" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="padding" label="padding" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
例えば、画像をポラロイド風に見せたいときなど、画像にpaddingを指定しても有効にならない場合があります。
</p>
<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>img {
   padding:2px;
   border:1px solid #999;
}</code></pre>
<p>
これは(X)HTMLファイルが互換モードになっているためです。DOCTYPE宣言で標準モードにすればpaddingが有効になります。
</p>
<p>
]]>
        
    </content>
</entry>

<entry>
    <title>横並びにした画像にテキストが回りこまないようにする方法</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/csstechnic/000260.php" />
    <id>tag:www.coolwebwindow.com,2009:/csstips//4.260</id>

    <published>2009-11-03T11:10:43Z</published>
    <updated>2009-11-03T11:19:26Z</updated>

    <summary> 例えば、Amazonのアフィリエイトみたいに、書籍の画像と説明文を横並びにする...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="CSSの小技" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="レイアウト" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="float" label="float" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="margin" label="margin" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="overflow" label="overflow" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="zoom" label="zoom" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
例えば、Amazonのアフィリエイトみたいに、書籍の画像と説明文を横並びにする方法です。
説明文が長いとき画像の下に回りこまないのが美しいですよね。方法は二通りあります。
</p>
<ol>
<li>marginで指定</li>
<li>overflowで指定</li>
</ol>
<p>
以下にサンプル画像を示します。
</p>
<p><img src="/csstips/images/csstechnic/000260-01.gif" alt="サンプル画像" /></p>

<p>
基本の(X)HTMLコードは以下のようになります。
</p>
<p class="textHTML">(X)HTMLコード</p>
<pre class="HTML prettyprint"><code>
&lt;div class="column"&gt;
&lt;img src="image.gif" alt="" /&gt;
&lt;p&gt;
テキストテキストテキストテキストテキスト
・・・（略）・・・
テキストテキストテキストテキストテキスト
&lt;/p&gt;
&lt;/div&gt;</code></pre>

<h3>１．marginで指定</h3>
<p>
画像の横幅が固定の場合は、その大きさ分をmarginで空けます。
</p>

<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>.column img{
   float:left;
}

.column p{
   margin-left:160px;
}</code></pre>
<p>
この場合、次の要素も回り込んだままなので、clearなどを指定して回り込みを解除しなければなりません。
</p>
<h3>２．overflowで指定</h3>
<p>
画像の横幅が未知の場合は、余白を固定することが出来ません。overflowを使用することで、テキストが回り込まなくなります。
</p>
<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>.column img{
   float:left;
}

.column p{
   overflow:hidden;
   zoom:1;
}</code></pre>

<p>
｢zoom:1;｣はIE6でレイアウトが崩れるのを防ぐために指定します。
</p>]]>
        
    </content>
</entry>

<entry>
    <title>余白のあるメニューの特定の余白を消す方法</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/csstechnic/000259.php" />
    <id>tag:www.coolwebwindow.com,2009:/csstips//4.259</id>

    <published>2009-11-02T14:52:14Z</published>
    <updated>2009-11-03T10:21:23Z</updated>

    <summary> 横並びのメニューで、左側あるいは右側にmarginで余白を空けた際、最初あるい...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="CSSの小技" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="メニュー" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="float" label="float" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="margin" label="margin" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="overflow" label="overflow" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
横並びのメニューで、左側あるいは右側にmarginで余白を空けた際、最初あるいは最後のメニュー部分だけ余白は必要ではありませんよね。classを指定しないで余白を消す方法です。
</p>
<p><img src="/csstips/images/csstechnic/000259-01.gif" alt="横並びのメニュー"></p>
<p>
first-childあるいはlast-childセレクタを使用すれば簡単に実現できますが、IE6など一部のブラウザでは対応していません。そこで、ネガティブマージンを使用することで、無駄にclassを指定することなく、最後の余白だけ消すことが出来ます。
</p>
<p class="textHTML">(X)HTMLコード</p>
<pre class="HTML prettyprint"><code>&lt;div class="menu"&gt;
&lt;ul&gt;
&lt;li&gt;メニュー1&lt;/li&gt;
&lt;li&gt;メニュー2&lt;/li&gt;
&lt;li&gt;メニュー3&lt;/li&gt;
&lt;li&gt;メニュー4&lt;/li&gt;
&lt;/ul&gt;
&lt;/div &gt;</code></pre>


<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>div.menu {
   width:430px;
   border: solid 1px #000;
}

div.menu ul {
   margin:0;
   padding:0;
   margin-right:-10px;
   overflow:hidden;
   list-style:none;
   zoom:1;
}

* html div.menu ul { /* for IE6 */
   margin-right:-20px;
}

div.menu ul li {
   float:left;
   width:100px;
   margin-right:10px;
   padding:10px 0;
   text-align:center;
   background:#ddd;
}</code></pre>

<p>
liにmargin-right:10px;を指定して右側に余白を空け、ulにmargin-right:-10px;を指定してリストの一番右側の余白を相殺します。
</p>
<p>
IE6ではfloatしたボックスのmarginの値が2倍になるバグがあるので、* htmlハックを利用してIE6用に、2倍の-20pxをulの右側の余白に指定します。このバグを回避する方法はいくつかあるのですが（例えば「display:inline;」を指定する）、今回はこのような処置を取ります。
</p>
<p>
IE6でネガティブマージンを有効にするために「zoom:1;」を指定します。これはhasLayoutプロパティの値をtrueにするためです。hasLayoutに関しては、以下のサイトなどを参考にしてください。
</p>
<p class="link">
<a href="http://labs.unoh.net/2007/09/what-is-haslayout.html">ウノウラボ Unoh Labs: hasLayoutとは何か</a>
</p>
<p>
floatを解除するのに「overflow:hidden;」を使用していますが、以下のページに書いてあるような方法でも構いません。
</p>
<p class="link">
<a href="http://www.coolwebwindow.com/csstips/csstechnic/000242.php">floatしたボックスの回り込みを解除する方法 - CSSデザインノート</a>
</p>]]>
        
    </content>
</entry>

<entry>
    <title>first-childあるいはlast-childを使用しないでリストの罫線を消す方法</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/csstechnic/000258.php" />
    <id>tag:www.coolwebwindow.com,2009:/csstips//4.258</id>

    <published>2009-11-02T11:51:55Z</published>
    <updated>2009-11-02T12:18:24Z</updated>

    <summary> 例えば、以下のようなデザインにしたいとき、liにborder-bottomを指...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="CSSの小技" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="テキストレイアウト" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
例えば、以下のようなデザインにしたいとき、liにborder-bottomを指定して、最後のliだけborder-bottomをなしにしなければなりません。
</p>
<p><img src="/csstips/images/csstechnic/000258-01.gif" alt="リスト" /></p>
<p>
特定のclassを使用したくない場合、first-childあるいはlast-childセレクタを使用すると簡単に実現できるのですが、IE6ではそれらが実装されていないため使用することが出来ません。
</p>
<p>
｢over-flow:hidden」とネガティブマージン「margin-bottom:-1px」、それとIE6のバグを回避するための「zoom:1」を駆使することでIE6でも無駄にclassを振らずに最後のliのborderを消すことが出来ます。
</p>
<p class="textHTML">(X)HTMLコード</p>
<pre class="HTML prettyprint"><code>&lt;div class="memo"&gt;
&lt;h2&gt;メモ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;abcdefghijklmn&lt;/li&gt;
&lt;li&gt;あいうえこかきくけこさしすせそ&lt;/li&gt;
&lt;li&gt;あいうえこかきくけこさしすせそ&lt;/li&gt;
&lt;li&gt;あいうえこかきくけこさしすせそ&lt;/li&gt;
&lt;li&gt;あいうえこかきくけこさしすせそ&lt;/li&gt;
&lt;li&gt;あいうえこかきくけこさしすせそ&lt;/li&gt;
&lt;li&gt;あいうえこかきくけこさしすせそ&lt;/li&gt;
&lt;li&gt;あいうえこかきくけこさしすせそ&lt;/li&gt;
&lt;li&gt;あいうえこかきくけこさしすせそ&lt;/li&gt;
&lt;li&gt;abcdefghijklmn&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</code></pre>

<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>div.memo {
   border:1px solid #ddd;
}

div.memo h2 {
   margin:10px;
f   ont-size:160%;
}

div.memo ul {
   overflow:hidden;
   margin:10px 10px 0 10px;
   padding:0;
   list-style-position:inside;
   zoom:1;
}
 
div.memo ul li {
   margin:0;
   padding:10px 0;
   margin-bottom:-1px;
   border-bottom:1px solid #ddd;
}</code></pre>
<p>
liにborder-bottomで下線を表示し、margin-bottom:-1px;で下のマージンを1px小さくすると、borderが領域からはみ出ます。ulの領域からはみ出した部分を overflow:hidden;で見えなくしています。こうすることで、最後のliのborder-botomだけ見えなくなります。
</p>
<p>
同じような考えで、border-topにも適用できます。
</p>
<p>
IE6では原因はわからないのですが、英数字のみなどのテキストを入れると罫線がおかしくなったりするみたいです。
</p>
<p><img src="/csstips/images/csstechnic/000258-02.gif" alt="IE6でのリスト" /></p>]]>
        
    </content>
</entry>

<entry>
    <title>IE6でもposition:fixedと同じ動作をさせる</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/csstechnic/templatelayout/000256.php" />
    <id>tag:www.coolwebwindow.com,2009:/csstips//4.256</id>

    <published>2009-08-28T13:58:13Z</published>
    <updated>2009-12-29T01:34:18Z</updated>

    <summary> [追記：2009/12/29] デザインによっては動作不良を起こす事がわかりま...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="CSSの小技" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="レイアウト" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="fixed" label="fixed" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="position" label="position" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
[追記：2009/12/29]<br />
デザインによっては動作不良を起こす事がわかりました。改訂版を用意したのでそちらもあわせてご覧ください。
</p>
<p class="link">
<a href="/csstips/csstechnic/000264.php">IE6でもposition:fixedと同じ動作をさせる(改訂版） - CSSデザインノート</a>
</p>
<p>[追記ここまで]</p>
<p>
Webページをスクロールしても、ある要素を固定した位置で表示したいときがあります。例えば、｢ページのトップへの戻り｣のリンクやヘッダーメニューなどです。
</p>
<p>
固定配置をするためには｢position:fixed;｣を使用します。しかし、IE6ではfixedはサポートされていません。そこでCSSを駆使して、IE6でも擬似的に｢position:fixed;｣と同じ動作するように指定します。
</p>
<p>
ポイントは、普通スクロールする際、htmlタグのスクロールを使用しているのですが、それを非表示にしてbodyをスクロールさせます。
</p>
<p class="link"><a href="/csstips/sample/sample000256.html">サンプルページ</a></p>
<p>
<p class="textHTML">(X)HTMLコード</p>
<pre class="HTML prettyprint"><code>&lt;div id="totop"&gt;ページのトップへ戻る&lt;/div&gt;
&lt;div id="text"&gt; 
&lt;p&gt;テキストテキスト&lt;/p&gt;
&lt;p&gt;テキストテキスト&lt;/p&gt;
（略）
&lt;p&gt;テキストテキスト&lt;/p&gt;
&lt;p&gt;テキストテキスト&lt;/p&gt;
&lt;/div&gt;</code></pre>
<p>
最低限必要なCSSソースコードです。
</p>
<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>
#totop {
   position:fixed;
   right:0;
   bottom:0;
}

/* IE6用 */
* html {
   overflow:hidden;
}

* html body {
   height:100%;
   overflow:auto;
   margin:0;
}

* html #totop {
   position:absolute;
   right:16px;
}</code></pre>
<p>
注意点は、右の基点が、IE6ではブラウザの右端に対して、Firefoxなどの他のブラウザは、スクロールバーを含まない右端になります。つまり、IE6ではright:0を指定するとスクロールバーと要素が重なってしまいます。rightで位置を指定する場合、上記の例で言うと、IE6では｢* html #totop｣で指定、その他は｢#totop｣で指定します。
</p>

]]>
        
    </content>
</entry>

<entry>
    <title>CSSでドロップダウンメニュー</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/csstechnic/000254.php" />
    <id>tag:www.coolwebwindow.com,2009:/csstips//4.254</id>

    <published>2009-08-19T11:09:17Z</published>
    <updated>2009-08-19T15:03:56Z</updated>

    <summary> ドロップダウンメニューのようなダイナミックな動作はJavaScriptが得意と...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="CSSの小技" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="メニュー" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
ドロップダウンメニューのようなダイナミックな動作はJavaScriptが得意としますが、CSSだけでも実装可能です。
</p>
<p>
JavaScriptを使用せず、CSSのみでドロップダウンメニューを作成するポイントは以下の3つ。
</p>
<ol>
<li>postionプロパティ、displayプロパティを駆使する</li>
<li>ダイナミック擬似クラスhoverを使用する</li>
<li>子セレクタを使用する</li>
</ol>
<p>
問題はIE6では、hoverはa要素しか適用範囲でないこと、さらに子セレクタも適用されないということです。
</p>
<p>
<a href="http://code.google.com/p/ie7-js/">ie7-js</a>という、IE6でもa要素以外にも:hoverが使えたり子セレクタが使用できるスクリプトがあるので、それを利用することで代用が利きます。
</p>
<p>
今回は<a href="http://code.google.com/p/ie7-js/">ie7-js</a>を使用せず、どこまでできるかやってみたいと思います。
</p>
<p>
子孫セレクタを応用すると、IE6でも子セレクタと同様の動作するので、そちらのテクニックを使用します。以下のページを参考にしてください。
</p>
<p>
<a href="http://www.coolwebwindow.com/csstips/csstechnic/templatelayout/000253.php">IE6でも子セレクタを使う - CSSデザインノート</a>
</p>
<p>
hoverはダイナミックな動きですので、やはりJavaScriptを使用しなければなりません。簡単なのは、IEの独自拡張であるexpression() 関数を使用します。これはCSS内でJavaScriptコードを読み込めるものです。ただし、CSSの仕様にないものですので、ソースコードはinvalidになってしまいます。
</p>
<p>
完成サンプルは以下のとおりです。
</p>
<p class="textSample">サンプル</p>
<div id="csstips000254" class="sample">
<ul>
   <li><a href="#">menu1</a>
      <ul>
         <li><a href="#">submenu1</a></li>
         <li><a href="#">submenu2</a></li>
         <li><a href="#">submenu3</a>
            <ul>
               <li><a href="#">submenu3-1</a></li>
               <li><a href="#">submenu3-2</a></li>
               <li><a href="#">submenu3-3</a>
                  <ul>
                     <li><a href="#">submenu3-3-1</a></li>
                     <li><a href="#">submenu3-3-2</a></li>
                     <li><a href="#">submenu3-3-3</a></li>
                  </ul>
               </li>
            </ul>
         </li>
      </ul>
   </li>
  <li><a href="#">menu2</a>
      <ul>
         <li><a href="#">submenu4</a></li>
         <li><a href="#">submenu5</a></li>
      </ul>
   </li>
   <li><a href="#">menu3</a>
      <ul>
         <li><a href="#">submenu6</a></li>
         <li><a href="#">submenu7</a></li>
         <li><a href="#">submenu8</a></li>
         <li><a href="#">submenu9</a></li>
      </ul>
   </li>
</ul>
</div>
<p>
※ページの中にサンプルを記述しているため、ブラウザによっては正常に動作しない場合があります。ご了承ください。サンプルはWindows XPのIE6、Firefox3.5、Safari4.0.3、Opera9.64 、Chrome2.0で動作確認済みです。
</p>
<p>
基本のHTMLソースは以下のとおりです。メインメニューと3つのサブメニューを用意しました。
</p>
<p class="textHTML">(X)HTMLコード</p>
<pre class="HTML prettyprint"><code>&lt;div id="menu"&gt;
   &lt;ul&gt;
      &lt;li&gt;&lt;a href="#"&gt;menu1&lt;/a&gt;
         &lt;ul&gt;
            &lt;li&gt;&lt;a href="#"&gt;submenu1&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="#"&gt;submenu2&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="#"&gt;submenu3&lt;/a&gt;
               &lt;ul&gt;
                  &lt;li&gt;&lt;a href="#"&gt;submenu3-1&lt;/a&gt;&lt;/li&gt;
                  &lt;li&gt;&lt;a href="#"&gt;submenu3-2&lt;/a&gt;&lt;/li&gt;
                  &lt;li&gt;&lt;a href="#"&gt;submenu3-3&lt;/a&gt;
                     &lt;ul&gt;
                        &lt;li&gt;&lt;a href="#"&gt;submenu3-3-1&lt;/a&gt;&lt;/li&gt;
                        &lt;li&gt;&lt;a href="#"&gt;submenu3-3-2&lt;/a&gt;&lt;/li&gt;
                        &lt;li&gt;&lt;a href="#"&gt;submenu3-3-3&lt;/a&gt;&lt;/li&gt;
                     &lt;/ul&gt;
                  &lt;/li&gt;
               &lt;/ul&gt;
            &lt;/li&gt;
         &lt;/ul&gt;
      &lt;/li&gt;
     &lt;li&gt;&lt;a href="#"&gt;menu2&lt;/a&gt;
         &lt;ul&gt;
            &lt;li&gt;&lt;a href="#"&gt;submenu4&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="#"&gt;submenu5&lt;/a&gt;&lt;/li&gt;
         &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;menu3&lt;/a&gt;
         &lt;ul&gt;
            &lt;li&gt;&lt;a href="#"&gt;submenu6&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="#"&gt;submenu7&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="#"&gt;submenu8&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="#"&gt;submenu9&lt;/a&gt;&lt;/li&gt;
         &lt;/ul&gt;
      &lt;/li&gt;
   &lt;/ul&gt;
&lt;/div&gt;</code></pre>
<p>
最低限必要なCSSソースコードです。
</p>
<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>/* メインメニュー */
#menu ul {
   display:block;
   list-style-type: none;
   margin:0;
   padding:0;
}

/* サブメニュー1段目 */
#menu ul ul{
   display:none;
   position:absolute;
   top:100%;
   left:0;
}

/* サブメニュー2段目以降 */
#menu ul ul ul {
   top:0;
   left:100%;
}

/* リスト */
#menu li {
   float:left;
}

#menu li li {
   clear:both;
}

#menu li:hover {
   position:relative;
}

#menu li:hover > ul {
   display: block
}

/* IE6用 */
* html #menu li {
   behavior: expression(
      this.onmouseover=new Function("this.className='column1'"),
      this.onmouseout=new Function("this.className=''"),
      this.style.behavior = 'none'
   );
}

* html #menu li li {
   behavior: expression(
      this.onmouseover=new Function("this.className='column2'"),
      this.onmouseout=new Function("this.className=''"),
      this.style.behavior = 'none'
   );
}

* html #menu li li li {
   behavior: expression(
      this.onmouseover=new Function("this.className='column3'"),
      this.onmouseout=new Function("this.className=''"),
      this.style.behavior = 'none'
   );
}

#menu .column1 {position:relative;}
#menu .column1 ul {display:block;}
#menu .column1 * ul {display:none;}

#menu .column2 {position:relative;}
#menu .column2 ul {display:block;}
#menu .column2 * ul {display:none;}

#menu .column3 {position:relative;}
#menu .column3 ul {display:block;}
#menu .column3 * ul {display:none;}</code></pre>
<p>
後半部分がIE6用のソースコードになります。
</p>
<p>
hoverの代わりにJavaScriptのonmouseoverイベントハンドラを使用しています。サブカテゴリの数だけliの入れ子の指定が必要です。
</p>
<p>
本来なら、｢* html li｣の指定だけでドロップダウンできるはずなのですが、その入れ子の｢* html li li｣、さらにその入れ子の｢* html li li li｣と指定が必要となります。
</p>
<p>
例えばメインのメニューのli要素にマウスが載ったときに.column1のスタイルが実行されるのですが、onmouseoverの適用範囲が表示されたサブメニューまで及びます。
</p>
<p>
サブメニューのサブメニューを表示したくても、onmouseoverのままなので、新しくonmouseoverイベントハンドラを呼び出す必要があります。そのため、サブメニューの数分expression()関数が必要になってしまいます。
</p>
<p>
もっとよい書き方があるのかもしれませんが、あまりJavaScriptに詳しくないので、これが私にとっての最善の書き方になります。
</p>
<p>
これだけでは味気ないのでデザインしていきます。ここでは簡単に背景と余白を体裁します。
</p>
<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>/* デザイン */
#menu li {
   line-height:1.6em;
   text-align: center;
   background:#ddd;
}

#menu li li {
   text-align: left;
}

#menu li a{
   display: block;
   width:100px;
   text-decoration:none;
   color:#333;
   padding:0 10px;
}

#menu li:hover {
   background:#7BBA10;
   color:#333;
}

#menu .column1, #menu .column2, #menu .column3 {
   color:#333;
   background:#7BBA10;
}</code></pre>
<p>
この例のようにwidthとpaddingを同時に指定する場合は、HTMLファイルが｢完全標準モード｣になるようにDOCTYPE宣言を指定する必要があります。
</p>
<p>
例えば、XHTMLファイルなら、
</p>
<p>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
</p>
<p>
などです。
</p>
<p>
<h3>ドロップダウンメニューはJavaScriptで実装したほうがよりリッチに</h3>
<p>
以上、CSSのみでドロップダウンメニューを作成しましたが、やはりJavaScriptのほうがよりスムーズで美しいドロップダウンメニューができるので、そちらがお勧めではあります。
</p>
<p>
参考までに素敵なJavaScriptで実装する素敵なドロップダウンメニューはこちら。
</p>
<p class="link">
<a href="http://www.css-lecture.com/log/javascript/jquery-droppy-menu.html">jQuery ドロップダウンメニュー | CSS Lecture</a>
</p>
<p class="link">
<a href="http://www.filamentgroup.com/lab/jquery_ipod_style_and_flyout_menus/">jQuery Menu: Dropdown, iPod Drilldown, and Flyout styles with ARIA Support and ThemeRoller Ready | Filament Group, Inc., Boston, MA</a>
</p>
<h3>参考サイト</h3>
<p class="link">
<a href="http://ezorisu-web.com/web-design/archives/356">ezorisu-web » CSSでドロップダウンメニュー</a>
</p>
<p class="link">
<a href="http://www.geocities.jp/wald_im_mond/forest/css2.html">CSSでドロップダウンメニュー</a>
</p>]]>
        
    </content>
</entry>

<entry>
    <title>IE6でも子セレクタを使う</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/csstechnic/templatelayout/000253.php" />
    <id>tag:www.coolwebwindow.com,2009:/csstips//4.253</id>

    <published>2009-08-18T12:11:51Z</published>
    <updated>2009-08-18T12:54:25Z</updated>

    <summary> 子セレクタは親要素の直下の子要素のみに適用されるセレクタです。しかし、IE6で...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="レイアウト" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="childselector" label="child selector" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
子セレクタは親要素の直下の子要素のみに適用されるセレクタです。しかし、IE6では子セレクタは
実装されていません。しかし、子孫セレクタをうまく組み合わせることで、擬似的に子セレクタと同様の動作をすることが可能です。
</p>
<p class="textHTML">(X)HTMLコード</p>
<pre class="HTML prettyprint"><code>&lt;div class="section"&gt;
   &lt;p&gt;
      直接の子要素なので子セレクタが適用されます。文字色は赤です。
   &lt;/p&gt;
   &lt;div&gt;
      &lt;p&gt;
         直接の子要素ではありません。文字色は緑です。
      &lt;/p&gt;
   &lt;/div&gt;
&lt;/div&gt;</code></pre>
<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>div.section p  {
   color:red;
}

div.section * p {
   color:green;
}</code></pre>
<p>
まず、子セレクタとして適用したいスタイルを、子孫セレクタで指定します。
</p>
<p>
さらにこの子孫セレクタを上書きします。子孫セレクタの途中に、特定の要素ではなくアスタリスク （*） を入れると、ワイルドカードの役割を果たします。
</p>
<p>
つまりこの場合、"クラス｢section｣を指定されたdiv要素の、任意の子孫要素（*） の、さらに子孫要素である p 要素にスタイルシートを適用する"となります。
</p>
<p>
要は、親要素の直下以外の孫子要素にスタイルが適用されるということです。
</p>
<h3>参考サイト</h3>
<p class="link">
<a href="http://www.lucky-bag.com/archives/2005/06/simulate_child.html">IE でも擬似的に子供セレクタ - lucky bag</a>
</p>]]>
        
    </content>
</entry>

<entry>
    <title>ちらつきのないCSSロールオーバーメニューを作る</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/csstechnic/000249.php" />
    <id>tag:www.coolwebwindow.com,2009:/csstips//4.249</id>

    <published>2009-07-18T23:32:25Z</published>
    <updated>2009-07-19T03:46:49Z</updated>

    <summary> 前回、CSSのみでロールオーバー効果のメニューを作る方法を紹介しましたが、カー...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="CSSの小技" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="メニュー" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="rollover" label="roll-over" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
前回、<a href="/csstips/csstechnic/menu/000226.php">CSSのみでロールオーバー効果のメニューを作る方法</a>を紹介しましたが、カーソルを合わせたときの画像を、カーソルを合わせた瞬間に呼び出しているので、一瞬ですが読み込みのためちらつきが発生します。
</p>
<p>
それを回避するために、カーソルを合わせてたときに表示される画像を、ページが表示されたときにあらかじめ呼び出しておく方法があります。
</p>
<p>
使用する画像は以下のものです。メニューで使用する画像がすべてくっついています。
</p>
<p>
<p><img src="/csstips/images/csstechnic/memu/000249-01.gif" alt="ロールオーバー用メニュー画像" /></p>
<p>
それでは、サンプルとソースコードを見ていきましょう。
</p>
<p class="textSample">サンプル</p>
<div class="sample">
<ul class="sampleMenu2">
<li class="menu1"><a href="menu1">メニュー1</a></li>
<li class="menu2"><a href="menu2">メニュー2</a></li>
<li class="menu3"><a href="menu3">メニュー3</a></li>
</ul>
</div>
<p class="textHTML">(X)HTMLコード</p>
<pre class="HTML prettyprint"><code>&lt;ul class="menu"&gt;
&lt;li class="menu1"&gt;&lt;a href=""&gt;メニュー1&lt;/a&gt;&lt;/li&gt;
&lt;li class="menu2"&gt;&lt;a href=""&gt;メニュー2&lt;/a&gt;&lt;/li&gt;
&lt;li class="menu3"&gt;&lt;a href=""&gt;メニュー3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</code></pre>

<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>ul.menu  {
   margin:0;
   padding:0;
}

ul.menu li {
   float:left;
   text-indent:-9999px;
   overflow:hidden;
   list-style:none;
}

ul.menu li a {
   display:block;
   width:150px;
   height:30px;
}

li.menu1 a {
   background:url(menu.gif) 0 0 no-repeat;
}

li.menu1 a:hover {
   background:url(menu.gif) 0 -30px no-repeat;
}

li.menu2 a {
   background:url(menu.gif) -150px 0 no-repeat;
}

li.menu2 a:hover {
   background:url(menu.gif) -150px -30px no-repeat;
}

li.menu3 a {
   background:url(menu.gif) -300px 0 no-repeat;
}

li.menu3 a:hover {
   background:url(menu.gif) -300px -30px no-repeat;
}


/* モダンブラウザ（Firefox Opera Safari）対策 */
ul.menu:after {
   content:".";
   display:block;
   height:0;
   clear:both;
   visibility:hidden;
   font-size:0;
}


/* Win版IE7とMac版IE5対策 */
ul.menu {
   display:inline-block;
}


/* Win版IE5および6対策 */
/* Hides from IE-mac \*/
* html ul.menu {
   height:1px;
}

ul.menu {
   display:block;
}
/* End hide from IE-mac */</code></pre>
<p>
backgroundプロパティで、表示する画像をずらしています。右や下にずらす場合はマイナス表示をしないといけないので注意です。
</p>
<p>
メニューを横並びにするのにfloatを使用している都合上、リスト以降の要素の回り込みを解除するためにclearfixハックを使っています。CSSソースコードの後半部分です。
</p>]]>
        
    </content>
</entry>

<entry>
    <title>CSSを記述する際フォーマットルールを作る</title>
    <link rel="alternate" type="text/html" href="http://www.coolwebwindow.com/csstips/cssbasic/000248.php" />
    <id>tag:www.coolwebwindow.com,2009:/csstips//4.248</id>

    <published>2009-07-18T13:24:54Z</published>
    <updated>2009-07-19T00:06:36Z</updated>

    <summary> CSSを記述する際、余白やインデントに関して、自分なりあるいは複数で管理する場...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="CSSの基本" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="coding" label="coding" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.coolwebwindow.com/csstips/">
        <![CDATA[<p>
CSSを記述する際、余白やインデントに関して、自分なりあるいは複数で管理する場合はプロジェクト単位でルールを決めておくと、見やすさ（可読性）が向上します。
</p>
<p>
ちなみに私の書き方は以下のとおりです。
</p>
<p class="textCSS">CSSコード</p>
<pre class="CSS prettyprint"><code>selecter {
   property:value;
}</code></pre>
<ol>
<li>selecter名と「{」の間に半角スペースを空ける</li>
<li>propertyの前に半角3文字分スペースを空ける</li>
<li>propertyおよびvalueと「:」の間にはスペースを空けない</li>
<li>valueと「;」の間にはスペースを空けない</li>
<li>propertyがひとつしかない場合でも、必ずvalueの後に「;」はつける</li>
</ol>
<p>
基本的にスペースは付け忘れが多いため、空けないようにしているのですが、selecterの後には必ずスペースを入れるようにしています。これは、CSSファイル内でselecterを検索する際、スペースを空けておくと便利なことが多いからです。
</p>]]>
        
    </content>
</entry>

</feed>
