如何利用CSS实现三角形、扇形、聊天气泡框

2023-09-18 17:43:24

思路

三角形

实现三角形的关键思路是使用 CSS 的 border 属性来创建一个透明的矩形块,并利用边框的透明部分来形成三角形。下面是创建三角形的一般思路:

  1. 创建一个 HTML 元素,通常是一个 <div> 元素,用于容纳三角形。

  2. 为该元素设置一个适当的宽度和高度,以决定三角形的大小。

  3. 使用 border 属性为该元素设置透明的边框。边框的宽度和颜色可以根据需要进行调整。

  4. 使用 border 的不同边框属性来确定三角形的形状。通常,可以使用 border-width 控制边框的宽度,border-style 控制边框的样式,和 border-color 控制边框的颜色。

  5. 使用透明边框的特性,通过控制边框的不透明部分来形成所需的三角形形状。通常,通过设置一个边框为透明,而将另一条边框的颜色设置为所需的颜色来实现这一点。

  6. 可以使用 position 属性将三角形定位到所需的位置,或者使用其他样式属性来调整其外观,如 margintransformtopleft 等。

扇形

创建扇形的方法与创建三角形类似,也是利用 CSS 的 border 属性来实现。以下是创建一个红色扇形的一般思路:

  1. 创建一个 HTML 元素,通常是一个 <div> 元素,用于容纳扇形。

  2. 为该元素设置一个适当的宽度和高度,以决定扇形的大小。

  3. 使用 border 属性为该元素设置透明的边框。边框的宽度和颜色可以根据需要进行调整。

  4. 使用 border 的不同边框属性来确定扇形的形状。通常,可以使用 border-width 控制边框的宽度,border-style 控制边框的样式,和 border-color 控制边框的颜色。

  5. 利用 border-radius 属性为扇形的边框添加圆角,以使其呈现扇形的形状。

  6. 使用透明边框的特性,通过控制边框的不透明部分来形成所需的扇形形状。

气泡

这样设置的原因是为了创建一个类似于聊天应用中常见的聊天气泡效果,其中三角形指向用户头像或消息发送者的头像。让我解释一下为何要这样设置:

  1. 容器样式 .bubble-container

    • position: relative;:将容器设置为相对定位,以便在其中绝对定位三角形。
    • max-width: 200px;:限制气泡框的最大宽度,以确保文本内容不会太宽,适应屏幕大小。
    • background-color: #0077cc;:设置气泡框的背景颜色为蓝色,使其与聊天应用中常见的气泡颜色相似。
    • color: #fff;:设置文字颜色为白色,以使文字在蓝色背景上清晰可见。
    • border-radius: 10px;:给气泡框添加圆角边框,使其看起来更加友好和现代。
    • padding: 10px;:添加内边距,以增加文本与边框之间的空间,提高可读性。
    • margin: 10px;:添加外边距,以在多个聊天气泡之间创建间距,使其看起来更整洁。
  2. 三角形样式 .triangle

    • position: absolute;:将三角形设置为绝对定位,以便精确控制其位置。
    • border 属性:使用 border 属性创建一个透明的三角形,其中 border-bottom 用于绘制三角形的底边,颜色与气泡框的背景颜色相同。
    • top: -10px;:将三角形定位到气泡框的顶部,通过负的 top 值来上移三角形,使其看起来与气泡框连接。
    • left: 50%;transform: translateX(-50%);:将三角形水平居中定位在气泡框的顶部,确保它与气泡框的中间对齐。

实现

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

  <style>
    .triangle {
      width: 0;
      height: 0;
      border-left: 50px solid transparent; /* 左边透明 */
      border-right: 50px solid transparent; /* 右边透明 */
      border-bottom: 100px solid #f00; /* 底边为红色 */
    }

    .sector {
      width: 0;
      height: 0;
      border: 100px solid transparent; /* 边框宽度和颜色可以调整 */
      border-bottom-color: #f00; /* 底边的颜色,这里是红色 */
      border-radius: 50%; /* 将边框变为圆形 */
      transform: rotate(45deg); /* 旋转45度,可根据需要调整角度 */
    }

    .bubble-container {
      position: relative;
      max-width: 200px; /* 气泡框最大宽度 */
      background-color: #0077cc; /* 气泡框背景颜色 */
      color: #fff; /* 文字颜色 */
      border-radius: 10px; /* 圆角边框 */
      padding: 10px; /* 内边距 */
      margin: 10px; /* 外边距,可根据需要调整 */
    }

    .triangle1 {
      position: absolute;
      width: 0;
      height: 0;
      border-top: 10px solid transparent; /* 左边透明 */
      border-bottom: 10px solid transparent; /* 右边透明 */
      border-left: 10px solid #0077cc; /* 底边为气泡框背景色 */
      right: -10px; /* 位于气泡框顶部 */
      top: 50%; /* 居中 */
      transform: translateY(-50%); /* 水平居中 */
    }
  </style>
