Skip to content

Colorbox

Manabu Yasuda edited this page Aug 9, 2016 · 2 revisions

リンク

インクルード

オプション

$(function() {
  $(".foo").colorbox({
     transition: 'elastic', // `elastic`, `fade`, `none`から選択する。
     speed: 350, // transitionを`none`以外の場合は表示速度を指定できる
     title: false, // アンカータグの`title`属性を表示させるかどうか
     rel: 'group', // 連続して隣り合ったモーダルを表示します。
     opacity: 0.85, // オーバーレイのopacity
     fadeOut: 300, // モーダルを非表示にするときの速度
     inline: true, // HTMLドキュメントを表示します。
     previous: 'previous', // 戻るボタンのテキストを変更する。
     next: 'next', // 進むボタンのテキストを変更する。 
     close: 'close' // 閉じるボタンのテキストを変更する。
  });
});

HTML

アンカータグのhrefとモーダル(コンテンツ)のidをひもづける。

<p><a class="foo" href="#foo1" title="01です">インラインHTMLその1</a></p>
<p><a class="foo" href="#foo2">インラインHTMLその2</a></p>
<p><a class="foo" href="#foo3">インラインHTMLその3</a></p>
<p><a class="foo" href="#f004">インラインHTMLその4</a></p>


<div style="display:none">
    <div id="foo1" class="foo-body">
      <p>モーダルでコンテンツ01を表示します。</p>
    </div>
    <div id="foo2" class="foo-body">
      <p>モーダルでコンテンツ02を表示します。</p>
    </div>
    <div id="foo3" class="foo-body">
      <p>モーダルでコンテンツ03を表示します。</p>
    </div>
    <div id="f004" class="foo-body">
      <p>モーダルでコンテンツ04を表示します。</p>
    </div>
</div>

モーダルはこのように表示される。idにスタイリングをする。

<div id="cboxOverlay"></div>
  <div id="colorbox">
    <div id="cboxWrapper"><div>
    <div id="cboxTopLeft"></div>
    <div id="cboxTopCenter"></div>
    <div id="cboxTopRight"></div>
  </div>
  <div>
    <div id="cboxMiddleLeft"></div>
    <div id="cboxContent">
      <div id="cboxLoadedContent">
      <!-- コンテンツ部分 -->
        <div id="foo1" class="foo-body">
        <p>モーダルでコンテンツ01を表示します。</p>
      </div>
      <!-- /コンテンツ部分 -->
    </div>
    <div id="cboxTitle"></div>
    <div id="cboxCurrent">image 1 of 4</div>
    <button type="button" id="cboxPrevious">戻る</button>
    <button type="button" id="cboxNext">次へ</button>
    <button id="cboxSlideshow"></button>
    <div id="cboxLoadingOverlay"></div>
    <div id="cboxLoadingGraphic"></div>
    <button type="button" id="cboxClose">閉じる</button>
    </div>
    <div id="cboxMiddleRight"></div>
    </div>
    <div>
      <div id="cboxBottomLeft"></div>
      <div id="cboxBottomCenter"></div>
      <div id="cboxBottomRight"></div>
    </div>
  </div>
  <div></div>
</div>

CSS

アイコンは画像になっているので変更する。ソースコードはGitHubのexample1~5が用意されているので参考にする。

/*
    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;
  -webkit-transform: translate3d(0,0,0);
}
#cboxWrapper {
  max-width: none;
}
#cboxOverlay {
  position: fixed;
  width: 100%;
  height: 100%;
}
#cboxMiddleLeft,
#cboxBottomLeft {
  clear: left;
}
#cboxContent {
  position: relative;
}
#cboxLoadedContent {
  overflow: auto;
  -webkit-overflow-scrolling: touch;
}
#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;
  -ms-interpolation-mode: bicubic;
}
.cboxIframe {
  width: 100%;
  height: 100%;
  display: block;
  border: 0;
  padding: 0;
  margin: 0;
}
#colorbox,
#cboxContent,
#cboxLoadedContent {
  box-sizing: content-box;
  -moz-box-sizing: content-box;
  -webkit-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;
  opacity: 0.9;
  filter: alpha(opacity = 90);
}
#colorbox {
  outline: 0;
}
#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;
}
#cboxCurrent {
  position: absolute;
  bottom: 4px;
  left: 58px;
  color: #949494;
}
#cboxLoadingOverlay {
  background: url(images/loading_background.png) no-repeat center center;
}
#cboxLoadingGraphic {
  background: url(images/loading.gif) no-repeat center center;
}

/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
#cboxPrevious,
#cboxNext,
#cboxSlideshow,
#cboxClose {
  border: 0;
  padding: 0;
  margin: 0;
  overflow: visible;
  width: auto;
  background: none;
}

/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
#cboxPrevious:active,
#cboxNext:active,
#cboxSlideshow:active,
#cboxClose:active {
  outline: 0;
}

#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;
}
#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/
*/
.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);
}

スワイプ対応

colorbox自身にはスワイプとフリック機能がない。TouchSwipe-Jquery-Pluginでその機能を補完する。

npm install jquery-touchswipe

モーダルで表示する要素に対してスワイプイベントを記述する。

$(".c-timeline__content").swipe({
  swipeLeft:function(){
    $.colorbox.next()
  },
  swipeRight:function(){
    $.colorbox.prev()
  }
});

Clone this wiki locally