Можно ли обрезать/маскировать div с помощью html5 и холста?

У меня есть фотогалерея, в которой используются изображения, «обрезанные» под странным углом, но вырез должен быть прозрачным, чтобы видеть фон. Я смог заставить его работать, используя альфа-маски, но должен быть лучший способ.

Вместо того, чтобы маскировать каждое изображение в галерее, я задался вопросом, возможно ли вместо этого обрезать/маскировать содержащий его div с помощью html5.

Мне удалось найти jsfiddle, который я немного изменил, но он обрезает изображение, а не div. Теперь у меня полное замораживание мозга, и я не могу придумать, как изменить его, чтобы вместо этого обрезать / замаскировать div.

Некоторая помощь будет высоко оценена!

jsfiddle здесь, используя приведенный ниже код. Пожалуйста, сообщите, если требуется дополнительная информация.

CSS:

body {background:#999}
#mycanvas {width:840px;height:457px;border:1px solid red;}

HTML:

<canvas id="mycanvas"></canvas>

js:

// Grab the Canvas and Drawing Context
var canvas = document.getElementById('mycanvas');
var ctx = canvas.getContext('2d');

// Create an image element
var img = document.createElement('IMG');

// When the image is loaded, draw it
img.onload = function () {

    // Save the state, so we can undo the clipping
    ctx.save();


    // Create a shape, of some sort
    ctx.beginPath();
    ctx.moveTo(0, 0);
    ctx.lineTo(840, 0);
    ctx.lineTo(840, 457);
    ctx.lineTo(162, 457);
    ctx.closePath();
    // Clip to the current path
    ctx.clip();


    ctx.drawImage(img, 0, 0);

    // Undo the clipping
    ctx.restore();
}

// Specify the src to load the image
img.src = "http://www.donina.com/donina/clipper.jpg";

person circey    schedule 05.08.2011    source источник


Ответы (1)


Вы можете обрезать div, вращая с помощью css3 другие div. В лучшем случае вам нужно четыре div, если вам нужны случайные углы.

person TiansHUo    schedule 05.08.2011
comment
Я вижу, как это могло бы работать, если бы у меня был простой фон (как я делаю в jsfiddle для демонстрационных целей), однако фон сайта имеет шаблон, и div должен быть правильно обрезан, чтобы увидеть фон; не скрыт повернутыми div. - person circey; 05.08.2011
comment
О, тогда ты делаешь это неправильно. Вы должны включить div в эти четыре div и использовать для них overflow:hidden. Посмотрите на (анимированный) пример здесь: romancortes.com/ficheros/page-flip.html - person TiansHUo; 05.08.2011
comment
Спасибо, я понимаю, что вы имеете в виду (вроде как), но я все еще не понимаю, как сделать перекрывающуюся область прозрачной, чтобы фон был виден. См. jsfiddle с примером. Фон должен быть виден через div с синей рамкой. - person circey; 08.08.2011
comment
Неважно - разобрался, что я делал не так, и все в порядке. Большое спасибо TiansHUo за то, что указали мне правильное направление! - person circey; 08.08.2011