如何使用 CSS 制作类似紧身胸衣的效果?
How to create a corset like effect with CSS?
我想用CSS创建一个效果如下, 看圈子里的面积,这是最难的部分。
所以我是这样做的:
1.创建一个圆角矩形作为轮廓。边框颜色为灰色。
2. 在矩形的左侧中心创建一个灰色的三角形。
3. 用白色创建另一个三角形来覆盖步骤2中的灰色三角形,稍微偏移一下,使它看起来像矩形的边框。
效果如下:
我的问题是:
1.如何添加正确的部分?似乎我只能在 CSS 选择器 :before 或 :after.
中同时绘制一个形状
2.如果我想添加边框阴影效果怎么办?如果我加上矩形的阴影,就会出现白色三角形,很难看。
3.或者有什么办法可以达到这个效果?
代码如下:
.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;
}
<div class="triangle_left">
</div>
在我看来,您要么必须使用边框(就像您所做的那样),要么必须使用 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>
一个想法是使用渐变构建形状并依赖 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>
您也可以使用 clip-path
来完成,但是您需要一个额外的包装器来应用 drop-shadow
过滤器
.box {
margin-top: 50px;
border-radius: 10px;
width: 200px;
height: 200px;
background:
repeating-linear-gradient(to right, gold 0px, gold 5px, transparent 5px, transparent 10px) center/100% 2px no-repeat,
#fff;
clip-path:polygon(
0 0,100% 0,
100% calc(50% - 20px),calc(100% - 20px) 50%,100% calc(50% + 20px),
100% 100%, 0 100%,
0 calc(50% + 20px),20px 50%,0 calc(50% - 20px)
);
}
.drop {
filter: drop-shadow(0 0 5px #000);
}
body {
background: pink;
}
<div class="drop">
<div class="box">
</div>
</div>
我想用CSS创建一个效果如下, 看圈子里的面积,这是最难的部分。
所以我是这样做的:
1.创建一个圆角矩形作为轮廓。边框颜色为灰色。
2. 在矩形的左侧中心创建一个灰色的三角形。
3. 用白色创建另一个三角形来覆盖步骤2中的灰色三角形,稍微偏移一下,使它看起来像矩形的边框。
效果如下:
我的问题是:
1.如何添加正确的部分?似乎我只能在 CSS 选择器 :before 或 :after.
中同时绘制一个形状
2.如果我想添加边框阴影效果怎么办?如果我加上矩形的阴影,就会出现白色三角形,很难看。
3.或者有什么办法可以达到这个效果?
代码如下:
.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;
}
<div class="triangle_left">
</div>
在我看来,您要么必须使用边框(就像您所做的那样),要么必须使用 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>
一个想法是使用渐变构建形状并依赖 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>
您也可以使用 clip-path
来完成,但是您需要一个额外的包装器来应用 drop-shadow
过滤器
.box {
margin-top: 50px;
border-radius: 10px;
width: 200px;
height: 200px;
background:
repeating-linear-gradient(to right, gold 0px, gold 5px, transparent 5px, transparent 10px) center/100% 2px no-repeat,
#fff;
clip-path:polygon(
0 0,100% 0,
100% calc(50% - 20px),calc(100% - 20px) 50%,100% calc(50% + 20px),
100% 100%, 0 100%,
0 calc(50% + 20px),20px 50%,0 calc(50% - 20px)
);
}
.drop {
filter: drop-shadow(0 0 5px #000);
}
body {
background: pink;
}
<div class="drop">
<div class="box">
</div>
</div>