div 底部有三角形,有背景图片
div with triangle at the bottom with background image
我想制作一个div
,底部有一个三角形。
但是我需要三角形上的背景图像出现,我试过使用伪元素(:after
)但它不起作用。
#homebg:after{
content:'';
position: absolute;
top: 100%;
left: 0;
right: 0;
margin: 0 auto;
width: 0;
height: 0;
border-top: solid 50px #fff;
border-left: solid 48vw transparent;
border-right: solid 48vw transparent;
}
我需要让 div
看起来像这张图片中的三角形 background
:
您可以使用剪贴蒙版
div {
-webkit-clip-path: polygon(0% 0%, 100% 0, 100% 75%, 50% 100%, 0 75%);
clip-path: polygon(0% 0%, 100% 0, 100% 75%, 50% 100%, 0 75%);
}
查看 this 网站以生成您自己的面具。
纯色上的三角形
如果三角形显示在纯色之上,您可以将此方法与绝对定位的伪元素一起使用:
div{
position:relative;
background:url('http://i.imgur.com/W27LCzB.jpg');
background-size:cover;
min-height:100px;
padding-bottom:100px;
overflow:hidden;
}
div:after{
content:'';
position:absolute;
bottom:0; left:0;
border-left:50vw solid #fff;
border-right:50vw solid #fff;
border-top:100px solid transparent;
}
<div></div>
三角形的左右部分被伪元素的左右边框隐藏。这就是为什么这种方法不适用于渐变或图像的原因。
图像或渐变上的三角形
在这些情况下,您可以使用带有 clipPath and a polygon 元素的内联 svg :
body, html{
height:100%;
background:url('https://farm8.staticflickr.com/7187/6895047173_d4b1a0d798.jpg')no-repeat center center;
background-size:cover;
}
svg{
display:block;
width:100%;
}
<svg viewbox="0 0 100 40">
<clipPath id="clip">
<polygon points="0 0 100 0 100 25 50 40 0 25" />
</clipPath>
<image xlink:href="https://farm4.staticflickr.com/3165/5733278274_2626612c70.jpg" width="100" height="65" clip-path="url(#clip)"/>
</svg>
同样的结果还有其他可能的方法。你可以在这里找到一些:CSS Transparent arrow/triangle
我们只需要 linear-gradient
和 mask
就可以做到这一点。你可以调整你想要的高度。
div {
--triangle-height: 100px; /* you can change this */
--mask: linear-gradient(#000, #000) 0 0/100% calc(100% - var(--triangle-height)) no-repeat,
linear-gradient(to top right, transparent 49.5%, #000 50% 100%) 0 100%/50% var(--triangle-height) no-repeat,
linear-gradient(to top left, transparent 49.5%, #000 50% 100%) 100% 100%/50% var(--triangle-height) no-repeat;
-webkit-mask: var(--mask);
mask: var(--mask);
width: 500px;
height: 400px;
background: url(https://i.picsum.photos/id/1043/5184/3456.jpg?hmac=wsz2e0aFKEI0ij7mauIr2nFz2pzC8xNlgDHWHYi9qbc) 50% 50%/cover;
background-repeat: no-repeat;
}
<div></div>
通过改变变量和调整width: 100%
div {
--triangle-height: 200px; /* you can change this */
--mask: linear-gradient(#000, #000) 0 0/100% calc(100% - var(--triangle-height)) no-repeat,
linear-gradient(to top right, transparent 49.5%, #000 50% 100%) 0 100%/50% var(--triangle-height) no-repeat,
linear-gradient(to top left, transparent 49.5%, #000 50% 100%) 100% 100%/50% var(--triangle-height) no-repeat;
-webkit-mask: var(--mask);
mask: var(--mask);
width: 100%;
height: 400px;
background: url(https://i.picsum.photos/id/1043/5184/3456.jpg?hmac=wsz2e0aFKEI0ij7mauIr2nFz2pzC8xNlgDHWHYi9qbc) 50% 50%/cover;
background-repeat: no-repeat;
}
<div></div>
我想制作一个div
,底部有一个三角形。
但是我需要三角形上的背景图像出现,我试过使用伪元素(:after
)但它不起作用。
#homebg:after{
content:'';
position: absolute;
top: 100%;
left: 0;
right: 0;
margin: 0 auto;
width: 0;
height: 0;
border-top: solid 50px #fff;
border-left: solid 48vw transparent;
border-right: solid 48vw transparent;
}
我需要让 div
看起来像这张图片中的三角形 background
:
您可以使用剪贴蒙版
div {
-webkit-clip-path: polygon(0% 0%, 100% 0, 100% 75%, 50% 100%, 0 75%);
clip-path: polygon(0% 0%, 100% 0, 100% 75%, 50% 100%, 0 75%);
}
查看 this 网站以生成您自己的面具。
纯色上的三角形
如果三角形显示在纯色之上,您可以将此方法与绝对定位的伪元素一起使用:
div{
position:relative;
background:url('http://i.imgur.com/W27LCzB.jpg');
background-size:cover;
min-height:100px;
padding-bottom:100px;
overflow:hidden;
}
div:after{
content:'';
position:absolute;
bottom:0; left:0;
border-left:50vw solid #fff;
border-right:50vw solid #fff;
border-top:100px solid transparent;
}
<div></div>
三角形的左右部分被伪元素的左右边框隐藏。这就是为什么这种方法不适用于渐变或图像的原因。
图像或渐变上的三角形
在这些情况下,您可以使用带有 clipPath and a polygon 元素的内联 svg :
body, html{
height:100%;
background:url('https://farm8.staticflickr.com/7187/6895047173_d4b1a0d798.jpg')no-repeat center center;
background-size:cover;
}
svg{
display:block;
width:100%;
}
<svg viewbox="0 0 100 40">
<clipPath id="clip">
<polygon points="0 0 100 0 100 25 50 40 0 25" />
</clipPath>
<image xlink:href="https://farm4.staticflickr.com/3165/5733278274_2626612c70.jpg" width="100" height="65" clip-path="url(#clip)"/>
</svg>
同样的结果还有其他可能的方法。你可以在这里找到一些:CSS Transparent arrow/triangle
我们只需要 linear-gradient
和 mask
就可以做到这一点。你可以调整你想要的高度。
div {
--triangle-height: 100px; /* you can change this */
--mask: linear-gradient(#000, #000) 0 0/100% calc(100% - var(--triangle-height)) no-repeat,
linear-gradient(to top right, transparent 49.5%, #000 50% 100%) 0 100%/50% var(--triangle-height) no-repeat,
linear-gradient(to top left, transparent 49.5%, #000 50% 100%) 100% 100%/50% var(--triangle-height) no-repeat;
-webkit-mask: var(--mask);
mask: var(--mask);
width: 500px;
height: 400px;
background: url(https://i.picsum.photos/id/1043/5184/3456.jpg?hmac=wsz2e0aFKEI0ij7mauIr2nFz2pzC8xNlgDHWHYi9qbc) 50% 50%/cover;
background-repeat: no-repeat;
}
<div></div>
通过改变变量和调整width: 100%
div {
--triangle-height: 200px; /* you can change this */
--mask: linear-gradient(#000, #000) 0 0/100% calc(100% - var(--triangle-height)) no-repeat,
linear-gradient(to top right, transparent 49.5%, #000 50% 100%) 0 100%/50% var(--triangle-height) no-repeat,
linear-gradient(to top left, transparent 49.5%, #000 50% 100%) 100% 100%/50% var(--triangle-height) no-repeat;
-webkit-mask: var(--mask);
mask: var(--mask);
width: 100%;
height: 400px;
background: url(https://i.picsum.photos/id/1043/5184/3456.jpg?hmac=wsz2e0aFKEI0ij7mauIr2nFz2pzC8xNlgDHWHYi9qbc) 50% 50%/cover;
background-repeat: no-repeat;
}
<div></div>