「フレームセットでいいんでよろしくお願いします。」
ほうほう、フレームセット。
なんと懐かしい響きだろうか。
Web黎明期にはそれこそ便利でみんな使ってたし、自分もいくつか作った。
しかしXHTMLで非推奨になり、検索にも非常に不利な事もあって
ここ最近はこいつを使った覚えはない。
(他社から引き継いだサイトは未だに現役のもあるけど・・・)
んじゃあ久しぶりにフレームセットを・・・と思ったけども。
yuga.jsを使って現在ページをハイライトしたりとかできねえし
モダンブラウザではposition:fixedに対応してるので、同じ事が簡単にできる昨今
もはや去りゆく運命にあるMicrosoft Internet Explorer 6に義理を通さずとも
別にいいんじゃねえのか、と頭をよぎりましたけども
ここは最後っ屁みたいなもんで、CSSでIE6にも対応させましょうと頑張りました。
とりあえず今回の案件は
■左右分割で左側がメニュー
■メニューのコンテンツボックスは縦の真ん中に位置させる
という2重の事をCSSで再現してみるべくトライ。
HTMLはこんな感じ。
<!-- Contents --> <div id="main"> <p>メインコンテンツメインコンテンツ</p> </div> <!-- Menu --> <div id="menu"> <div id="menucontents"> <h1><img src="img/logo.gif" alt="logo" width="225" height="120" /></h1> <div id="navi"> <ul> <li><a href="index.html">TOP</a></li> <li><a href="about.html">ABOUT</a></li> <li><a href="report.html">REPORT</a></li> </ul> </div> <p class="copyrights"><img src="img/footer.gif" alt="Footer" width="263" height="30" /></p> </div> </div> <!-- /Menu -->
そしてCSSは
html {
height: 100%; /*左側メニューの高さの為に100%指定*/
_overflow:hidden;
/*IE6対策、#mainの右側にスクロールバーを出さないため*/
}
body {
height: 100%; /*左側メニューの高さの為に100%指定*/
_overflow:hidden;
/*IE6対策、#mainの右側にスクロールバーを出さないため*/
}
#menu {
position: fixed; /*モダンブラウザはこれだけで疑似フレーム完成*/
left: 0;
top: 0;
width: 380px;
height: 100%;
min-height: 100%;
display: table; /*親ボックスをテーブル形式に(縦中央揃えのため)*/
}
#menucontents { /*入れ子のメニュー*/
width: 380px;
display: table-cell; /*テーブルセル形式にして*/
vertical-align: middle; /*縦中央揃え*/
}
*html #menucontents { /*縦中央揃えのIE6専用記述*/
width: 380px;
position:absolute;
height: expression( document.getElementById("menucontents").offsetHeight+"px");
top: 50%;
margin-top: expression( "-"+document.getElementById("menucontents").offsetHeight/2+"px");
}
*:first-child+html div#menucontents { /*縦中央揃えのIE7専用記述*/
width: 380px;
position:absolute;
height: expression( this.clientHeight+"px");
top: 50%;
left:0;
margin-top: expression( "-"+this.clientHeight/2+"px");
}
#main {
height: 100%;
min-height: 100%;
/*上方向に40px、メニュー分の380px+10pxを右方向に*/
padding: 40px 0 0 390px;
}
*html #main {
overflow: auto; /*IE6用の記述(これがないとスクロールバーが出ない) */
}
という感じで無事に実装できました。
上下揃えで使ったdisplay:table-cellが、IE6だけでなくIE7までが非対応なのが
ちょっと困りましたけども、expressionでクライアントの高さを出して
それの50%の高さにボックスを配置するという方法で実現させました。
(6と7で記述方法が違うってのもなかなか困る・・・ブツブツ・・・)
さーて、これ他でも使う・・・・かなあ。。
一応こうして書いておけば自分も、そして誰かの役に立つのかもしれない・・・!
と思う。たぶん。