use*_*706 33 css css3 css-shapes
我想知道是否有任何方法可以用纯CSS创建这个形状.要进一步扩展此问题,此形状需要将图像剪切在内部(将其视为蒙版 - 但灰色边框必须可见).

或者我最好在canvas/svg中创建它?
Mat*_*t.C 33
保持边框有点困难,但我设法使用:before和:after元素与父容器(:before和:after不在img标签上)实现了近距离效果
向容器添加边框
添加一个before来阻挡一个角并偏移-1以覆盖边界
添加一个稍微偏离之前的内容,在切断内部创建一条线
如您所见,45deg线的厚度有点问题:
.cutCorner {
position:relative; background-color:blue;
border:1px solid silver; display: inline-block;
}
.cutCorner img {
display:block;
}
.cutCorner:before {
position:absolute; left:-1px; top:-1px; content:'';
border-top: 70px solid silver;
border-right: 70px solid transparent;
}
.cutCorner:after {
position:absolute; left:-2px; top:-2px; content:'';
border-top: 70px solid white;
border-right: 70px solid transparent;
}Run Code Online (Sandbox Code Playgroud)
<div class="cutCorner">
<img class="" src="https://www.google.co.uk/logos/doodles/2013/william-john-swainsons-224th-birthday-5655612935372800-hp.jpg" />
</div>Run Code Online (Sandbox Code Playgroud)
Vik*_*dke 12
您可以通过使用伪做到这一点,随着border-width和border-color看到下面的代码,看看它是如何做.
HTML
<div class="cut"></div>
Run Code Online (Sandbox Code Playgroud)
CSS
.cut {
position:relative;
width:500px;
height: 200px;
padding:20px;
color:#000;
background:#ccc;
}
.cut:before {
content:"";
position:absolute;
top:0;
left:0;
border-width:30px 30px 0px 0px;
border-style:solid;
border-color:#fff transparent transparent #fff ;
}
Run Code Online (Sandbox Code Playgroud)
使用此jQuery脚本进行跨浏览器支持的另一个解决方案.- > http://jquery.malsup.com/corner/
HTML
<div class="cut"></div>
Run Code Online (Sandbox Code Playgroud)
CSS
.cut {
position:relative;
width:500px;
height: 200px;
padding:20px;
color:#000;
background:#ccc;
}
Run Code Online (Sandbox Code Playgroud)
JS
$(".cut").corner("bevel tl 50px");
Run Code Online (Sandbox Code Playgroud)
Har*_*rry 10
使用CSS:
使用CSS可以实现确切的形状.我们的想法是在border-radius左上角有一个元素,沿Y轴倾斜,然后将它放在矩形之前.这样做会使它看起来好像矩形元素在顶部有一个三角形切口,有一个弯曲边缘.
如果形状的内部部分仅具有颜色(实心或透明),则可以仅使用一个元件来实现.但是,如果需要在形状内添加图像(如上所述),那么我们需要多个元素,因为我们必须反转skew图像上的效果,如果没有子元素,这是不可能的.
.shape,
.shape-image {
position: relative;
height: 150px;
width: 400px;
border-bottom: 2px solid crimson;
overflow: hidden;
}
.shape:before,
.shape:after,
.shape-image:after {
position: absolute;
content: '';
top: 0px;
height: 100%;
z-index: -1;
}
.shape:before,
.shape-image .before {
left: 0px;
top: -2px;
width: 50px;
border: 2px solid crimson;
border-width: 3px 0px 0px 2px;
border-top-left-radius: 8px;
transform-origin: right bottom;
transform: skewY(-45deg);
}
.shape:after,
.shape-image:after {
left: 52px;
width: calc(100% - 54px);
border: 2px solid crimson;
border-left: none;
}
.shape:after,
.shape:before {
background: aliceblue;
}
.shape.semi-transparent:after,
.shape.semi-transparent:before {
background: rgba(150, 150, 150, 0.5);
}
.shape-image .before {
position: absolute;
top: 0px;
height: 100%;
overflow: hidden;
}
.shape-image .before .img {
height: 100%;
width: 100%;
border-top-left-radius: 8px;
background: url(http://lorempixel.com/400/150);
transform-origin: right bottom;
transform: skewY(45deg);
}
.shape-image:after {
background: url(http://lorempixel.com/400/150);
background-position: -50px 0px;
}
/* Just for demo */
body{
background-image: radial-gradient(circle, #3F9CBA 0%, #153346 100%);
}
.shape{
margin: 10px;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div class="shape"></div>
<div class="shape semi-transparent"></div>
<div class="shape-image">
<div class="before">
<div class="img"></div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
使用SVG:
或者,使用SVG可以更加轻松地实现相同的功能,如下面的代码段所示.
.vector {
height: 150px;
width: 410px;
padding-left
}
svg {
height: 100%;
width: 100%;
}
path {
stroke: crimson;
stroke-width: 2;
fill: none;
}
polygon {
fill: url(#bg);
}
/* Just for demo */
body {
background-image: radial-gradient(circle, #3F9CBA 0%, #153346 100%);
}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div class='vector'>
<svg viewBox='0 0 400 150' preserveAspectRatio='none'>
<defs>
<path d='M50,2 h 342 v144 h-390 v-90 a6,12 0 0,1 3,-9 z' id='p' />
<clipPath id='clipper'>
<use xlink:href='#p' />
</clipPath>
<pattern id='bg' width='400' height='150' patternUnits='userSpaceOnUse'>
<image xlink:href='http://lorempixel.com/400/150' height='150' width='400' />
</pattern>
</defs>
<polygon points='2,2 392,2 392,148 2,148' clip-path='url(#clipper)' />
<use xlink:href='#p' />
</svg>
</div>
<h3>Original Image</h3>
<img src='http://lorempixel.com/400/150' />Run Code Online (Sandbox Code Playgroud)
截图:

| 归档时间: |
|
| 查看次数: |
48559 次 |
| 最近记录: |