html 透明的圆形,从div中切出的透明半圆

使用SVG:

这里有一个使用SVG的替代解决方案(尽管您还没有标记它)。使用SVG的优点是:与径向梯度相比,它具有更好的浏览器支持.

SVG可以支持图像内部的形状,不像盒阴影的方法。

虽然<=IE8不支持SVG,而框影支持SVG,但是可以提供后援。svg {

height: 150px;

width: 150px;}polygon {

fill: black;}/* Just for demo */body {

background-image: radial-gradient(circle, #3F9CBA 0%, #153346 100%);}

使用CSS:

CSS也有clip-path规范以及我们可以在下面的片段中尝试类似的内容。.shape {

position: relative;

width: 100px;

height: 100px;

background-color: purple;}.shape:after {

position: absolute;

content: '';

top: 0px;

left: 0px;

height: 100%;

width: 100%;

background: white;

-webkit-clip-path: ellipse(50% 20% at 50% 0%);

clip-path: ellipse(50% 20% at 50% 5%);}.shape.image{

background: url(http://lorempixel.com/100/100);}#shape-2 {

width: 100px;

height: 100px;

background-color: purple;

-webkit-clip-path: ellipse(50% 20% at 50% 20%);

clip-path: ellipse(50% 20% at 50% 20%);}/* Just for demo */.shape{

float: left;

margin: 20px;}#shape-2 {

margin: 150px 20px 0px;}

但与svg剪辑路径不同,纯css版本(即不使用内联或外部svg)似乎无法支持path..它只支持形状,因此在本例中,如果使用clip-path直接在父服务器上生成一个椭圆(如代码片段中所示)。要克服这一问题,我们必须将剪辑路径放在子元素(或伪元素)上,这意味着剪裁区域不透明.

使用画布:

使用画布也可以这样做。Canvas命令与SVG非常相似,它们的优点也非常相似。然而,画布是基于光栅的,因此比不上SVG。window.onload = function() {

/* Canvas example with path */

var canvas = document.getElementById('canvas');

if (canvas.getContext) {

var ctx = canvas.getContext('2d');

var img = new Image();

img.src = 'http://lorempixel.com/150/300';

ctx.beginPath();

ctx.moveTo(110, 0);

ctx.arc(60, 0, 50, 0, 3.14, false);

ctx.lineTo(10, 145);

ctx.lineTo(110, 145);

ctx.closePath();

ctx.fill();

/* Use below for using image as a fill */

/*img.onload = function(){

var ptrn = ctx.createPattern(img,'no-repeat');

ctx.fillStyle = ptrn;

ctx.fill();

}*/

}

/* Canvas example with clip path */

var canvasClip = document.getElementById('canvas-clip');

if (canvasClip.getContext) {

var ctxClip = canvasClip.getContext('2d');

ctxClip.beginPath();

ctxClip.moveTo(10, 145);

ctxClip.lineTo(10, 0);

ctxClip.arc(60, 0, 50, 0, Math.PI * 2, true);

ctxClip.lineTo(110, 145);

ctxClip.lineTo(10, 145);

ctxClip.clip();

ctxClip.fillStyle = 'tomato';

ctxClip.fill();

}}canvas {

height: 150px;

width: 300px;}/* Just for demo */body {

background-image: radial-gradient(circle, #3F9CBA 0%, #153346 100%);}

使用面具:

还可以使用CSS(或)SVG掩码创建此形状。CSS掩码支持很差,目前只在Webkit支持的浏览器中工作,但是SVG掩码支持得更好,应该在IE9+中工作。/* CSS Mask */.shape {

width: 150px;

height: 150px;

background-color: black;

-webkit-mask-image: radial-gradient(circle closest-corner at 50% 0%, transparent 98%, white 99%);

mask-image: radial-gradient(circle closest-corner at 50% 0%, transparent 98%, white 99%);}/* End of CSS Mask */svg {

height: 150px;

width: 150px;}polygon#shape {

fill: black;

mask: url(#masker);}/* Just for demo */body {

background-image: radial-gradient(circle, #3F9CBA 0%, #153346 100%);}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值