如何为带边框的clip-path语音气泡实现内容背景透明?
当然可以实现透明内容的带边框语音气泡!
你的思路已经很巧妙了——靠外层容器的padding+background-color配合clip-path模拟边框,内层容器承载内容。要把白色内容背景改成透明非常简单,只需要调整内层.clip的背景属性即可:
修改步骤
- 把
.clip类里的background: #fff替换成background: transparent(或者直接删除这个背景属性,元素默认背景就是透明的) - 可选但建议:给
.clip添加文字颜色(比如color: #fff),这样文字在背景图上会更清晰可读
修改后的完整代码
CSS
.background { background: url(https://thumbs.dreamstime.com/b/birch-forest-sunny-day-green-woods-summer-spring-landscape-43067305.jpg) no-repeat; background-size: cover; text-align: center; padding: 20px; /* 加一点内边距让气泡不贴边缘 */ } .clip-svg { width: 0; height: 0; } .clip-wrap { display: inline-block; vertical-align: top; padding: 3px; background-color: rebeccapurple; clip-path: url("#speechebubble-clip"); } .clip { width: 180px; height: 180px; position: relative; background: transparent; /* 改成透明背景 */ color: #fff; /* 可选:设置文字颜色提升可读性 */ display: flex; align-items: center; justify-content: center; /* 让文字居中显示 */ } .clip { clip-path: url("#speechebubble-clip"); }
HTML
<div class="background"> <div class="clip-wrap"> <div class="clip"> test </div> </div> </div> <svg class="clip-svg"> <defs> <clipPath id="speechebubble-clip" clipPathUnits="objectBoundingBox"> <path width="100%" height="100%" transform="scale(0.0045, 0.00385)" id="clip-mask" d="M34.1983772,243.81581 C35.2123618,243.81581 36.0373744,244.643759 36.0373744,245.661353 L36.0373744,260 L63.450348,244.064408 C63.7301493,243.901754 64.0488773,243.81581 64.3720879,243.81581 L233,243.81581 L233,2 L2,2 L2,243.81581 L34.1983772,243.81581 Z" /> </clipPath> </defs> </svg>
原理说明
外层.clip-wrap的padding:3px加上background-color:rebeccapurple,配合clip-path裁剪出气泡形状,这部分就形成了气泡的"边框";内层.clip应用相同的clip-path,当它的背景设为透明后,就会直接透出后面的背景图,同时外层的紫色边框会完整保留,完全符合你想要的带边框+透明内容的效果。
内容的提问来源于stack exchange,提问作者R-J
相关产品推荐
相关产品推荐

