CSS3多边形的剪切部分,但保留内容?

时间:2016-08-20 21:07:56

标签: css3 css-shapes

我有一些代码:



/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 http://localhost:5000

:root {
	--main-color1: rgba(255,000,000,0.7);
	--main-colorB: rgba(000,000,000,0.3);
	
	--border-width: 5px;
	--arrow-width: 16px;
}

body {
	color: #FFFFFF;
	font-family: 'Franklin Gothic';
	font-size: 20px;
	text-shadow: 1px 1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, -1px -1px 0 #000;
	line-height: 50px;
	text-align: center;
}

.full { width: 1280px; margin: 0 auto; }

.inline { display: inline-block; }
.inner { -webkit-clip-path: inset(var(--main-border) 0); }

.color1 { background-color: var(--main-color1); }
.colorB { background-color: var(--main-colorB); }

.match {
	text-transform: uppercase;
	min-width: 200px;
	-webkit-clip-path: polygon(
		var(--arrow-width) 0,
		0 50%,
		var(--arrow-width) 100%,
		calc(100% - var(--arrow-width)) 100%,
		100% 50%,
		calc(100% - var(--arrow-width)) 0
	);
}
.match .inner {
	-webkit-clip-path: polygon(
		calc(var(--arrow-width) + var(--border-width)) var(--border-width),
		calc(var(--border-width) + 3px)  50%,
		calc(var(--arrow-width) + var(--border-width)) calc(100% - var(--border-width)),
		calc(100% - var(--border-width) - var(--arrow-width)) calc(100% - var(--border-width)),
		calc(100% - var(--border-width) - 3px) 50%,
		calc(100% - var(--border-width) - var(--arrow-width)) var(--border-width)
	);
}




正如你所看到的,这是一个灰色的CSS3多边形,里面有一个红色的CSS3多边形,里面有文字......

我遇到的问题是多边形都有alpha透明度。不幸的是,因为第二个多边形在第一个多边形的内部,所以它改变了第二个多边形的结果颜色。有没有办法可以切出第一个多边形的区域,这样它就不会改变第二个多边形的颜色?同时还保留透明度?

1 个答案:

答案 0 :(得分:0)

使用绝对定位的伪元素,并剪切它们以创建边框,并旋转底部元素。由于旋转,与::after元素之间存在小的重叠,我认为您可以通过手动剪切到请求路径而不是旋转顶部元素来修复。



:root {
  --main-color1: rgba(255, 000, 000, 0.7);
  --main-colorB: rgba(000, 000, 000, 0.3);
  --border-width: 5px;
  --arrow-width: 16px;
}
body {
  color: #FFFFFF;
  font-family: 'Franklin Gothic';
  font-size: 20px;
  text-shadow: 1px 1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, -1px -1px 0 #000;
  line-height: 50px;
  text-align: center;
}
.full {
  width: 1280px;
  margin: 0 auto;
}
.inline {
  display: inline-block;
}
.inner {
  -webkit-clip-path: inset(var(--main-border) 0);
}
.color1 {
  background-color: var(--main-color1);
}

.match {
  position: relative;
  text-transform: uppercase;
  min-width: 200px;
}
.match::before,
.match::after {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  background-color: var(--main-colorB);
  -webkit-clip-path: polygon(var(--arrow-width) 0, 0 50%, calc(var(--border-width) + 4px) 50%, calc(var(--arrow-width) + var(--border-width) + 1px) var(--border-width), calc(100% - var(--arrow-width) - var(--border-width)) var(--border-width), calc(100% - var(--border-width) - 3px) 50%, 100% 50%, calc(100% - var(--arrow-width)) 0);
    content: '';
}
  
  .match::before {
    }
  
  .match::after {
    transform: rotate(180deg);
    }
.match .inner {
  -webkit-clip-path: polygon(calc(var(--arrow-width) + var(--border-width)) var(--border-width), calc(var(--border-width) + 3px) 50%, calc(var(--arrow-width) + var(--border-width)) calc(100% - var(--border-width)), calc(100% - var(--border-width) - var(--arrow-width)) calc(100% - var(--border-width)), calc(100% - var(--border-width) - 3px) 50%, calc(100% - var(--border-width) - var(--arrow-width)) var(--border-width));
}

<div class="match inline">
  <div class="inner color1">
    <div class="title">Grand Finals</div>
  </div>
</div>
&#13;
&#13;
&#13;