Result
アニメーションエフェクトの不要なら結構シンプルなコードになります
css
.row figure {/*表示されている画像。*/ height: 240px; width: 240px; margin: 0; background-size: cover; background-position: 50% 50%; transition: all 1s ease-in-out; background-repeat: no-repeat; z-index: 2; display: inline-block; position: relative; } .row a {/*拡大画像を表示させる為の要素*/ display: inline-block; text-align: center; margin: 40px; text-decoration: none; color: white; } .row a p {/*テキスト表示。デフォルトでは透過しておく*/ position: absolute; opacity: 0; font-size: 20px; top: 45%; z-index: 100; left: 0; right: 0; margin: auto; } figure:hover p {/*テキスト表示*/ opacity: 1; } figure:after {/*オーバーレイ。デフォルトでは透過*/ content: ""; display: inline-block; height: 100%; width: 100%; background-color: blue; position: absolute; left: 0; bottom: 0; opacity: 0; transition: all 0.4s ease-in-out 0s; z-index: 99; } figure:hover:after {/*マウスホバーでオーバーレイ表示*/ opacity: 0.7; } .photo01 {/*表示する画像*/ background-image: url("https://picsum.photos/700/500"); } .photo02 {/*表示する画像*/ background-image: url("https://picsum.photos/701/500"); } .photo03 {/*表示する画像*/ background-image: url("https://picsum.photos/703/500"); } .lightbox-target {/*lightbox*/ position: fixed; top: -100%; width: 100%; background: rgba(0, 0, 0, 0.7); width: 100%; opacity: 0; transition: opacity 0.5s ease-in-out; overflow: hidden; z-index: 300; } .lightbox-target .container { margin: auto; position: absolute; top: 50vh; left: 50vw; background-color: white; box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3); transition: 0.5s ease-in-out; text-align: left; transform: translate3d(-50%, -50%, 0); } a.lightbox-close {/*閉じるボタン*/ display: block; width: 50px; height: 50px; background: white; color: black; text-decoration: none; position: absolute; top: 0; right: 0; margin: 0; padding-top: 10px; } .lightbox-target:target { opacity: 1; top: 0; bottom: 0; } .lightbox-target:target img { height: 400px; vertical-align: top; }
html
<div class="row"> <a class="lightbox" href="#photo01"> <figure class="photo01"> <p>Photo 01</p> </figure> </a> <div class="lightbox-target" id="photo01"> <div class="container"> <img src="https://picsum.photos/700/500"> <a class="lightbox-close" href="#">X</a> </div> </div> ・ ・ ・ </div>