CSS_实现三角形和聊天气泡框

如何用css画出一个三角形

1、第一步

写一个正常的盒子模型,先给个正方形的div,便于观察,给div设置宽高和背景颜色

html 复制代码
<body>
    <div class="box"></div>
</body>
<style>
    .box {
         width: 100px;
         height: 100px;
         background-color: pink;
     }
</style>

2、第二步

便于观察,给div设置四个不同颜色的的边框border

html 复制代码
<style>
   .box {
        width: 100px;
        height: 100px;
        background-color: pink;
        border-left: 50px solid skyblue;
        border-right: 50px solid yellow;
        border-bottom: 50px solid yellowgreen;
        border-top: 50px solid violet;
    }
</style>

四种不同颜色的边框,已经可以看出来,四个边框差个尖尖就是三角形

3、第三步

把中间的div的宽高设置为0像素,即可得到四个等腰三角形

html 复制代码
<style>
   .box {
        width: 0px;
        height: 0px;
        background-color: pink;
        border-left: 50px solid skyblue;
        border-right: 50px solid yellow;
        border-bottom: 50px solid yellowgreen;
        border-top: 50px solid violet;
    }
</style>

4、第四步

我们需要哪一边的三角形,把另外三边的边框设置透明transparent即可

比如我现在需要上面的三角形,我就可以把左右下的边框设置透明,并且把div的背景色删掉或者注释掉

html 复制代码
<style>
    .box {
        width: 0px;
        height: 0px;
        /* background-color: pink; */
        border-left: 50px solid transparent;
        border-right: 50px solid transparent;
        border-bottom: 50px solid transparent;
        border-top: 50px solid violet;
    }
</style>

聊天气泡实现

html 复制代码
<body>
    <div class="box"></div>
</body>
<style>
    .box {
        width: 200px;
        height: 100px;
        /*父级给相对定位,伪元素根据父级给绝对定位 */
        position: relative;
        background-color: violet;
        border-radius: 20px;
    }
    
    .box::after {
        content: '';
        width: 0px;
        height: 0px;
        border: 20px solid;
        border-left: 20px solid transparent;
        border-right: 20px solid transparent;
        border-bottom: 20px solid transparent;
        border-top: 20px solid violet;
        /*给绝对定位,根据需求设置三角形的位置*/
        position: absolute;
        top: 100px;
        left: 50px;
    }
</style>

简单代码实现

html 复制代码
<div class="wrapper"></div>
<style>
	.wrapper {
		position: relative;
		width: 200px;
		height: 200px;
		margin: 50px auto;
		border-radius: 12px;
		background: #ffffff;
		filter: drop-shadow(0 0 5px rgba(0, 0, 0, 0.3));
		padding: 20px;
	}
	.wrapper:before {
		content: "";
		position: absolute;
		width: 0;
		height: 0;
		border: 10px solid transparent;
		border-bottom-color: #ffffff;
		top: -20px;
		left: 50px;
	}
</style>
相关推荐
小巧的砖头20 分钟前
C#会重蹈覆辙吗?系列之2:反射及元数据的性能问题
开发语言·前端·c#
KaMeidebaby26 分钟前
卡梅德生物技术快报|蛋白的叠氮基修饰:实操解析:核酸模板耦合蛋白的叠氮基修饰实现靶蛋白定点共价标记
前端·人工智能·物联网·算法·百度
濮水大叔36 分钟前
在大型 Vue 项目中,如何有效管理复杂的状态?“散装版” vs “套装版”
前端·vue.js·typescript
玄星啊1 小时前
可修改:代码的生存底线
前端·ai编程
没落英雄1 小时前
3. DeepAgents 实战 - Memory Skills 与上下文工程
前端·人工智能·架构
Bigger1 小时前
对不起!我错怪你了,UnoCSS:一次和 AI 一起排查 DevTools 卡顿的经历
前端·css·人工智能
laowang3572 小时前
依赖故障时,日志体系需要埋哪些关键节点才能快速定位是安装失败、解析失败还是运行时缺失?
前端·javascript·vue.js·webpack·node.js
倾颜2 小时前
AI Mind 的单线程短期记忆设计:如何压缩、整理并控制当前会话上下文
前端·langchain·llm
u0143781083 小时前
行内块元素之间的空白
前端·html
Lsx_3 小时前
基于 Claude Code 的 AI 编程工作流探索
前端·ai编程·claude