もう、すっかり冬だ。
そして、朝っぱらから何やってんだ俺は。
さて、今日は、"colorbox"のカスタマイズについて語ってみようと思う。
colorbox
http://www.jacklmoore.com/colorbox/
先日、ライトボックス風にブロックを表示してほしい、という案件に出くわして、案の定有名プラグインのcolorboxにたどり着いた。
div要素ごとライトボックスにするにはやっぱこれしかない。様々な要素をライトボックスにできるこのプラグインはとにかく便利である。
しかしながら、さしものcolorboxといえど、カスマイズには骨が折れる。
なぜかというと、元々がいくつかのデザインが用意されており、カスタマイズが必要ないように作られているからだ。
そして、デザインをサンプルごとに変えやすいためか、プラグイン内で様々なdiv要素を生成するようになっているため、一見プラグイン自体を解析しなければいけない?と思ってしまう。
しかし、デザイナーがデザインしたかっこいいデザインを完璧に実現するのがWEBデザイナーってもんだ!
ここであきらめてたまるか!
(もちろんcolorboxのもともとのデザインもなまらかっこいいけどね)
というわけで、colorboxのカスタマイズで検索。
だが、まともな記事は出てこない。
出てくるのは、設置の仕方とか、せいぜいデフォルトオプションの設定の仕方ぐらい。
そんなん見んでもできるわ!!!
つーわけで、きのこ味プリンことみやびが人肌脱ごうって算段よ。
そう、今日紹介したいのは、colorboxのデザインの変更方法なのである。 (はい、毎度のごとく前置きが長いですね)
どーするかってーと、実は、CSSのみでほとんどカスタマイズできちゃいます。
デフォルトのcolorboxに、どこをいじればどこがどうなるかをコメントで書いてみました。
(example1のCSS)
●example1のCSSにコメント
/*
ColorBox Core Style:
The following CSS is consistent between example themes and should not be altered.
*/
/* ここらへんはいじらない ここから */
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
#cboxOverlay{position:fixed; width:100%; height:100%;}
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
#cboxContent{position:relative;}
#cboxLoadedContent{overflow:auto;}
#cboxTitle{margin:0;}
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
.cboxIframe{width:100%; height:100%; display:block; border:0;}
#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
/* ここらへんはいじらない ここまで */
/*
User Style:
Change the following styles to modify the appearance of ColorBox. They are
ordered & tabbed in a way that represents the nesting of the generated HTML.
*/
#cboxOverlay{background:url(images/overlay.png) repeat 0 0;}
#colorbox{}
/* ボックスの端の設定ここから */
/* ボックス左上角 */
#cboxTopLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px 0;}
/* ボックス右上角 */
#cboxTopRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px 0;}
/* ボックス左下角 */
#cboxBottomLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px -29px;}
/* ボックス右下角 */
#cboxBottomRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px -29px;}
/* ボックス左辺 */
#cboxMiddleLeft{width:21px; background:url(images/controls.png) left top repeat-y;}
/* ボックス右辺 */
#cboxMiddleRight{width:21px; background:url(images/controls.png) right top repeat-y;}
/* ボックス上辺 */
#cboxTopCenter{height:21px; background:url(images/border.png) 0 0 repeat-x;}
/* ボックス下辺 */
#cboxBottomCenter{height:21px; background:url(images/border.png) 0 -29px repeat-x;}
/* ボックスの端の設定ここまで */
/* 表示させるボックス自体 ここから */
#cboxContent{background:#fff; overflow:hidden;}
/* 表示させるボックス自体 ここまで */
/* 必要なら調整 ここから */
.cboxIframe{background:#fff;}
#cboxError{padding:50px; border:1px solid #ccc;}
/* ボックスの下の幅 */
#cboxLoadedContent{margin-bottom:28px;}
/* タイトル部分 */
#cboxTitle{position:absolute; bottom:4px; left:0; text-align:center; width:100%; color:#949494;}
/* 下の"何番目"(2 of 3...とか)表示の表示設定 */
#cboxCurrent{position:absolute; bottom:4px; left:58px; color:#949494;}
#cboxSlideshow{position:absolute; bottom:4px; right:30px; color:#0092ef;}
/* 必要なら調整 ここまで */
/* 戻るボタン */
#cboxPrevious{position:absolute; bottom:0; left:0; background:url(images/controls.png) no-repeat -75px 0; width:25px; height:25px; text-indent:-9999px;}
#cboxPrevious:hover{background-position:-75px -25px;}
/* 次へボタン */
#cboxNext{position:absolute; bottom:0; left:27px; background:url(images/controls.png) no-repeat -50px 0; width:25px; height:25px; text-indent:-9999px;}
#cboxNext:hover{background-position:-50px -25px;}
/* ローディングボタン */
#cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
#cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
/* 閉じるボタン */
#cboxClose{position:absolute; bottom:0; right:0; background:url(images/controls.png) no-repeat -25px 0; width:25px; height:25px; text-indent:-9999px;}
#cboxClose:hover{background-position:-25px -25px;}
/*
The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9.
See: http://jacklmoore.com/notes/ie-transparency-problems/
*/
/* 以下、IE6用の設定のため、適当に上と合わせる */
.cboxIE #cboxTopLeft,
.cboxIE #cboxTopCenter,
.cboxIE #cboxTopRight,
.cboxIE #cboxBottomLeft,
.cboxIE #cboxBottomCenter,
.cboxIE #cboxBottomRight,
.cboxIE #cboxMiddleLeft,
.cboxIE #cboxMiddleRight {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
}
/*
The following provides PNG transparency support for IE6
Feel free to remove this and the /ie6/ directory if you have dropped IE6 support.
*/
.cboxIE6 #cboxTopLeft{background:url(images/ie6/borderTopLeft.png);}
.cboxIE6 #cboxTopCenter{background:url(images/ie6/borderTopCenter.png);}
.cboxIE6 #cboxTopRight{background:url(images/ie6/borderTopRight.png);}
.cboxIE6 #cboxBottomLeft{background:url(images/ie6/borderBottomLeft.png);}
.cboxIE6 #cboxBottomCenter{background:url(images/ie6/borderBottomCenter.png);}
.cboxIE6 #cboxBottomRight{background:url(images/ie6/borderBottomRight.png);}
.cboxIE6 #cboxMiddleLeft{background:url(images/ie6/borderMiddleLeft.png);}
.cboxIE6 #cboxMiddleRight{background:url(images/ie6/borderMiddleRight.png);}
.cboxIE6 #cboxTopLeft,
.cboxIE6 #cboxTopCenter,
.cboxIE6 #cboxTopRight,
.cboxIE6 #cboxBottomLeft,
.cboxIE6 #cboxBottomCenter,
.cboxIE6 #cboxBottomRight,
.cboxIE6 #cboxMiddleLeft,
.cboxIE6 #cboxMiddleRight {
_behavior: expression(this.src = this.src ? this.src : this.currentStyle.backgroundImage.split('"')[1], this.style.background = "none", this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + this.src + ", sizingMethod='scale')");
}
実はボタンの位置とかは、絶対位置表示になっているため、動かしやすかったりするのだ。
原点はライトボックスの左端になるようになっている。
(CSSである程度変更可能)
どうやってボタンの高さをボックスの真ん中にするかって?
そんな時は以下のように設定したまえよ。
(縦横30pxのボタンの場合)
/* 戻るボタン */
#cboxPrevious {
width: 30px;
height:30px;
position: absolute;
top: 50%;
left: 0;
background:url(images/controls.png) no-repeat -75px 0;
text-indent: -9999px;
margin-top: -15px;
}
キモは、絶対位置にしてるので、top: 50%;でページ(親要素)の高さの半分の大きさの隙間をいれることができることである。
そして、上マージンに、ボタンの大きさの半分のネガティブマージンを入れてやればいいわけだ。
(ただし、ネガティブマージンは、IE6、7で崩れの原因となるので、ハックが必要になる場合も...)
これで、君もcolorboxマスター(?)ってわけだ。
え、マスターならプラグインの解析は?って?
あーいや、もう会社に行く時間なんでこの辺で・・・・。
コメントする