CSS3如何实现聊天气泡效果?(代码示例)

本篇文章给大家带来的内容是介绍css3巧妙实现聊天气泡效果的方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

前一阵子敢玩的 Mobile 页改版完成了,就之前的页面风格更加扁平化,从暗色系为主背景转到亮色背景,去掉更多的阴影,给用户简约的体验风格,哈哈我不是设计师不过多评价啦。感兴趣的朋友可以直接去 idarex移动端主页。

这次改版的所有 style 都是 orange 写的,感触颇多,分期分享给大家

下面说正题,说好的聊天气泡呢?

传统的聊天气泡

什么又是传统的聊天气泡,直接上图

立即学习“前端免费学习笔记(深入)”;

1.jpg

代码如下

.comment { width: 150px; height: 35px; position: relative; margin: 30px auto 0; background: #f8ac09; border-radius: 5px; } .comment:after { content: ''; width: 0; height: 0; position: absolute; top: 5px; right: -16px; border: solid 8px; border-color: transparent transparent transparent #f8ac09; font-size: 0; }

实现方式大家早有耳闻,圆角矩形和三角形嘛,三角形原理就是 border 可以设置为透明,可以复制上例中的代码修改 border-color 属性摸索三角形的实现。

注:IE8 更早版本对 border 的 transparent 支持不是很好。大家可以无视低版本缺陷,因为大部分浏览器都显示正常,非要兼容的话把 transparent 属性设置为主背景色而不是气泡背景色(前提是背景为纯色)。

想必大家都知道,这里不赘述,聊一聊其他实现方法。

这里的三角形部分可以使用正方形代替,实现同样效果,方法就是旋转小正方形使其一部分露在外面。代码如下

.comment {  position: relative;  width: 150px;  height: 35px;  background: #f8ac09;  border-radius: 5px;  margin: 30px auto 0;}.comment:after {  content: '';  position:absolute;  top: 10px;  right: -4px;  width: 8px;  height: 8px;  transform: rotate(45deg);  background-color: #f8ac09;}

缺点是小三角只能是直角三角形,当然也可以通过变换得到菱形再进行拼接,变换多了感觉没有第一种方式直接,浏览器兼容 transform(2D) 属性如下

2.jpg

总体还不错,几种方法都能放心使用,不存在大的兼容问题。

现实案例

这里的设计稿多了一个边框,直接上设计稿

3.jpg

?想一想怎么处理,我们回顾上文

第一种方式本身就是 border 透明,怎么再给它设置 border 是个问题,暂且先不考虑。

第二种方式如果使用小正方形旋转,层级叠加是个问题,因为设计稿中的气泡背景为 rgba(247, 188, 10, 0.03) 先看下实现代码

.comment {  width: 150px;  height: 35px;  position:relative;  margin: 30px auto 0;  background-color: rgba(247, 188, 10, 0.03);  border: 1px solid rgba(252, 185, 8, 0.35);  border-radius: 5px;}.comment:after {  content: '';  width: 8px;  height: 8px;  position: absolute;  top: 10px;  right: -4px;  transform: rotate(45deg);  background-color: rgba(247, 188, 10, 0.03);  border: 1px solid rgba(252, 185, 8, 0.35);}

效果如下

4.jpg

上面的思路有问题,因为小正方形与气泡的一部分会重合,半透明背景的部分总会出现问题,有人说了偷个懒总可以吧,把透明后的背景色吸取出来然后再进行叠加(因为大家注意到设计稿的整体背景是纯色)

按着这个思路去实现,那么问题又来了。具体两个问题如下。

1.如果小正方形叠加在上,那么小正方形左半部分的边框就会显示

.comment {  width: 150px;  height: 35px;  position: relative;  margin: 30px auto 0;  background-color: #faf8f3;  border: 1px solid #fbe2a0;  border-radius: 5px;}.comment:after {  content: '';  width: 8px;  height: 8px;  position:absolute;  top: 10px;  right: -4px;  transform: rotate(45deg);  background-color: #faf8f3;  border: 1px solid #fbe2a0;}

效果如下,比较之前的图片圆角矩形的右边确实遮住了,但小正方形左边的边框显示出来了

5.jpg

处理方式呢,可以这样。

.comment:after {  content: '';  width: 8px;  height: 8px;  position: absolute;  top: 10px;  right: -5px;  transform: rotate(45deg);  background-color: #faf8f3;  border: 1px #fbe2a0;  border-style: solid solid none none;}

我们发现问题解决了。效果如下

6.jpg

设计稿是有 padding 的,亲测本案例中可行,但是本着认真的原则 padding-right 如果过小,会出现什么问题呢?

我们向 p 中加文字。

Hello,orange.Welcome to FrontEnd World!

效果如下

7.jpg

我们发现字母 o 的右下角被小正方形左侧覆盖了,当然可以通过 z-index 属性 hack。

2.如果小正方形在圆角矩形下,那么圆角矩形的右边框就会完整显示,大家自行脑补,此方案不合理,不过多解释。

以上的方法缺点也都很明显,那怎么做才能更严谨,能根据需求的变化不大伤筋骨呢?

我们还用三角形的方案! what? 不是说三角形的方案不可行了嘛 ?

一个三角形是不可行那两个呢,我们有请 after 的兄弟 before 出场。项目的真实代码如下

.reply {  position: relative;  margin: 0.672rem 0 0.096rem 0;  padding: 0.408rem 0.816rem;  border: 1px solid rgba(#fcb908, 0.35);  border-radius: 0.2rem;  background-color: rgba(#f7bc0a, 0.03);  &:after {    content: '';    width: 0px;    height: 0px;    border-color:  transparent transparent #faf8f3 transparent ;    border-style: solid;    border-width: 6px;    position: absolute;    top: -11px;    border-radius: 3px;    left: 18px;    right: auto;  }  &:before {    content: '';    width: 0px;    height: 0px;    border-color: transparent transparent rgba(#fcb908, 0.35) transparent;    border-style: solid;    border-width: 7px;    position: absolute;    top: -14px;    border-radius: 3px;    left: 17px;    right: auto;  }}

注:这段代码用的是 SASS 进行预编译,如果从头仔细看到这里的话不难理解,两个三角形叠加,大三角形颜色是边框的颜色,小三角形是内部背景色,小三角形绝对定位时向下移 3px 把圆角矩形的一部分上边框遮挡,这样小三角下部也有溢出,具体在两像素之内,实际上不存在遮挡文本问题。

总结

实际问题解决的方法很多,就看大家怎么去思考,这个方案也不是最满意的方案,因为多了一个伪元素,主要还是设计思想的多样性,总之 css 很灵活。

有人不禁会问,这里设计稿给的是向上的箭头,为什么例子里却都是向右的,这里向右的都是我写的 demo ,理解原理的话,改变个位置方向都是大同小异。

以上就是CSS3如何实现聊天气泡效果?(代码示例)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1613284.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 03:32:17
下一篇 2025年12月24日 03:32:34

相关推荐

  • ::before有什么作用?::before与:before的区别是什么?

    ::before是什么?有什么作用?本篇文章就给大家::before有什么用,让大家了解::before的简单使用,以及::before与:before的异同点。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 一、::before是什么?有什么作用? 在css中,::before …

    2025年12月24日
    000
  • CSS打印时更改屏幕设计和样式(代码示例)

    本篇文章我们将介绍在打印过程中使用css更改屏幕设计和样式的代码,要在印刷时改变样式,可以在文件中进行样式表的链接的link标签指定media属性,或者在css文件中使用媒体查询。 使用链接标记指定媒体属性时 代码 这是使用链接标记指定media属性的代码。 index.html 立即学习“前端免费…

    2025年12月24日
    000
  • 是什么?有什么用?

    是什么?有什么用?本篇文章给大家介绍在css中是什么,作用有哪些,让大家了解的使用。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 一、的基本介绍 1、是什么? 是一种表现基础图形的CSS数据类型,作用于clip-path 与 shape-outside 属性中。【相关视频教程推荐…

    2025年12月24日
    000
  • css使用相对单位进行媒体查询(示例介绍)

    本篇文章给大家带来的内容是css使用相对单位进行媒体查询(示例介绍),让大家了解为什么可以使用相对单位进行媒体查询,有什么好处。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 使用相对单位进行媒体查询 媒体查询中定义的宽度被称为断点。这个点是由你选择的内容以最适合可用空间的方式调整…

    2025年12月24日
    000
  • CSS实现透明度变化的动画 (淡入淡出效果)

    本文我们将使用css来实现透明度发生变化的动画,可以获得淡入和淡出效果。 要实现CSS中透明度更改的动画,需要使用的是transition属性。由于transition属性是CSS3中的新增属性,因此有必要在一些可支持的浏览器上运行时加上前缀。 像是Chrom,Safari编写为“-webkit-t…

    2025年12月24日
    000
  • css的属性选择器是什么?属性选择器的使用

    css的属性选择器是什么?本篇文章就和大家谈谈css的属性选择器,让大家了解属性选择器的作用是什么,如何使用。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 css 属性选择器是什么?有什么用? 在HTML中的元素都可以具有属性,这些属性是显示或修改其行为的附加值。html中包含许…

    好文分享 2025年12月24日
    000
  • css如何实现图片的旋转展示效果(代码示例)

    本篇文章给大家带来内容是通过代码示例介绍使用css+js实现图片的旋转展示,制作一个手动操作的“无限”照片轮播图。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 下面我们就开始介绍如何实现效果。 1、构建图像轮播框架 首先是HTML。它有点难以阅读,因为我们删除了元素之间的任何空格…

    2025年12月24日
    000
  • css如何实现无限轮播图动画(代码示例)

    本篇文章给大家带来的内容是如何实现自动无限播放的轮播图动画效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 在之前的文章【css如何实现图片的旋转展示效果】中介绍了手动无限轮播图的制作,本篇我们来看看自动无限轮播图动画的制作。下面我们就来看看动画效果是如何实现的。 1、设置动画…

    2025年12月24日
    000
  • css实现三面立体旋转无限轮播图动画(代码示例)

    本篇文章给大家介绍css实现三面立体旋转无限轮播图动画(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 在之前的文章【css如何实现无限轮播图动画】里介绍横向播放的无限轮播图动画(如下图),本文我们将在之前的基础上进行修改,实现不一样的轮播图动画。 三面立体旋转的轮播图…

    2025年12月24日
    000
  • 如何使用CSS3的渐变来实现文字颜色的渐变?

    在最近的网页设计中,我觉得包含渐变的设计越来越多。这一次,我们将来介绍如何将css3的渐变应用于文本,并介绍一下如何将图像填充到文本上。 在文本上加上颜色渐变 这是一种将渐变色设置为文本的背景颜色。目前支持的浏览器是Google Chrome,Safari,Opera。(推荐课程:CSS3视频教程)…

    2025年12月24日 好文分享
    000
  • css中媒体查询是什么?怎么使用?

    本篇文章给介绍媒体查询是什么?怎么使用?让大家了解媒体查询的使用方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 媒体查询是什么?有什么用? 媒体查询限制CSS样式的范围,以便仅在满足某些媒体条件时才适用。 简单来说:媒体查询可以让我们根据设备显示器的特性(如视口宽度、屏幕比例…

    2025年12月24日
    000
  • css如何使用媒体查询进行响应式设计?(示例详解)

    本篇文章给大家带来的内容是介绍css如何使用媒体查询进行响应式设计?(示例详解),通过简单的示例来看看最小宽度和最大宽度的使用。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 响应式设计背后的理念是使用相同的代码库在各种设备上提供出色的体验。这意味着我们编写的代码应该与设备无关。执…

    2025年12月24日
    000
  • 浅谈pointer-events属性是什么?pointer-events属性的使用

    本篇文章给大家带来的内容是浅谈pointer-events属性是什么?pointer-events属性的使用,让大家了解pointer-events属性的相关知识。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 首先我们来了解一下pointer-events属性是什么? point…

    2025年12月24日
    000
  • 详解pointer-events属性的使用(代码示例)

    本篇文章给大家带来的内容是详解pointer-events属性的使用(代码示例),让大家了解pointer-events属性可以做什么,有什么效果。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 在之前的文章【浅谈pointer-events属性是什么?pointer-events…

    2025年12月24日
    000
  • CSS3如何实现水平轴上的旋转(附代码)

    使用css3可以以三维方式在其水平/垂直轴上旋转dom元素。本篇文章就给大家来分享关于css3实现在水平轴上旋转的方法,有感兴趣的朋友可以看一看 我们直接进入正文 HTML代码是: Barack 5397 HonoluluAugust 4, 1961 CSS代码是: 立即学习“前端免费学习笔记(深入…

    好文分享 2025年12月24日
    000
  • css的cursor属性是什么?cursor属性的使用

    本篇文章给大家带来的内容是介绍css的cursor属性是什么?cursor属性的使用。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 首先我们来了解一下cursor属性是什么?有什么作用? cursor属性是css中的光标属性,它指定当鼠标位于应用元素上时可以使用的鼠标光标类型,即…

    2025年12月24日
    000
  • CSS3媒体查询的动画响应布局

    本篇文章给大家分享的内容是关于css3媒体查询的动画响应布局,有感兴趣的朋友可以看一看,我们来看正文内容。 什么是媒体查询 CSS3为我们带来了许多我们用于网页设计的新功能,其中一项功能可以帮助改善网站的可用性,即媒体查询。 媒体查询Boilerplate /* Smartphones (portr…

    好文分享 2025年12月24日
    000
  • 通过CSS定位操作的动态元素大小

    这篇文章给大家介绍的是关于通过css定位操作的动态元素大小的内容,有感兴趣的朋友可以看一看,话不多说,我们直接看来看具体的内容。 不使用宽度和高度或JS给体积提供元素的小技巧。 这是一个很简单的技巧,但是很多人不知道。(推荐教程:CSS视频教程) 假设你想制作一个包含每个屏幕100px以外的所有屏幕…

    好文分享 2025年12月24日
    000
  • 如何实现一个特殊的单面css框效果(代码实例)

    随着css3的发展,网络开发的进步已经走向了完美的想象。对于文本和其他用法,css drop-shadow可以实现一个好看的效果框,我们直接来看具体的代码。 这是html部分: Some example text CSS代码 #beauty-boxes{ transition: all 0.5s e…

    2025年12月24日
    000
  • cursor属性如何改变光标的形状?(图文详解)

    本篇文章给大家带来的内容是介绍cursor属性改变光标形状的方法,让大家了解cursor属性可以设置的大部分常用的光标形状。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 首先我们来看看cursor属性是如何改变光标形状的。 css3 cursor属性的基本语法: cursor: …

    2025年12月24日 好文分享
    000

发表回复

登录后才能评论
关注微信