CSS - 이미지 갤러리

안녕하세요, 웹 디자인 초보자 여러분! 오늘 우리는 CSS 이미지 갤러리의 흥미로운 세계로 뛰어들어 볼 거예요. 여러분의 친절한 이웃 컴퓨터 선생님으로서, 저는 이 여정을 안내해 드리는 것을 매우 기쁘게 생각합니다. 지루한 정적 이미지들을 눈부신, 상호작용이 가능한 갤러리로 변환해 보겠습니다!

CSS - Image Gallery

간단한 이미지 갤러리

먼저 기본적인 것으로 시작해 보겠습니다. 간단한 이미지 갤러리는 벽에 사진을 배치하는 것과 같아요 - 전시 방법에 대해 알아보는 것입니다. 다음은 CSS를 사용하여 간단한 이미지 갤러리를 만드는 방법입니다:

<div class="gallery">
<img src="image1.jpg" alt="이미지 1">
<img src="image2.jpg" alt="이미지 2">
<img src="image3.jpg" alt="이미지 3">
</div>
.gallery {
display: flex;
flex-wrap: wrap;
justify-content: center;
}

.gallery img {
width: 200px;
height: 200px;
margin: 10px;
object-fit: cover;
}

이 예제에서 우리는 flebox를 사용하여 반응형 레이아웃을 만듭니다. flex-wrap: wrap 속성은 공간이 부족할 때 이미지가 다음 줄로 넘어가도록 합니다. justify-content: center 속성은 이미지를 수평 중앙에 배치합니다.

호버 효과가 있는 이미지 갤러리

이제 상호작용을 추가해 보겠습니다! 호버 효과는 갤러리를 더욱 흥미롭게 만들 수 있습니다. 가까이서 보면 나타나는 비밀 메시지 같은 느낌을 줍니다.

<div class="gallery">
<div class="image-container">
<img src="image1.jpg" alt="이미지 1">
<div class="overlay">
<div class="text">Hello World</div>
</div>
</div>
<!-- 다른 이미지들에 대해 반복 -->
</div>
.image-container {
position: relative;
width: 200px;
height: 200px;
}

.overlay {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
height: 100%;
width: 100%;
opacity: 0;
transition: 0.5s ease;
background-color: rgba(0,0,0,0.5);
}

.image-container:hover .overlay {
opacity: 1;
}

.text {
color: white;
font-size: 20px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
}

이 CSS는 호버할 때 나타나는 오버레이를 생성합니다. transition 속성은 부드러운.fade-in 효과를 제공합니다.

반응형 이미지 갤러리 사용하는 미디어 쿼리

오늘날 다양한 장치에서 사용되는 시대에, 반응성은 중요합니다. 우리의 갤러리가 다양한 화면 크기에 맞게 조정되도록 만들겠습니다:

.gallery {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 10px;
}

@media screen and (max-width: 600px) {
.gallery {
grid-template-columns: repeat(2, 1fr);
}
}

@media screen and (max-width: 400px) {
.gallery {
grid-template-columns: 1fr;
}
}

이 CSS는 CSS Grid를 사용하여 반응형 레이아웃을 만듭니다. minmax 함수는 이미지가 최소 200px宽이고 공간이 허용된다면 더 커질 수 있도록 합니다. 미디어 쿼리는 화면 크기에 따라 레이아웃을 조정합니다.

이미지 갤러리의 문법 이해

이제 사용한 문법을 이해해 보겠습니다. CSS 속성은 다음과 같은 구조를 따릅니다:

selector {
property: value;
}

다음은 이미지 갤러리에서 자주 사용되는 일반 CSS 속성 표입니다:

속성 설명 예제
display 표시 행동 지정 display: flex;
width 요소의 너비 설정 width: 200px;
height 요소의 높이 설정 height: 200px;
margin 요소의 여백 설정 margin: 10px;
object-fit 이미지의 크기 조정 방법 지정 object-fit: cover;
position 위치 방법 지정 position: relative;
opacity 요소의 투명도 설정 opacity: 0;
transition 전환 효과 설정 transition: 0.5s ease;

수평 스크롤이 있는 이미지 갤러리

때로는 갤러리가 수평으로 스크롤되는 것이 좋습니다. 이미지 레일을 스와이프할 수 있는 것 같은 느낌을 줍니다:

<div class="gallery-container">
<div class="gallery-scroll">
<img src="image1.jpg" alt="이미지 1">
<img src="image2.jpg" alt="이미지 2">
<!-- 필요한 만큼 더 많은 이미지 추가 -->
</div>
</div>
.gallery-container {
width: 100%;
overflow-x: auto;
}

.gallery-scroll {
display: flex;
width: max-content;
}

.gallery-scroll img {
width: 200px;
height: 200px;
margin-right: 10px;
object-fit: cover;
}

이 CSS는 수평 스크롤이 가능한 갤러리를 생성합니다. overflow-x: auto 속성은 필요할 때 수평 스크롤 바를 추가합니다.

수직 스크롤이 있는 이미지 갤러리

수직 스크롤 갤러리는 많은 이미지를 compac한 공간에 보여주기에 훌륭합니다:

<div class="gallery-vertical">
<img src="image1.jpg" alt="이미지 1">
<img src="image2.jpg" alt="이미지 2">
<!-- 필요한 만큼 더 많은 이미지 추가 -->
</div>
.gallery-vertical {
height: 400px;
overflow-y: scroll;
display: flex;
flex-direction: column;
align-items: center;
}

