You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现WhatsApp风格的聊天气泡尖角样式?

WhatsApp风格聊天气泡(带尖角+圆角)实现方案

之前尝试用clip-path实现聊天气泡的尖角,但会丢失border-radius属性,下面是可以同时保留圆角和尖角的实现方案,基于CSS mask属性完成:

完整代码实现

CSS 代码

.bubble {
  --r: 25px; /* 圆角半径 */
  --t: 30px; /* 尖角的大小 */
  
  max-width: 300px;
  padding: calc(2*var(--r)/3);
  /* 组合多个渐变实现气泡形状 */
  -webkit-mask: 
    /* 绘制尖角部分 */
    radial-gradient(var(--t) at var(--_d) 0,#0000 98%,#000 102%) 
      var(--_d) 100%/calc(100% - var(--r)) var(--t) no-repeat,
    /* 实现左上角/右上角的圆角 */
    conic-gradient(at var(--r) var(--r),#000 75%,#0000 0) 
      calc(var(--r)/-2) calc(var(--r)/-2) padding-box, 
    /* 实现右下角/左下角的圆角 */
    radial-gradient(50% 50%,#000 98%,#0000 101%) 
      0 0/var(--r) var(--r) space padding-box;
  background: #1384C5;
  color: #fff;
}
/* 左侧气泡(尖角在左上角) */
.left {
  --_d: 0%;
  border-left: var(--t) solid transparent;
  margin-right: var(--t);
  place-self: start;
}
/* 右侧气泡(尖角在右上角) */
.right {
  --_d: 100%;
  border-right: var(--t) solid transparent;
  margin-left: var(--t);
  place-self: end;
}

body {
  margin: 0;
  min-height: 100vh;
  display: grid;
  place-content: center;
  gap: 20px;
  font-family: system-ui, sans-serif;
  font-size: 20px;
}

HTML 代码

<div class="bubble left">Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt </div>
<div class="bubble right">Ok, Thank you</div>
<div class="bubble left"> ut labore et dolore magna </div>
<div class="bubble right">Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt </div>

关键原理说明

  • mask属性的优势:和clip-path不同,mask通过渐变的透明度控制元素可见区域,可同时实现圆角的柔和过渡和尖角形状,二者不会冲突
  • 变量控制方向:通过--_d变量切换尖角位置(左侧0%/右侧100%),只需给气泡添加.left或.right类即可切换样式
  • 空间预留:用透明边框和margin给尖角留出空间,避免气泡内容被遮挡
  • 可定制性:修改--r调整圆角大小,修改--t调整尖角尺寸,适配不同设计需求

你之前尝试的clip-path方案失效原因:clip-path是基于多边形路径直接裁剪元素,border-radius是元素自身圆角属性,二者无法同时生效;而mask通过图层叠加实现形状,能完美兼容圆角视觉效果(本方案中mask已实现圆角,无需额外设置border-radius)

内容的提问来源于stack exchange,提问作者The Old County

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:15:14