我目前在页面底部显示2个三角形,一个在左边,一个在右边。直角三角形是透明的。两个三角形都有一种颜色。
我希望triangle-bottom-right
有一个额外的渐变级别(额外的颜色停止)。
它应该从左到右,从rgba(70, 70, 70, 0.15)
开始,以rgba(70, 70, 70, 0)
结束。目标浏览器是Chrome(通过Electron运行)。
生成的三角形应该能够调整到浏览器宽度,高度是恒定的。
我的CSS:
.triangle-footer {
position: relative;
bottom: 0px;
height: 176px;
width: 100%;
}
.triangle-bottom-left {
position: absolute;
width: 40%;
height: 100%;
left: 0px;
bottom: 0px;
background: linear-gradient(to right top, rgba(94, 194, 82, 100) 50%, rgba(255, 255, 255, 0) 50%);
}
.triangle-bottom-right {
position: absolute;;
width: 125%;
height: 140%;
right: 0px;
bottom: 0px;
background: linear-gradient(to left top, rgba(70, 70, 70, 0.15) 50%, rgba(255, 255, 255, 0) 50%);
}
我的HTML:
<div class="ui fixed bottom sticky triangle-footer">
<div class="triangle-bottom-left"></div>
</div>
<div class="ui fixed bottom sticky triangle-footer">
<div class="triangle-bottom-right"></div>
</div>
(使用 Semantic-UI 获取最低粘性)
答案 0 :(得分:5)
据我所知,仅使用linear-gradient
背景图片无法做到这一点,因为直角三角形本身只显示为三角形,因为它对50%是透明的并且为休息而填充。如果我们在此图层的顶部放置另一层从左到右的渐变,那么如果我们在左下方放置从左到右的渐变,则渐变将显示为triangle-bottom-right
(或)的整个正方形区域。此层也将显示整个方形区域,因为产生三角形的渐变的上半部分是透明的。因此,唯一的选择是(a)将上半部分设为“白色”并将第二个渐变放在其下方或(b)使用遮罩或剪辑路径隐藏上半部分。
使用SVG掩码:
由于CSS掩码和CSS剪辑路径目前都没有良好的浏览器支持。最好的选择是为mask
使用内联SVG,如下面的代码段所示。
.triangle-footer {
position: relative;
bottom: 0px;
height: 176px;
width: 100%;
}
.triangle-bottom-left {
position: absolute;
width: 40%;
height: 100%;
left: 0px;
bottom: 0px;
background: linear-gradient(to right top, rgba(94, 194, 82, 100) 50%, rgba(255, 255, 255, 0) 50%);
}
.triangle-bottom-right {
position: absolute;
width: 125%;
height: 140%;
right: 0px;
bottom: 0px;
}
svg {
position: relative;
right: 0px;
bottom: 0px;
width: 100%;
height: 100%;
}
polygon#right-triangle {
fill: url(#grad);
mask: url(#triangle);
}
<script src="http://semantic-ui.com/dist/semantic.js"></script>
<link href="http://semantic-ui.com/dist/semantic.css" rel="stylesheet" />
<div class="ui fixed bottom sticky triangle-footer">
<div class="triangle-bottom-left"></div>
</div>
<div class="ui fixed bottom sticky triangle-footer">
<div class="triangle-bottom-right">
<svg viewBox="0 0 100 100" preserveAspectRatio="none">
<defs>
<linearGradient id="grad">
<stop offset="0%" stop-color="rgba(70, 70, 70, 0.35)" />
<stop offset="100%" stop-color="rgba(255, 255, 255, 0)" />
</linearGradient>
<mask id="triangle">
<polygon points="0,0 100,0 100,100 0,100" fill="black" />
<polygon points="0,90 0,100 100,100 100,0" fill="white" />
</mask>
</defs>
<polygon points="0,0 100,0 100,100 0,100" id="right-triangle" />
</svg>
</div>
</div>
使用SVG多边形:(也可以使用path
元素完成)
这也可以使用一个SVG polygon
元素而不是mask
来完成,如下面的代码段所示。我会留给你选择一个:)
.triangle-footer {
position: relative;
bottom: 0px;
height: 176px;
width: 100%;
}
.triangle-bottom-left {
position: absolute;
width: 40%;
height: 100%;
left: 0px;
bottom: 0px;
background: linear-gradient(to right top, rgba(94, 194, 82, 100) 50%, rgba(255, 255, 255, 0) 50%);
}
.triangle-bottom-right {
position: absolute;
width: 125%;
height: 140%;
right: 0px;
bottom: 0px;
}
svg {
position: relative;
right: 0px;
bottom: 0px;
width: 100%;
height: 100%;
}
polygon#right-triangle {
fill: url(#grad);
}
<script src="http://semantic-ui.com/dist/semantic.js"></script>
<link href="http://semantic-ui.com/dist/semantic.css" rel="stylesheet" />
<div class="ui fixed bottom sticky triangle-footer">
<div class="triangle-bottom-left"></div>
</div>
<div class="ui fixed bottom sticky triangle-footer">
<div class="triangle-bottom-right">
<svg viewBox="0 0 100 100" preserveAspectRatio="none">
<defs>
<linearGradient id="grad">
<stop offset="0%" stop-color="rgba(70, 70, 70, 0.35)" />
<stop offset="100%" stop-color="rgba(255, 255, 255, 0)" />
</linearGradient>
</defs>
<polygon points="0,90 0,100 100,100 100,0" id="right-triangle" />
</svg>
</div>
</div>
使用CSS掩码:(最适合您,因为Chrome是唯一目标)
由于您已指明目标浏览器仅为Chrome并且其中支持CSS mask
,因此您还可以将-webkit-mask-image
属性与线性渐变一起使用,如下面的代码段所示。我已经将它列为最后一个,因为对于使用不同浏览器要求查看此线程的任何其他用户,它是最不推荐的。
.triangle-footer {
position: relative;
bottom: 0px;
height: 176px;
width: 100%;
}
.triangle-bottom-left {
position: absolute;
width: 40%;
height: 100%;
left: 0px;
bottom: 0px;
background: linear-gradient(to right top, rgba(94, 194, 82, 100) 50%, rgba(255, 255, 255, 0) 50%);
}
.triangle-bottom-right {
position: absolute;
width: 125%;
height: 140%;
right: 0px;
bottom: 0px;
background: linear-gradient(to right, rgba(70, 70, 70, 0.15), rgba(255, 255, 255, 0));
-webkit-mask-image: linear-gradient(to top left, white 50%, transparent 50%);
}
<script src="http://semantic-ui.com/dist/semantic.js"></script>
<link href="http://semantic-ui.com/dist/semantic.css" rel="stylesheet" />
<div class="ui fixed bottom sticky triangle-footer">
<div class="triangle-bottom-left"></div>
</div>
<div class="ui fixed bottom sticky triangle-footer">
<div class="triangle-bottom-right">
</div>
</div>
使用CSS剪辑路径(由于Chrome是唯一目标,因此非常有用)
可以使用CSS剪辑路径完成,如下面的代码段所示。右下角元素被剪裁为所需的三角形形状,并向其应用从左到右的渐变。
.triangle-footer {
position: relative;
bottom: 0px;
height: 176px;
width: 100%;
}
.triangle-bottom-left {
position: absolute;
width: 40%;
height: 100%;
left: 0px;
bottom: 0px;
background: linear-gradient(to right top, rgba(94, 194, 82, 100) 50%, rgba(255, 255, 255, 0) 50%);
}
.triangle-bottom-right {
position: absolute;
width: 125%;
height: 140%;
right: 0px;
bottom: 0px;
background: linear-gradient(to right, rgba(70, 70, 70, 0.15), rgba(255, 255, 255, 0));
-webkit-clip-path: polygon(0% 90%, 0% 100%, 100% 100%, 100% 0%);
}
<script src="http://semantic-ui.com/dist/semantic.js"></script>
<link href="http://semantic-ui.com/dist/semantic.css" rel="stylesheet" />
<div class="ui fixed bottom sticky triangle-footer">
<div class="triangle-bottom-left"></div>
</div>
<div class="ui fixed bottom sticky triangle-footer">
<div class="triangle-bottom-right">
</div>
</div>
答案 1 :(得分:2)
仅供参考,并被视为普通白色背景上的潜在后备。
3个渐变+背景大小可以工作。
html {
min-height:100%;
background:
linear-gradient(to left, rgba(255,255,255,0.75), rgba(255,255,255,0) 60%) bottom no-repeat,
linear-gradient(to top left, rgba(0,0,0,0.1) 50%, transparent 50%)bottom right no-repeat,
linear-gradient( to top right, #5EC252 50%, transparent 50%)bottom left no-repeat white;
background-size:100% 245px, 127% 245px , 40% 170px;
}