</head>
<body>
  <!-- 三角形 -->
  <div class="triangle"></div>
  <!-- 扇形 -->
  <div class="sector"></div>
  <!-- 气泡框 -->
  <div class="bubble-container">
    <p>这是一个气泡框带有三角形。</p>
    <div class="triangle1"></div>
  </div>
</body>
</html>

在这里插入图片描述

更多推荐

仿网易云-360度混响

一直在用网易云音乐听歌,感觉他的这个动效还是挺不错的,最近也是想试试canvas绘图相关的。尝试了几次之后感觉效果还不错,不过距离网易云的还是有些差距。本期准备仿照制作如下效果:偷偷使用最近比较流行的罗刹海市的音乐来展示这个效果。效果展示如下:效果展示网站参考文档具体的流程大体上就是获取音频数据,然后根据音频数据绘制在

zookeeper集群

一,zookeeper定义Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。二,zookeeper工作机制Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zooke

【Linux】nohub指令--终端退出后命令仍旧执行

文章目录0、背景1、作用2、语法3、用法演示4、关于2>&10、背景Shell中,执行一个持续进行的指令,会"霸屏",即你想再执行其他指令,要么重开个shell终端,要么退出这个执行。1、作用nohub,即nohangup(不挂起),用于在系统后台不挂断地运行命令,Ctrl+C退出终端后命令依旧执行。2、语法nohup

JavaScript策略模式

JavaScript策略模式1什么是策略模式2实现一个基础的策略模式3Javascript中策略模式4使用策略模式实现缓动动画5使用策略模式实现表单校验1什么是策略模式策略模式(StrategyPattern)是一种行为型设计模式,它定义了一系列算法,将每个算法都封装起来,并且使它们可以相互替换。策略模式让算法独立于使

Java的Socket通信的断网重连的正确写法

Java的Socket通信的断网重连的正确写法Socket通信的断网重连介绍客户端与服务端源码演示截图本地演示服务器演示演示截图总结Socket通信的断网重连介绍针对于已经建立通信的客户端与服务器,当客户端与服务器因为网络问题导致网络不通而断开连接了或者由于服务器端的服务被突然停掉,而客户端进行的一种尝试重新建立连接的

通用商城项目(下)

记录一些踩坑的地方,以及理顺一些思路。通过管理系统页面,完成商品属性分组和商品属性(基本属性)关联维护属性表与属性组表的功能完善:显示属性组与属性表的一对多关系前端1.引入组件,是否显示使用v-if,但是还要注意引入的组件本身,是否自己也有:visible.sync="visible"这样的属性。只有当两层是否显示的变

通过内网穿透,在Windows 10系统下搭建个人《我的世界》服务器公网联机

文章目录1.Java环境搭建2.安装我的世界Minecraft服务3.启动我的世界服务4.局域网测试连接我的世界服务器5.安装cpolar内网穿透6.创建隧道映射内网端口7.测试公网远程联机8.配置固定TCP端口地址8.1保留一个固定tcp地址8.2配置固定tcp地址9.使用固定公网地址远程联机今天和大家分享一下只需简

【外汇天眼】外汇交易的优势:公平、低成本和高流动性

外汇交易的优势体现在其公平性以及众多其他方面。让我们一起重新审视这些优势,以更清晰地了解外汇市场的吸引力。1、低成本交易:与其他金融市场不同,外汇市场没有佣金、清算费、交易所费、政府费或经纪费。大多数外汇经纪人通过点差服务获得回报。这意味着交易者可以更高效地管理交易成本。2、无固定手数:与期货市场不同,外汇市场允许交易

【2591. 将钱分给最多的儿童】

来源:力扣(LeetCode)描述:给你一个整数money,表示你总共有的钱数(单位为美元)和另一个整数children,表示你要将钱分配给多少个儿童。你需要按照如下规则分配:所有的钱都必须被分配。每个儿童至少获得1美元。没有人获得4美元。请你按照上述规则分配金钱,并返回最多有多少个儿童获得恰好8美元。如果没有任何分配

【Vue】利用vue.js、vuex和vue router组件、element ui plus组件来创建基于知识图谱的智能问答系统的前端部分

Vue.js是一个流行的JavaScript框架,用于构建用户界面。它基于MVVM模式,可以轻松地创建组件化应用程序。Vuex是Vue.js的官方状态管理库,用于管理Vue.js应用程序中的数据流。它提供了一种集中式的方式来管理应用程序中的所有组件的状态,并且它可以让你轻松地实现可预测的状态变化。VueRouter是V

PostgreSQL serial类型

serial类型和序列postgresql序列号(SERIAL)类型包括smallserial(smallint,short),serial(int)bigserial(bigint,longlongint)不管是smallserial,serial还是bigserial,其范围都是(1,922337203685477

热文推荐