Как создать Постер из разных фотографий на CSS | Poster from different photos using CSS
Создание одного постера из 9-ти разных фотографий на примере обложки игры GTA 5. Решение выполнено с использованием css-свойств display: grid; и clip-path
ДЕМО - ПРИМЕР:
HTML КОД:
<div class="poster-images">
<a href="#link">
<img src="photo-1.jpg" alt="">
</a>
<a href="#link">
<img src="photo-2.jpg" alt="">
</a>
<a href="#link">
<img src="photo-3.jpg" alt="">
</a>
<a href="#link">
<img src="photo-4.jpg" alt="">
</a>
<a href="#link">
<img src="photo-5.jpg" alt="">
</a>
<a href="#link">
<img src="photo-6.jpg" alt="">
</a>
<a href="#link">
<img src="photo-7.jpg" alt="">
</a>
<a href="#link">
<img src="photo-8.jpg" alt="">
</a>
<a href="#link">
<img src="photo-9.jpg" alt="">
</a>
</div>
CSS КОД:
.poster-images {
padding: .8rem;
background: #000;
height: 800px;
width: 100%;
max-width: 600px;
margin: 20px auto;
overflow: hidden;
display: grid;
grid-template-columns: 1fr .7fr .3fr 1fr;
grid-template-rows: 20% 40% 20% 20%;
grid-template-areas: 'one two two three' 'four five five five' 'six five five five' 'six seven eight eight';
box-sizing: border-box;
}
@media screen and (max-width:600px) {
.poster-images {
height: 600px;
}
}
.poster-images img {
width: 100%;
max-width: none;
height: 100%;
object-fit: cover;
object-position: 40% 0;
filter: sepia(0.5);
transition: filter 0.5s;
}
.poster-images a:hover img {
filter: sepia(0);
}
.poster-images a:nth-child(1) img,
.poster-images a:nth-child(2) img,
.poster-images a:nth-child(3) img {
width: 120%;
height: 120%;
}
.poster-images a:nth-child(4) img,
.poster-images a:nth-child(9) img {
width: 135%;
height: 135%;
}
.poster-images a:nth-child(5) img {
width: 105%;
height: 105%;
}
.poster-images a:first-child {
grid-area: one;
clip-path: polygon(0% 0%, 93.24% 0%, 105.04% 110.16%, 0% 90%);
}
.poster-images a:nth-child(2) {
grid-area: two;
clip-path: polygon(0% 0%, 108.28% 0%, 96.45% 110.13%, 10.55% 110.93%);
}
.poster-images a:nth-child(3) {
grid-area: three;
clip-path: polygon(15.05% 0%, 100% 0%, 99.35% 91.7%, 3.08% 108.48%);
}
.poster-images a:nth-child(4) {
grid-area: four;
clip-path: polygon(0% -0.85%, 106.34% 9.98%, 121.32% 65.63%, 99.66% 109.89%, 1.86% 124.41%);
}
.poster-images a:nth-child(5) {
grid-area: five;
clip-path: polygon(6.4% 6.48%, 47.24% 5.89%, 100% 0%, 98.41% 96.85%, 53.37% 102.5%, 53% 63.21%, 3.23% 73.02%, 14.3% 44.04%);
}
.poster-images a:nth-child(6) {
grid-area: six;
clip-path: polygon(2.14% 29.3%, 99.34% 15.42%, 98.14% 100.82%, 1.57% 101.2%);
}
.poster-images a:nth-child(7) {
grid-area: seven;
clip-path: polygon(7.92% 33.47%, 96.31% 23.39%, 95.38% 100%, 5.3% 100.85%);
}
.poster-images a:nth-child(8) {
grid-area: eight;
clip-path: polygon(2.5% 22.35%, 100% 0%, 100% 100%, 1.55% 100%);
}
.poster-images a:nth-child(9) {
grid-row-start: 3;
grid-row-end: 4;
grid-column-start: 2;
grid-column-end: 4;
clip-path: polygon(5.94% 28.66%, 100.61% -0.67%, 101.1% 108.57%, 5.4% 126.28%);
}
Позицию каждой фотографии можно подогнать свойством object-position, как проставлены для некоторых размеры
Выбрать другой фильтр для фотографий можно в теме "CSS фильтры" и заменить filter: sepia(0.5) на нужный
Если не делать из постера своего рода галерею, то нужно заменить тег а на div и убрать этот фильтр
0 Комментарии