Ваше требование поддержки IE9 в основном требует холст-подхода, если вы хотите сохранить его на стороне клиента.Конечно, вы можете выполнить рендеринг на стороне сервера, и AJAX загрузит отрендеренное изображение обратно, в котором оно будет работать в любом браузере.
Если вы решите, что вы можете вывести версии IE меньше 10 (или хотя бы просто показать ихобычное фото без преобразования, тогда вы можете сделать эффект обтекания с помощью комбинации CSS 3D Transforms и CSS2. Что-то вроде:
<!DOCTYPE html>
<style>
body { margin: 100px; position: relative; }
.edge { width: 20px; height: 196px; background-size: auto 100%; position: absolute; left: 30px; top: 2px; transform: perspective(600px) rotateY(-45deg); transform-origin: right; }
.panel { position: absolute; left: 31px; top: 0; clip: rect(auto,auto,auto,20px); }
.panel>img { width: 350px; height: 200px; transform: perspective(600px) rotateY(30deg); transform-origin: left; }
</style>
<div class="edge" style="background-image: url(my_image.jpg)"></div>
<div class="panel"><img src="my_image.jpg" /></div>
Чтобы разбить это, мы загрузили изображение пользователяи поместил его на страницу вместе с div
с тем же изображением, установленным в качестве фона. Это div
имеет тонкую ширину и высоту, почти такие же высокие, как у основного изображения. Мы можем использовать *Свойство 1008 * позволяет расположить фоновое изображение так, чтобы оно соответствовало div
, даже если оно выше.
Затем мы расположим эти два элемента так, чтобы они были рядом друг с другом. Свойство CSS2 clip
позволяет намотрежьте левые 20 пикселей изображения, чтобы в этот момент div
и img
выглядели как одно изображение вместе.
Наконец, мы устанавливаем perspective
и transform-origin
for каждый блок и поверните их друг от друга вокруг оси Y.Из-за отсечения мы должны пометить блок .edge
, чтобы он был немного меньше, чем первоначально (с изображением высотой 200 пикселей мне пришлось уменьшить его до 196 пикселей, чтобы он выглядел хорошо), но для меня это очень хорошо работает.
Очевидно, вам нужно будет заполнить префиксы вендора (-moz-, -ms-, -o-, -webkit), и я оставлю тень в качестве упражнения для читателя (простой фон на контейнере, вероятно, подойдет).