.gallery-vertical img {
width: 200px;
height: 200px;
margin-bottom: 10px;
object-fit: cover;
}

이 CSS는 수직 스크롤이 가능한 갤러리를 생성합니다. overflow-y: scroll 속성은 수직 스크롤 바를 추가합니다.

CSS 그리드 이미지 갤러리

CSS Grid는 복잡한 레이아웃을 만드는 강력한 도구입니다. 그리드를 사용하여 동적 이미지 갤러리를 만들어 보겠습니다:

<div class="grid-gallery">
<img src="image1.jpg" alt="이미지 1">
<img src="image2.jpg" alt="이미지 2">
<img src="image3.jpg" alt="이미지 3">
<img src="image4.jpg" alt="이미지 4">
<img src="image5.jpg" alt="이미지 5">
</div>
.grid-gallery {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 10px;
}

.grid-gallery img {
width: 100%;
height: 200px;
object-fit: cover;
}

.grid-gallery img:nth-child(4) {
grid-column: span 2;
}

.grid-gallery img:nth-child(5) {
grid-row: span 2;
}

이 CSS는 그리드 레이아웃을 만들어 일부 이미지가 여러 열이나 행을 차지하게 합니다.

탭으로 구성된 이미지 갤러리

탭으로 구성된 갤러리는 다양한 이미지 그룹을 정리하는 좋은 방법입니다:

<div class="tab">
<button class="tablinks" onclick="openTab(event, 'Nature')">자연</button>
<button class="tablinks" onclick="openTab(event, 'City')">도시</button>
</div>

<div id="Nature" class="tabcontent">
<img src="nature1.jpg" alt="자연 1">
<img src="nature2.jpg" alt="자연 2">
</div>

<div id="City" class="tabcontent">
<img src="city1.jpg" alt="도시 1">
<img src="city2.jpg" alt="도시 2">
</div>
.tab {
overflow: hidden;
border: 1px solid #ccc;
background-color: #f1f1f1;
}

.tab button {
background-color: inherit;
float: left;
border: none;
outline: none;
cursor: pointer;
padding: 14px 16px;
transition: 0.3s;
}

.tab button:hover {
background-color: #ddd;
}

.tab button.active {
background-color: #ccc;
}

.tabcontent {
display: none;
padding: 6px 12px;
border: 1px solid #ccc;
border-top: none;
}

이 CSS는 탭bed 인터페이스를 생성합니다. JavaScript가 필요합니다:

function openTab(evt, tabName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(tabName).style.display = "block";
evt.currentTarget.className += " active";
}

CSS 슬라이드 쇼

간단한 슬라이드 쇼를 만들어 보겠습니다:

<div class="slideshow-container">
<div class="mySlides fade">
<img src="img1.jpg" style="width:100%">
</div>
<div class="mySlides fade">
<img src="img2.jpg" style="width:100%">
</div>
<div class="mySlides fade">
<img src="img3.jpg" style="width:100%">
</div>
</div>
.slideshow-container {
max-width: 1000px;
position: relative;
margin: auto;
}

.mySlides {
display: none;
}

.fade {
animation-name: fade;
animation-duration: 1.5s;
}

@keyframes fade {
from {opacity: .4}
to {opacity: 1}
}

JavaScript가 필요합니다:

var slideIndex = 0;
showSlides();

function showSlides() {
var i;
var slides = document.getElementsByClassName("mySlides");
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
slideIndex++;
if (slideIndex > slides.length) {slideIndex = 1}
slides[slideIndex-1].style.display = "block";
setTimeout(showSlides, 2000); // 2초마다 이미지 변경
}

CSS 슬라이드 갤러리

마지막으로, 슬라이드 쇼와 썸네일을 결합하여 더욱 상호작용이 가능한 경험을 제공하는 슬라이드 갤러리를 만들어 보겠습니다:

<div class="slideshow-container">
<div class="mySlides fade">
<img src="img1.jpg" style="width:100%">
</div>
<div class="mySlides fade">
<img src="img2.jpg" style="width:100%">
</div>
<div class="mySlides fade">
<img src="img3.jpg" style="width:100%">
</div>
</div>

<div class="row">
<div class="column">
<img class="demo cursor" src="img1.jpg" style="width:100%" onclick="currentSlide(1)">
</div>
<div class="column">
<img class="demo cursor" src="img2.jpg" style="width:100%" onclick="currentSlide(2)">
</div>
<div class="column">
<img class="demo cursor" src="img3.jpg" style="width:100%" onclick="currentSlide(3)">
</div>
</div>
.row {
display: flex;
}

.column {
flex: 33.33%;
padding: 5px;
}

.demo {
opacity: 0.6;
}

.active,
.demo:hover {
opacity: 1;
}

JavaScript를 수정하여 썸네일 클릭을 처리합니다:

function currentSlide(n) {
showSlides(slideIndex = n);
}

function showSlides(n) {
var i;
var slides = document.getElementsByClassName("mySlides");
var dots = document.getElementsByClassName("demo");
if (n > slides.length) {slideIndex = 1}
if (n < 1) {slideIndex = slides.length}
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
for (i = 0; i < dots.length; i++) {
dots[i].className = dots[i].className.replace(" active", "");
}
slides[slideIndex-1].style.display = "block";
dots[slideIndex-1].className += " active";
}

이제 여러분은 다양한 CSS 이미지 갤러리 기술을 다루었으니, 이를 결합하여 자신만의 독특한 갤러리를 만들어 보세요.编码愉快!

Credits: Image by storyset