html
1 2<!DOCTYPE html> 3<html lang="ja"> 4 5<head> 6 <meta charset="UTF-8"> 7 <meta name="viewport" 8 content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> 9 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> 10 <title></title> 11 <link rel="stylesheet" href="css/style.css"> 12 <link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel="stylesheet"> <!-- フォントオーサム --> 13 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <!-- ハンバーガークリックアニメ --> 14 <link rel="stylesheet" 15 href="https://fonts.googleapis.com/css2?family=M+PLUS+Rounded+1c:wght@800&family=Noto+Serif+JP:wght@700&display=swap"> 16 <!-- googleフォント --> 17 <link rel="icon" href="img/favicon.png"> <!-- ファビコン --> 18 19 <!-- fancybox --> 20 <!-- Add mousewheel plugin (オプションのマウスホイールプラグイン) --> 21 <script type="text/javascript" src="js/jquery.mousewheel.pack.js"></script> 22 <!-- fancyBox の読み込み(必須)--> 23 <link rel="stylesheet" href="css/jquery.fancybox.css" type="text/css" media="screen" /> 24 <script type="text/javascript" src="js/jquery.fancybox.pack.js"></script> 25 <!-- lazyload --> 26 <script src="js/lazysizes.min.js"></script> 27 <!-- javascript --> 28 <script src="js/script.js"></script> 29</head> 30 31<body ontouchstart=""> 32 33 <header id="top-head"> 34 <div class="inner"> 35 <div id="mobile-head"> 36 <img class="topicon" src="img/topicon.jpg" alt="topicon"> 37 <h1 class="logo"></h1> 38 </div> 39 40 <nav id="global-nav"> 41 <ul> 42 <li><a href="https://" class="insta_btn" target="_blank"><span class="insta"><i 43 class="fab fa-instagram"></i></span>instagram</a></li> 44 <li><a href="https://" class="twitter_btn" target="_blank"><span class="twitter"><i 45 class="fab fa-twitter"></i></span>twitter</a></li> 46 <li><i class="fa fa-envelope fa-1x"><span class="e-mail"><a href="mailto:" 47 class="mail_btn" title="Send me an email">e-mail</a></span></i></li> 48 </ul> 49 </nav> 50 </div> 51 </header> 52 53 <main> 54 <div id="loader-bg"> 55 <div id="loader"> 56 57 </div> 58 </div> 59 <div id="wrap"> 60 <div id="container"> 61 <div class="wrapper"> 62 <figure class="hover-parent"> 63 <a href="img/2020-8-19-4.jpg" class="item x3" data-fancybox-group="cotoh"><img class="lazyload" data-src="img/2020-8-19-4.jpg"> 64 <span class="hover-mask">2020-8-19</span></a> 65 </figure> 66 <figure class="hover-parent"> 67 <a href="img/2020-8-19-3.jpg" class="item x3" data-fancybox-group="cotoh"><img class="lazyload" data-src="img/2020-8-19-3.jpg"> 68 <span class="hover-mask">2020-8-19</span></a> 69 </figure> 70 <figure class="hover-parent"> 71 <a href="img/2020-8-19-2.jpg" class="item x3" data-fancybox-group="cotoh"><img class="lazyload" data-src="img/2020-8-19-2.jpg"> 72 <span class="hover-mask">2020-8-19</span></a> 73 </figure> 74 75 </div> 76 77 78 </main> 79 80 <footer class="footer"> 81 </footer> 82 83 <!-- masonry --> 84 <script src="js/masonry.pkgd.min.js"></script> 85 <script src="js/imagesloaded.pkgd.min.js"></script> 86 87 <script> 88 $("img.lazyload").lazyload(); 89 </script> 90 91</body> 92 93</html>
css
1 2@charset "UTF-8"; 3 4html { 5 margin: 0; 6 padding:0; 7} 8img { 9 width: 100%; 10 vertical-align: middle; 11} 12figure { 13 margin: 0; 14} 15table { 16 border-collapse: collapse; 17 border-spacing: 0; 18} 19a { 20 text-decoration: none; 21 /* transition: all 0.5s ease; 全てのプロパティ・変化までの時間・開始と終了時緩やかに */ 22} 23a:hover { 24 transition:all .5s ease; 25} 26section { 27 margin-bottom: 120px; 28} 29.content-wrapper { 30 width: 100%; /*修正前95*/ 31 margin: 0 auto; 32 max-width: 1400px; /*これ以上大きくならない*/ 33 } 34section h2 { 35 font-size: 2rem; 36} 37/* figcaption */ 38.hover-parent { 39 position: relative; 40 line-height: 30px; 41} 42.hover-parent:hover .hover-mask { 43 display: inline; /* インライン要素として表示 */ 44} 45 46 47/* masonry */ 48#container { 49 width: 100%; 50 margin: 0 auto; /*中央寄せ */ 51 position: relative; 52} 53.wrapper { 54 position: absolute; 55 top: 15px; 56 left: 60px; 57} 58.item { 59 margin-top:15px; 60 margin-bottom: 15px; 61 width: 100%; 62 padding: 8px; 63 box-shadow: 8px 8px 10px #555555; 64 /* float: left; */ 65} 66.item.x3 { 67 width: 400px; 68 opacity : 0; 69 transform: translate(0,50px); 70 transition: all 1s 1s ease-out; 71} 72.item img { 73 width: 100%; 74} 75
jQuery
1 2jQuery(function ($) { //ロード時の崩れ対策 3 $('body').fadeIn(500) 4 5 6 // var min_width = 100; 7 8 //画面幅による分岐と imagesLoaded, Masonry のイニシャライズを関数化 9 function masonry_update() { 10 ww = $(window).width(); 11 var cw = 90; 12 if (ww < 1025) { cw = 59; } //幅により columnWidth を変更 13 if (ww < 897) { cw = 53; } 14 if (ww < 835) { cw = 50; } 15 if (ww < 769) { cw = 36; } 16 if (ww < 737) { cw = 33; } 17 if (ww < 668) { cw = 31; } 18 if (ww < 415) { cw = 33; } 19 if (ww < 376) { cw = 30; } 20 var $works_list = $('#container'); 21 $works_list.imagesLoaded(function () { 22 $works_list.masonry({ 23 itemSelector: '.item', 24 isFitWidth: true,//親要素の幅に合わせてカラム数を自動調整 25 columnWidth: cw //写真のサイズ 26 }); 27 }); 28 } 29 30 masonry_update(); 31 32 //リサイズ時の処理 33 var timer = false; 34 $(window).resize(function () { 35 if (timer !== false) { 36 clearTimeout(timer); 37 } 38 timer = setTimeout(function () { 39 masonry_update(); 40 }, 200); 41 }); 42}); 43 44 45 46$(function(){ 47 $(window).on('load scroll', function() { 48 var winScroll = $(window).scrollTop(); 49 var winHeight = $(window).height(); 50 var scrollPos = winScroll + (winHeight * 0.8); 51 52 $(".item.x3").each(function() { 53 if($(this).offset().top < scrollPos + 1000 ) { 54 $(this).css({opacity: 1, transform: 'translate(0, 0)'}); 55 } 56 }); 57 }); 58}); 59 60 61// fancybox 62//消すと連続で移動できない 63(function ($, F) { 64 F.transitions.resizeIn = function () { 65 var previous = F.previous, 66 current = F.current, 67 startPos = previous.wrap.stop(true).position(), 68 endPos = $.extend({ opacity: 1 }, current.pos); 69 startPos.width = previous.wrap.width(); 70 startPos.height = previous.wrap.height(); 71 previous.wrap.stop(true).trigger('onReset').remove(); 72 delete endPos.position; 73 current.inner.hide(); 74 current.wrap.css(startPos).animate(endPos, { 75 duration: current.nextSpeed, 76 easing: current.nextEasing, 77 step: F.transitions.step, 78 complete: function () { 79 F._afterZoomIn(); 80 current.inner.fadeIn("fast"); 81 } 82 }); 83 }; 84}(jQuery, jQuery.fancybox)); 85// 消すと拡大後の移動できない 86jQuery(function ($) { 87 $(".item.x3").fancybox({ 88 nextMethod: 'resizeIn', 89 nextSpeed: 250, 90 prevMethod: false 91 }); 92}); 93 94$('#container').imagesLoaded(function(){ 95 /*実行させたい処理*/ 96}); 97 98$("img.item.x3").lazyload({ 99 effect: 'fadeIn', 100 effectspeed: 1000, 101 threshold: 10 102}); 103![イメージ説明](f785f988fc2da84cc587626849a44d9b.png)
サイズの違う写真を縦横比率を変えずに、横並び折返してレイアウトし、遅延読み込みを使用し、サクサク見れるギャラリーサイトを作りたいです。
試したこと
masonryを使用しイメージ通りのレイアウトは出来ましたが、遅延読み込みをさせようと、lazyloadやlazusizesを使用すると、写真が重なってしまいました。
masonryを使用せずに、CSSのみでレイアウトすれば、遅延読み込みはできるのですが、
flexで横並びにして折り返しすと、行が変わると上下に余白が入ってしまう。
columnで縦並びにして、wrapperの終わりで折り返すと、wrapperの境界で余白が入ってしまいます。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー