#javascript #html #css #css3 #svg
Есть нетривиальная задача. html, body, .bg-cover { height: 100%; margin: 0; } .bg-cover { background-image: url(//i.stack.imgur.com/JkEWk.jpg); background-size: cover; } .element { position: absolute; background: red; background: rgba(255,0,0,.5); height: 10.416666666666668vw; width: 18.75vw; background-size: cover; z-index: 2; left: 29.947916666666668vw; top: 24vh; }Фоновое изображение: Необходимо позиционировать element в белой области фона TV, таким образом, чтобы не нарушалось взаимное расположение фона и блока element. Проблема в том, что при разных разрешениях экрана фон масштабируется по разному. Может как-то можно получать позицию пикселя на фоне через js и относительно этого играть? Сталкивался кто-нибудь с подобной проблемой?
Ответы
Ответ 1
Решение адаптивно, работает во всех браузерах, включая Edge. Чтобы два блока с изображениями,- в вашем случае картинка комнаты и фон-изображение на TV, согласованно меняли свои пропорции и не нарушалось при этом взаимное позиционирование, необходимо разместить оба изображения внутри блока SVGИнтересно сделать изображение на TV меняющееся динамически. Идея понятна,- нужно спрятать спрайт с изображениями под картинку спальни и прокручивать спрайт, чтобы сквозь вырез экрана TV был виден спрайт. Пробовал достаточно долго варианты с масками, с клипами, комбинированные способы, но не получилось. Отверстие в экране TV образуется, но сквозь него спрайта не видно. Есть ли у кого идеи, как сделать это? Update Решение динамической смены изображений - Имитация смены изображений на экране TVОтвет 2
svg , конечно, сильная технология, но позиционирование элементов на svg холсте мало отличается от абсолютного позиционирования в css. Для разнообразия предложу такой вариант(вместо гифки можно, например, поставить видео). P.S. Интересно было бы посмотреть решение с обрезкой фоновой картинки(cover). Все таки и в моём варианте, и в решении Alexandr_TT пропорции фона сохраняются. *{ box-sizing:border-box; } body{ margin:0; } img{ max-width:100%; } .room{ position:relative; } .room__bg{ display:block; width:100%; height:auto; } .room__tv{ position:absolute; top:21.7%; left:30.15%; width:19.3%; height:20.2%; background:url(https://upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Rotating_earth_%28large%29.gif/220px-Rotating_earth_%28large%29.gif) no-repeat center/cover; }Ответ 3
Можно сделать ещё проще по топорному если не критичен размер изображений либо разрешение не слишком высоко. Берёте фон и загружаете в фотошоп, добавляете нужный элемент другим слоем и позиционируете, скрываете фон и сохраняете картинку с элементом. получаем и фон и элемент одинакового размера, у элемента соответственно фон прозрачный. в вёрстке размещаете оба блока друг над другом , делаете background-size:cover;background-position: 50% 50%;width:100%;height:100%;left:0;top:0; и всё.
Комментариев нет:
Отправить комментарий