【jQuery】モバイルファーストが素敵な『fancybox3』実装サンプル集
- 更新
- デザインのメモ

Lightboxプラグイン『fancybox3』の使い方と、制作に役立つ実装サンプルをまとめました。
とってもモバイルファーストに設計されているのでとってもおすすめです。

モバイルファーストですねー

共有ボタンもありますよー
【実装】画像(デフォルト)
コードを見る(HTML・CSS・jQuery)
HTML
<div class="fancyArea">
<a href="https://125naroom.com/demo/common/img/slide01.svg" data-fancybox="images" data-caption="Photo 1"><img src="https://125naroom.com/demo/common/img/slide01.svg" alt="Photo 1"></a>
<a href="https://125naroom.com/demo/common/img/slide02.svg" data-fancybox="images" data-caption="Photo 2"><img src="https://125naroom.com/demo/common/img/slide02.svg" alt="Photo 2"></a>
<a href="https://125naroom.com/demo/common/img/slide03.svg" data-fancybox="images" data-caption="Photo 3"><img src="https://125naroom.com/demo/common/img/slide03.svg" alt="Photo 3"></a>
</div>
CSS
/* ===== サムネイルを3つ並べる ===== */
.fancyArea {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
max-width: 560px;
margin: 0 auto;
}
.fancyArea a {
width: 32%;
}
.fancyArea a img {
max-width: 100%;
height: auto;
border-radius: 4px;
vertical-align: top;
}
/* 動きを減らす設定のとき(fancybox の動きは <script> で止める) */
@media (prefers-reduced-motion: reduce) {
.fancyArea a { transition: none; }
}
jQuery
$(function () {
// オプションはデフォルトだけでオッケーです
// 動きを減らす設定のときは、fancybox の動きを止める
if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
$.fancybox.defaults.animationEffect = false;
$.fancybox.defaults.transitionEffect = false;
}
});
【実装】画像(共有ボタンをつける)
コードを見る(HTML・CSS・jQuery)
HTML
<div class="fancyArea">
<a href="https://125naroom.com/demo/common/img/slide01.svg" data-fancybox="images_sns" data-caption="Photo 1"><img src="https://125naroom.com/demo/common/img/slide01.svg" alt="Photo 1"></a>
<a href="https://125naroom.com/demo/common/img/slide02.svg" data-fancybox="images_sns" data-caption="Photo 2"><img src="https://125naroom.com/demo/common/img/slide02.svg" alt="Photo 2"></a>
<a href="https://125naroom.com/demo/common/img/slide03.svg" data-fancybox="images_sns" data-caption="Photo 3"><img src="https://125naroom.com/demo/common/img/slide03.svg" alt="Photo 3"></a>
</div>
CSS
/* ===== サムネイルを3つ並べる ===== */
.fancyArea {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
max-width: 560px;
margin: 0 auto;
}
.fancyArea a {
width: 32%;
}
.fancyArea a img {
max-width: 100%;
height: auto;
border-radius: 4px;
vertical-align: top;
}
/* 動きを減らす設定のとき(fancybox の動きは <script> で止める) */
@media (prefers-reduced-motion: reduce) {
.fancyArea a { transition: none; }
}
jQuery
$(function () {
// 動きを減らす設定のときは、fancybox の動きを止める
if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
$.fancybox.defaults.animationEffect = false;
$.fancybox.defaults.transitionEffect = false;
}
$('[data-fancybox="images_sns"]').fancybox({
buttons : [
"share",
"close"
],
thumbs : {
autoStart : false
}
});
});
【実装】画像(ズーム、シェア、スライドショー、フルスクリーン、ダウンロード、サムネイル、閉じるボタン全部つける)
コードを見る(HTML・CSS・jQuery)
HTML
<div class="fancyArea">
<a href="https://125naroom.com/demo/common/img/slide01.svg" data-fancybox="images_buttons" data-caption="Photo 1"><img src="https://125naroom.com/demo/common/img/slide01.svg" alt="Photo 1"></a>
<a href="https://125naroom.com/demo/common/img/slide02.svg" data-fancybox="images_buttons" data-caption="Photo 2"><img src="https://125naroom.com/demo/common/img/slide02.svg" alt="Photo 2"></a>
<a href="https://125naroom.com/demo/common/img/slide03.svg" data-fancybox="images_buttons" data-caption="Photo 3"><img src="https://125naroom.com/demo/common/img/slide03.svg" alt="Photo 3"></a>
</div>
CSS
/* ===== サムネイルを3つ並べる ===== */
.fancyArea {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
max-width: 560px;
margin: 0 auto;
}
.fancyArea a {
width: 32%;
}
.fancyArea a img {
max-width: 100%;
height: auto;
border-radius: 4px;
vertical-align: top;
}
/* 動きを減らす設定のとき(fancybox の動きは <script> で止める) */
@media (prefers-reduced-motion: reduce) {
.fancyArea a { transition: none; }
}
jQuery
$(function () {
// 動きを減らす設定のときは、fancybox の動きを止める
if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
$.fancybox.defaults.animationEffect = false;
$.fancybox.defaults.transitionEffect = false;
}
$('[data-fancybox="images_buttons"]').fancybox({
buttons : [
"zoom",
"share",
"slideShow",
"fullScreen",
"download",
"thumbs",
"close"
],
thumbs : {
autoStart : false
}
});
});
【実装】ビデオ(Youtube、Vimeo、MP4)
コードを見る(HTML・CSS・jQuery)
HTML
<div class="fancyArea_b">
<a data-fancybox href="https://www.youtube.com/watch?v=VGdlkVNffC4">Youtube</a>
<a data-fancybox href="https://vimeo.com/390919309">Vimeo</a>
<a data-fancybox href="https://125naroom.com/demo/video/itukanokoto_b.mp4">MP4</a>
</div>
CSS
/* ===== ひらくボタン ===== */
.fancyArea_b {
width: 250px;
margin: 0 auto;
}
.fancyArea_b a {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
padding: 1.2em .4em;
color: #2b2a27;
font-size: 16px;
text-decoration: none;
border: 1px solid #2b2a27;
background: linear-gradient(to right, #ffffff 50%, #2b2a27 50%);
background-size: 200% auto;
transition: .3s;
position: relative;
margin-bottom: 30px;
}
.fancyArea_b a:after {
content: "";
width: 100%;
height: 100%;
border-right: 1px solid #2b2a27;
border-bottom: 1px solid #2b2a27;
right: -5px;
bottom: -5px;
position: absolute;
}
.fancyArea_b a:hover {
color: #ffffff;
background-position: -100% 0;
}
/* 動きを減らす設定のとき(fancybox の動きは <script> で止める) */
@media (prefers-reduced-motion: reduce) {
.fancyArea_b a { transition: none; }
}
jQuery
$(function () {
// オプションはデフォルトだけでオッケーです
// 動きを減らす設定のときは、fancybox の動きを止める
if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
$.fancybox.defaults.animationEffect = false;
$.fancybox.defaults.transitionEffect = false;
}
});
【実装】Iframe(Webpage、PDF)
コードを見る(HTML・CSS・jQuery)
HTML
<div class="fancyArea_b">
<a data-fancybox data-type="iframe" data-src="https://125naroom.com/" href="javascript:;">Webpage</a>
<a href="https://125naroom.com/" data-fancybox data-options='{"type" : "iframe", "iframe" : {"preload" : false, "css" : {"width" : "600px"}}}'>Webpage - width: 600px;</a>
<a data-fancybox data-type="iframe" data-src="https://mozilla.github.io/pdf.js/web/viewer.html" href="javascript:;">PDF</a>
</div>
CSS
/* ===== ひらくボタン ===== */
.fancyArea_b {
width: 250px;
margin: 0 auto;
}
.fancyArea_b a {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
padding: 1.2em .4em;
color: #2b2a27;
font-size: 16px;
text-decoration: none;
border: 1px solid #2b2a27;
background: linear-gradient(to right, #ffffff 50%, #2b2a27 50%);
background-size: 200% auto;
transition: .3s;
position: relative;
margin-bottom: 30px;
}
.fancyArea_b a:after {
content: "";
width: 100%;
height: 100%;
border-right: 1px solid #2b2a27;
border-bottom: 1px solid #2b2a27;
right: -5px;
bottom: -5px;
position: absolute;
}
.fancyArea_b a:hover {
color: #ffffff;
background-position: -100% 0;
}
/* 動きを減らす設定のとき(fancybox の動きは <script> で止める) */
@media (prefers-reduced-motion: reduce) {
.fancyArea_b a { transition: none; }
}
jQuery
$(function () {
// オプションはデフォルトだけでオッケーです
// 動きを減らす設定のときは、fancybox の動きを止める
if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
$.fancybox.defaults.animationEffect = false;
$.fancybox.defaults.transitionEffect = false;
}
});
【実装】etc(Google Map、Inline)
コードを見る(HTML・CSS・jQuery)
HTML
<div class="fancyArea_b">
<a data-fancybox data-caption="Google Map - London" href="https://www.google.com/maps/place/%E3%82%A4%E3%82%AE%E3%83%AA%E3%82%B9+%E3%83%AD%E3%83%B3%E3%83%89%E3%83%B3/@51.5287718,-0.2416796,11z/data=!3m1!4b1!4m5!3m4!1s0x47d8a00baf21de75:0x52963a5addd52a99!8m2!3d51.5073509!4d-0.1277583?hl=ja">Google Map</a>
<a data-fancybox data-src="#modal01" href="javascript:;">Inline content</a>
<div class="modal" id="modal01">
<p>HELLO!</p>
</div>
</div>
CSS
/* ===== ひらくボタン ===== */
.fancyArea_b {
width: 250px;
margin: 0 auto;
}
.fancyArea_b a {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
padding: 1.2em .4em;
color: #2b2a27;
font-size: 16px;
text-decoration: none;
border: 1px solid #2b2a27;
background: linear-gradient(to right, #ffffff 50%, #2b2a27 50%);
background-size: 200% auto;
transition: .3s;
position: relative;
margin-bottom: 30px;
}
.fancyArea_b a:after {
content: "";
width: 100%;
height: 100%;
border-right: 1px solid #2b2a27;
border-bottom: 1px solid #2b2a27;
right: -5px;
bottom: -5px;
position: absolute;
}
.fancyArea_b a:hover {
color: #ffffff;
background-position: -100% 0;
}
.modal {
display: none;
}
.modal p {
font-size: 24px;
}
/* 動きを減らす設定のとき(fancybox の動きは <script> で止める) */
@media (prefers-reduced-motion: reduce) {
.fancyArea_b a { transition: none; }
}
jQuery
$(function () {
// オプションはデフォルトだけでオッケーです
// 動きを減らす設定のときは、fancybox の動きを止める
if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
$.fancybox.defaults.animationEffect = false;
$.fancybox.defaults.transitionEffect = false;
}
});
fancybox3のダウンロード
まずはfancybox3に必要なファイルを下記サイトからダウンロードします。
fancybox3の使い方
ダウンロードファイルの中で必要なファイルは以下の2点です。(distフォルダに入っています。)
- jquery.fancybox.min.css
- jquery.fancybox.min.js
※『min』のついてないファイルでもオッケーです。『min』が付いているファイルは改行などがない容量軽減版になります。
HTML
<link rel="stylesheet" type="text/css" href="css/jquery.fancybox.min.css">
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript" src="js/jquery.fancybox.min.js"></script>
CDNを使う場合は、
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js"></script>
HTML
基本的な書き方。
<a href="https://125naroom.com/demo/common/img/slide01.svg" data-fancybox data-caption="Photo 1"><img src="https://125naroom.com/demo/common/img/slide01.svg" alt="Photo 1"></a>
オプション設定
| オプション | 説明 | 初期値 |
|---|---|---|
| loop | 複数画像表示時に最初と最後をループさせる | false |
| gutter | スライド間の水平スペース | 50 |
| keyboard | キーボードナビゲーションを有効にする | true |
| preventCaptionOverlap | キャプションがコンテンツオーバーラップできるようにする | true |
| arrows | 表示ナビゲーション矢印 | true |
| infobar | 表示カウンタ | true |
| smallBtn | 右上Closeボタン表示 | “auto” |
| toolbar | ツールバー表示 | “auto” |
| idleTime | スライド移動までの待機時間(秒) | 3 |
| protect | 右クリックを無効にする | false |
| modal | コンテンツをモーダルにする | false |
| parentEl | コンテナの基準となる親要素 | “body” |
| hideScrollbar | ブラウザのスクロールバーを非表示にする | true |
| autoFocus | ズーム実行時にフォーカス可能要素に自動的にフォーカスする | true |
| backFocus | フォーカスを戻す | true |
| trapFocus | コンテンツをモーダルにする | true |
下記ページにその他のオプション内容と設定方法が詳細に載っています。
(英語ページになります。日本語翻訳おすすめです。)
メモ
jQueryのことで何かわからないことがあればjQueryの日本語リファレンスサイトがあるので一度チェックしてみるといろいろ解決できたりしますよ。
さいごに

スワイプもできてとってもモバイルファーストですねー

商用利用の際は商用ライセンス(有料)が必要なのでご注意をー



