Справка по макету сетки и пути обрезки (исчезающее среднее изображение)

В настоящее время я изучаю клип-путь. У меня возникли проблемы с расположением сетки и исчезновением изображения.

У меня есть три изображения в div под названием .gallery. Я хочу, чтобы они:

  • Отображать рядом друг с другом в пределах их клип-пути.
  • Между ними должно быть расстояние 10 пикселей.
  • Реагируйте на размер экрана, пропорционально уменьшаясь, но сохраняя их форму.

.gallery {
  display: grid;
  gap: 10px;
  box-sizing: border-box;
  grid-template-columns: auto 0 auto;
  place-items: center;
}

.gallery>img {
  max-width: 100%;
  aspect-ratio: 1;
  object-fit: cover;
}

.gallery>img:nth-child(1) {
  clip-path: polygon(0 0, 50% 0, 100% 100%, 0 100%);
}

.gallery>img:nth-child(2) {
  /\* Clip-path for the middle image \*/ clip-path: polygon(0 0, 100% 0, 50% 100%);
}

.gallery>img:nth-child(3) {
  clip-path: polygon(50% 0, 100% 0, 100% 100%, 0 100%);
}

@media (max-width: 610px) {
  .gallery>img {
    width: 100%;
  }
  .gallery {
    grid-template-columns: auto auto auto;
  }
}
<div class = "gallery">
  <img SRC = "https://dummyimage.com/600x400/000/fff&text=one">
  <img SRC = "https://dummyimage.com/600x400/000/fff&text=two">
  <img SRC = "https://dummyimage.com/600x400/000/fff&text=three">
</div>

Среднее изображение исчезает при использовании столбцов сетки-шаблона: auto 0 auto; за отзывчивость. Я попытался изменить его на auto auto auto в медиа-запросе, и хотя это предотвращает исчезновение изображения, разрыв между изображениями превышает 10 пикселей.

Может ли кто-нибудь указать мне правильное направление, чтобы исправить исчезающее изображение и добиться желаемого макета с постоянным интервалом?

столбцы-шаблона сетки: авто 0 авто

столбцы-шаблона сетки: авто авто авто

Почему вы говорите, что средний столбец имеет нулевую ширину?

Paulie_D 14.05.2024 21:42

@Paulie_D: возможно, потому, что она новичок в программировании?

Veverke 14.05.2024 21:43

Честно говоря, я бы поместил каждое изображение в отдельный div, вам будет намного проще. Изображения странно реагируют во Flexbox и CSS-Grid.

Paulie_D 14.05.2024 21:44

Мне также не совсем понятно, как это должно выглядеть, если оно правильное.

Paulie_D 14.05.2024 21:47
codepen.io/Paulie-D/pen/NWVqYPW
Paulie_D 14.05.2024 22:03
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
2
5
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы сделал это, как показано ниже, и советую вам прочитать мою статью: https://css-tricks.com/css-grid-and-custom-shapes-part-3/

.gallery {
  --s: 100px; /* control the clip-path and the size of the middle image */ 

  display: flex;
  gap: 10px; /* the gap */
  height: 200px; /* the image height */
}

.gallery > img {
  min-width: 0;
  object-fit: cover;
}

.gallery > img:nth-child(1) {
  flex: 1;
  clip-path: polygon(0 0,calc(100% - var(--s)) 0,100% 100%,0 100%);
}

.gallery > img:nth-child(2) {
  clip-path: polygon(0 0,100% 0,50% 100%);
  width: calc(2*var(--s));
  margin-inline: calc(-1*var(--s));
}

.gallery > img:nth-child(3) {
  flex: 1;
  clip-path: polygon(var(--s) 0, 100% 0, 100% 100%, 0 100%);
}
<div class = "gallery">
  <img src = "https://picsum.photos/id/28/800/400">
  <img src = "https://picsum.photos/id/174/800/400">
  <img src = "https://picsum.photos/id/188/800/400">
</div>

Другие вопросы по теме