css 的 clip-path 属性,绘制气泡

气泡组装

  • 气泡可以看做是由圆形和倒三角形组装起来的
  • 利用 clip-path 属性,组装两个元素

圆形

css 复制代码
width: 100px;
height: 100px;
clip-path: circle(50% at 50% 50%);
background: #ccc;

倒三角形

css 复制代码
width: 100px;
height: 100px;
clip-path: polygon(0% 0%, 100% 0%, 50% 100%, 0% 0%);
background: #ddd;

组合

  • 两个元素组合到一起,调整宽度与定位位置
html 复制代码
<div class="pop">
  <div class="circle"></div>
  <div class="trangle"></div>
</div>
<style lang="scss" scoped>

.pop {
  width: 100px;
  height: 120px;
  position: relative;
  .circle {
    position: absolute;
    top: 0;
    left: 0;
    width: 100px;
    height: 100px;
    clip-path: circle(50% at 50% 50%);
    background: #ccc;
  }
  .trangle {
    position: absolute;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 60px;
    height: 30px;
    clip-path: polygon(0% 0%, 100% 0%, 50% 100%, 0% 0%);
    background: #ddd;
  }
}

</style>

边框效果

  • 用两个气泡叠加。下层气泡的尺寸略大于上层气泡的尺寸,形成边框效果
html 复制代码
<template>
  <div class="myPop">
    <div class="backBox">
      <div class="circle"></div>
      <div class="trangle"></div>
    </div>
    <div class="frontBox">
      <div class="circle"></div>
      <div class="trangle"></div>
    </div>
    <div class="msg">气泡</div>
  </div>
</template>
<style lang="scss" scoped>
.myPop {
  width: 102px;
  height: 122px;
  position: relative;
  & > div {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
  }
  .circle {
    position: absolute;
    top: 0;
    left: 0;
    clip-path: circle(50% at 50% 50%);
  }
  .trangle {
    position: absolute;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
    clip-path: polygon(0% 0%, 100% 0%, 50% 100%, 0% 0%);
  }
  .backBox {
    width: 102px;
    height: 122px;
    .circle {
      width: 102px;
      height: 102px;
      background: #4e700f;
    }
    .trangle {
      width: 62px;
      height: 30px;
      background: #4e700f;
      clip-path: polygon(0% 0%, 100% 0%, 50% 100%, 0% 0%);
    }
  }
  .frontBox {
    width: 100px;
    height: 120px;
    .circle {
      width: 100px;
      height: 100px;
      background: #d5f0a5;
    }
    .trangle {
      width: 60px;
      height: 30px;
      background: #d5f0a5;
    }
  }
  .msg {
    width: 100%;
    height: 100%;
    font-size: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
  }
}
</style>
相关推荐
java1234_小锋3 小时前
【技术专题】CSS3 网页技术 - CSS3 视觉增强
前端·css·css3
晓得迷路了4 小时前
栗子前端技术周刊第 152 期 - Rspack 2.3、TypeScript 7.1 Beta、Bun 1.4.4...
前端·javascript·css
普通人64 小时前
CSS-box-sizing-使用指南
开发语言·前端·css·1024程序员节
前端架构师-老李4 小时前
HTML与CSS基础第七课—HTML 中的a标签(跳转链接)
前端·css·html
溪语流沙1 天前
【每天一个CSS | Day41】开关三连:一套状态机,三种视觉翻译
前端·css·html5·每日一练·按钮
变与不变8061 天前
css定位布局精讲
前端·css
前端架构师-老李2 天前
HTML与CSS基础第五课—HTML的空格、换行、横线相关知识
前端·css·html
echome8882 天前
CSS 布局:Flex 和 Grid 怎么选,附常见坑
前端·css·html
东鹏特饮2 天前
本机状态监控页面html
运维·css·html·css3
蓝莓味的口香糖3 天前
【VUE】【CSS】Vue移动端适配主流方案总结
前端·css·vue.js