如何使用CSS创建紧身胸衣效果?

时间:2018-07-16 14:48:07

标签: html css

我想用CSS如下创建一个效果,最初,我想合并两个带有圆角的矩形,但是我不能用这种方式,因为它是一个锐角而不是圆角,请看一下对不起,这是最困难的部分。

enter image description here

所以我这样做:
1.创建一个圆角矩形作为轮廓。边框颜色为灰色。
2.在矩形左侧的中央创建一个灰色的细管。
3.创建另一个白色的三角形,以覆盖步骤2中的灰色三角形,并稍加偏移,使其显示为矩形的边界。

这里是效果:

enter image description here

我的问题是:
1.如何添加正确的部分?看来我只能在CSS选择器中同时绘制一个形状:before或:after。
2.如果要添加边框阴影效果怎么办?如果我添加矩形阴影,就会出现白色三角形,这很丑。
3.还是有其他方法可以产生这种效果?

这是代码:
html:

<div class="triangle_left">

</div>

css:

.triangle_left {
  width: 600px;
  height: 600px;
  position: relative;
  margin: 20px auto;
  border: 2px solid #cccccc;
  /* box-shadow: 0px 0px 8px 1px darkgrey; */
  border-radius: 20px;
}

.triangle_left:before {
  content: '';
  width: 0;
  height: 0;
  border: 20px solid transparent;
  border-left-color: #cccccc;
  position: absolute;
  left: 0;
  top: 50%;
  margin-top: -20px;
}

.triangle_left:after {
  content: '';
  width: 0;
  height: 0;
  border: 18px solid transparent;
  border-left-color: white;
  position: absolute;
  left: -2px;
  top: 50%;
  margin-top: -18px;
}

Try it here in JSFiddle

2 个答案:

答案 0 :(得分:4)

一个想法是使用渐变构建形状并依靠drop-shadow过滤器

.box {
  margin-top:50px;
  border-radius:10px;
  width:200px;
  height:200px;
  background:
  /*the middle line */
    repeating-linear-gradient(to right,gold 0px,gold 5px,transparent 5px,transparent 10px) center/calc(100% - 40px) 2px,
    /*The background*/
    linear-gradient(to bottom right,#fff 49%,transparent 50%) 100% calc(50% - 10px)/20px 20px,
    linear-gradient(to top right,#fff 49%,transparent 50%) 100% calc(50% + 10px)/20px 20px,
    linear-gradient(to bottom left,#fff 49%,transparent 50%) 0 calc(50% - 10px)/20px 20px,
    linear-gradient(to top left,#fff 49%,transparent 50%) 0 calc(50% + 10px)/20px 20px,
    
    linear-gradient(#fff,#fff) top right/20px calc(50% - 20px),
    linear-gradient(#fff,#fff) bottom right/20px calc(50% - 20px),
    
    linear-gradient(#fff,#fff) top left/20px calc(50% - 20px),
    linear-gradient(#fff,#fff) bottom left/20px calc(50% - 20px),
    
    linear-gradient(#fff,#fff) center/calc(100% - 40px) 100%;
    background-repeat:no-repeat;
    filter:drop-shadow(0 0 5px #000); 
}

body {
  background:pink;
}
<div class="box">
</div>

答案 1 :(得分:0)

在我看来,您将不得不使用边界(如您所做的那样)或使用SVG。对于阴影,它不适用于边框和常规的css阴影,因此您希望将阴影用作过滤器(或者可以将SVG用于阴影)。

这就是我想出的

.triangle_left {
  width: 600px;
  height: 600px;
  position: relative;
  margin: 20px auto;
  border: 2px solid #cccccc;
  /* box-shadow: 0px 0px 8px 1px darkgrey; */
  border-radius: 20px;
}

.triangle_left:before {
  content: '';
  width: 0;
  height: 0;
  border-top: 30px solid transparent;
  border-left: 30px solid white;
  border-bottom: 30px solid transparent;
  filter: drop-shadow(4px 0px 0px #ccc);
  position: absolute;
  left: -6px;
  top: 50%;
}

.triangle_left:after {
  content: '';
  width: 0;
  height: 0;
  border-top: 30px solid transparent;
  border-right: 30px solid white;
  border-bottom: 30px solid transparent;
  filter: drop-shadow(-4px 0px 0px #ccc);
  position: absolute;
  right: -6px;
  top: 50%;
}
<div class="triangle_left">

</div>