是否可以在CSS中制作类似的内容?我想要标题的图像,但我希望下一部分切出三角形,以便上面的图像显示出来。
我知道如何制作带边框的实心CSS三角形(例如:http://www.dailycoding.com/Posts/purely_css_callouts.aspx),但在这种情况下我需要做相反的事情(从蓝色部分中取出“块”) ),或者使三角形成为与其连接的图像完全对齐的图像。我在想,如果我能把一个“块”拿出来,那可能会更容易
为了使其更复杂,我还将上面的图片设置为background-attachment: fixed
和background-size: cover
。因此,随着浏览器尺寸变大,图像会缩放。
如果我不能单独使用CSS并且需要图像,如果文本在页面上水平居中,如何才能使图像正确组合以使三角形与文本保持一致?我正在考虑这样的事情,两个长的div
延伸到边缘,一个精确的宽度图像在中间,三角形透明:
_____________________________ ___ ______________________ _________________________
| (really wide for margin)|| V (960px wide image) || (really wide box again) |
但是它可以用CSS完成吗?或者是否有一个SVG解决方案(我不熟悉SVG)?我没有使用仅适用于现代浏览器的解决方案,因为这绝对只是“渐进式增强”。
答案 0 :(得分:9)
这是三角形 - 边界概念的转折。
<强> HTML 强>
<div id="container">
<div id="one"></div>
<div id="two"></div>
</div>
<强> CSS 强>
#container{
height: 300px;
background-color: red;
position: relative;
}
#one {
position: absolute;
width: 100px;
left: 0;
bottom: 0;
border-bottom: 20px solid green;
border-right: 20px solid transparent;
}
#two {
position: absolute;
left: 120px;
bottom: 0;
right: 0;
border-bottom: 20px solid green;
border-left: 20px solid transparent;
}
另一种选择:我用CSS转换(特别是偏斜)做了类似的事情。请参阅CSS (3) & HTML Cut edge。
答案 1 :(得分:3)
使用::before
和::after
,您可以在没有太多额外标记的情况下完成此操作。你只需要容器上的overflow: hidden
。
鉴于
<div class="hero">
<img src="http://farm3.staticflickr.com/2431/3875936992_348d6dd86b_b.jpg" alt=""/>
</div>
CSS将是
.hero {
position: relative;
overflow: hidden;
}
.hero img {
display: block;
width: 960px;
height: auto;
}
.hero::before {
content: "\00A0";
display: block;
border: 960px solid #fff; /* the width of the image */
border-top-width: 0;
border-bottom-width: 0;
height: 30px; /* 1/2 the triangle width */
width: 60px; /* the triangle width */
position: absolute;
bottom: 0;
left: -630px; /* the left offset - the image width */
}
.hero::after {
content: "\00A0";
display: block;
border: 30px solid #fff; /* 1/2 the triangle width */
border-top: 30px solid transparent; /* 1/2 the triangle width */
border-bottom-width: 0;
height: 0;
width: 0;
position: absolute;
bottom: 0;
left: 330px; /* the left offset */
}
答案 2 :(得分:0)
我以不同的方式对此进行了研究。不完全是op想要的,但看起来很好,可能会帮助其他人。
我使用 z-index
和 border-radius
来实现此效果
的 DEMO 强> 的
HTML
<div>
<img src="http://lorempixel.com/500/200/sports/" class="lowerpic"/>
<div class="leftupperdiv"></div>
<div class="rightupperdiv"></div>
</div>
CSS
.lowerpic {
z-index:-1;
position:absolute;
}
.leftupperdiv {
z-index:1;
position:absolute;
margin-top:150px;
width:100px;
height:50px;
border-radius: 0px 30px 0px 0px;
background-color: blue;
}
.rightupperdiv {
z-index:1;
position:absolute;
margin-top:150px;
margin-left:100px;
width:400px;
height:50px;
border-radius: 30px 0px 0px 0px;
background-color: blue;
}