Вёрстка синхронного видео в вырезанных блоках: пошаговое руководство
Задача сверстать блок, где одно видео воспроизводится синхронно в нескольких вырезанных областях, может показаться сложной. Однако современные CSS-техники, такие как clip-path, mask и SVG, позволяют реализовать этот эффект без использования JavaScript. В этой статье мы подробно разберём, как создать адаптивный блок с синхронным видео, где линии движения выглядят как единый поток.
Основная идея: одно видео - много масок
Ключевой принцип - использовать одно фоновое видео, на которое накладываются маски или обтравочные контуры. Видео играет один раз, а каждый блок показывает только свою часть через вырезанную область. Это обеспечивает идеальную синхронизацию.
Способ 1: Использование clip-path
Свойство clip-path позволяет обрезать элемент по заданному пути. Вы можете создать несколько контейнеров, каждый из которых будет содержать одно и то же видео, но с разными clip-path.
Пример реализации:
<div class='video-clip' style='clip-path: polygon(0 0, 50% 0, 50% 100%, 0 100%);'>
<video autoplay loop muted>
<source src='video.mp4' type='video/mp4'>
</video>
</div>
<div class='video-clip' style='clip-path: polygon(50% 0, 100% 0, 100% 100%, 50% 100%);'>
<video autoplay loop muted>
<source src='video.mp4' type='video/mp4'>
</video>
</div>Недостаток: видео загружается несколько раз, что увеличивает нагрузку. Чтобы избежать этого, используйте mask.
Способ 2: Маски (CSS mask)
Техника с mask позволяет наложить маску на элемент, скрывая части видео. Вы создаёте один элемент с видео, а маску задаёте через SVG или градиент.
Шаги:
- Создайте контейнер с видео, которое будет фоном.
- Определите маску с помощью
mask-imageилиmask. - Используйте несколько масок для разных блоков, комбинируя их через
mask-composite.
Пример маски через SVG:
<svg>
<defs>
<mask id='mask1'>
<rect width='100%' height='100%' fill='white' />
<circle cx='50%' cy='50%' r='30%' fill='black' />
</mask>
</defs>
</svg>
<div style='mask: url(#mask1);'>
<video ...></video>
</div>Способ 3: SVG с foreignObject
SVG-элемент foreignObject позволяет встраивать HTML внутрь SVG. Вы можете создать SVG-контейнер, в котором разместите видео, а затем обрезать его с помощью SVG-путей.
Пример:
<svg viewBox='0 0 800 600'>
<clipPath id='clip1'>
<polygon points='0,0 200,0 200,600 0,600' />
</clipPath>
<foreignObject clip-path='url(#clip1)' width='800' height='600'>
<video autoplay loop muted style='width:800px;height:600px;'>
<source src='video.mp4' type='video/mp4'>
</video>
</foreignObject>
</svg>Этот метод даёт полный контроль над формой вырезанных блоков и отлично работает в современных браузерах.
Адаптивность
Для адаптивности используйте относительные единицы (%, vw, vh) в координатах clip-path и масок. Также можно применять медиа-запросы для изменения формы вырезанных областей на мобильных устройствах.
Заключение
Вёрстка синхронного видео в вырезанных блоках - это комбинация CSS и SVG. Выберите метод в зависимости от сложности формы: для простых геометрических фигур подойдёт clip-path, для сложных - SVG-маски. Главное - использовать одно видео, чтобы обеспечить синхронность.