2014-02-10 48 views
0

我曾经在一些网站的一些顶部页面部分看到在同一部分的顶部有一个css效果,就像用一些css(border-color & border-stile)完成的“horizo​​ntal-vertical-crop”。如何使用canvas或css制作此“垂直裁剪图像”?

但我怎么能做到相同的背景图像,而不是颜色? (解释下面的图片更好)

Explanation

原址链接:here

我可以用帆布或CSS做呢?非常感谢!

+0

是的,可以在两个帆布和CSS来实现 - 可能是在CSS更容易。你有什么是下面的人形象加上角度.png顶部。当用户滚动时,背景图像的滚动速度将不同于前倾角度的png。结果是你看到的视差显示。谷歌视差,揭示和滚动 - 有很多例子。 – markE

+0

嗨markE,我不想要如何学习做视差,我想在div的顶部放置背景图片(例如图案),就像我在图像示例中展示的那样... ty! –

+0

好吧,我发布了一个答案,展示了如何使用画布将任何需要的图像剪切成任何你需要的形状。你也可以使用context.createPattern做一个修剪的填充模式。 – markE

回答

0

您可以使用HTML画布剪辑矩形图像成您需要的梯形形状:

演示:http://jsfiddle.net/m1erickson/Mnkz3/

enter image description here enter image description here

然后使用canvas.toDataURL()来创建可以在您的网页位置的img元素。

// create a temporary canvas we can use to 
// make the clipped image 
var canvas=document.createElement("canvas"); 
var ctx=canvas.getContext("2d"); 

var img=new Image(); 
img.crossOrigin="anonymous"; 
img.onload=start; 
img.src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/city-q-c-640-480-2.jpg"; 
function start(){ 
    var w=canvas.width=img.width; 
    var h=canvas.height=img.height; 
    ctx.save(); 
    ctx.moveTo(0,100); 
    ctx.lineTo(w,70); 
    ctx.lineTo(w,h); 
    ctx.lineTo(0,h-30); 
    ctx.closePath(); 
    ctx.stroke(); 
    ctx.clip(); 
    ctx.drawImage(img,0,0); 
    ctx.restore(); 

    var newImg=document.createElement("img"); 
    newImg.src=canvas.toDataURL(); 
    document.body.appendChild(newImg); 
} 

或者,你可以用这样的重复图案填充裁剪区域:

var p=ctx.createPattern(img,"repeat"); 
ctx.fillStyle=p; 
ctx.fill(); 
+0

如果我有一个无缝模式的div ...我怎么才能只剪辑边框?提前致谢! –

+0

你的剪贴路径可以是你需要的任何路径!仅在所产生的边界上剪裁无缝图案并不困难。首先,注释掉ctx。剪辑并添加ctx.stroke。这样你就可以看到完整的图像和描边区域,它们将成为你的裁剪区域。然后使用多个ctx.lineTo命令来“勾勒”您的边框。大纲后,删除ctx.stroke并取消注释ctx.clip。完成! – markE

0

以下是您可以使用的纯CSS解决方案,但我强烈建议使用SVG( 可缩放矢量图形)。

为了使三角形与css响应,我使border-right的数字很大以确保它适用于大型计算机,媒体查询可以帮助缩小尺寸。这就是为什么SVG会更好,因为它设置为100%宽度时会有响应。

下面是HTML:

<div class="triAngl"> 
    <div class="inner"></div> 
</div> 

这里是CSS:

.triAngl, .inner { 
    width: 100%; 
    height: 300px; 
    position: absolute; 
    top: 50%; 
    margin-top: -150px; 
    background: #ff9900; 
} 

.triAngl:before, .triAngl:after { 
    content: ""; 
    position: absolute; 
    left: 0; 
    border-right: 0 solid transparent; 
    border-left: 2000px solid transparent; 
} 

.triAngl:before { 
    bottom: 100%; 
    border-bottom: 50px solid #ff9900; 
} 

.triAngl:after { 
    top: 100%; 
    border-top: 50px solid #ff9900; 
} 

.inner { 
    background: #2b2b2b; 
} 

最后,小提琴:Demo, remove "show" in url to view code.

+0

感谢您的快速回复Josh! 我的意思是这个http://imageshack.com/a/img547/5681/d6g0.jpg –