原文链接

在实现评论及回复功能时,考虑可以让大家选择一个皮肤,让评论区域显得不那么单调,具体效果可以参考百度贴吧和QQ的聊天界面。本文给出了一种采用CSS Sprites的实现方式,气泡可以做到宽度和高度的自适应扩展。

本例中用到的气泡图案来自QQ,此处仅用于交流学习

需求描述

基本要求就是希望可以实现一个类似QQ聊天气泡的效果,做到宽度和高度的自适应扩展。此外,最好可以实现方便的皮肤选择,使得气泡可以应用多种样式,以使界面更丰富多彩。

本文实现样例展示

气泡自适应的宽度和高度

多种皮肤效果展示

实现思路

对于自适应的宽度和高度,普通的行内元素即可实现。为了实现丰富的气泡,不得不使用背景图片,我们首先来观察一个气泡,可以发现一个气泡基本上可以分为9个部分,如下图所示:

为了方便描述,我们对这些区域进行编号为0-8,其中浅蓝色部分(1/3/5/9)为相对固定不变的区域,浅黄色部分(2/4/6/8)为自动扩展的部分(其高度或者宽度需要扩展),浅红色区域(区域0)为显示文本的区域。实际上,这与Android APP开发中常用的9-patch图片的原理是类似的。

为了实现自适应的气泡,我们首先需要对这9个区域进行正确的定位。通过CSS的相对和绝对定位可以达到这个目的。简单来说,区域0的宽度和高度自动扩展,包裹0-8这所有9个区域的元素(假设为wrapper)的宽度和高度也自动扩展,同时wrapper的position设为relative,并把1-8元素的position设为absolute。这样即可以做到宽度和高度的自适应,以及各区域的正确定位。

实现了各区域的定位后,对各区域进行设定背景即可。其中1/3/5/7使用图片作背景,2/4/6/8既可以使用图片,也可以仅使用CSS设定背景和边框颜色(根据实现的难易程度来选择具体实现方式)。为了减少对服务器的图片请求次数,考虑使用CSS Sprites技术。而对于多种皮肤的实现,在不同class下应用不同的样式,调整背景图即可。

关键代码

DOM结构

首先,给出代码结构如下(仅供参考),此处使用className:left和right来区分聊天气泡的位置(界面左侧还是右侧),使用一个className来确定使用的皮肤(以下代码中是bubble-bear),替换该值可选用其他的皮肤。

<ul class="chat-list"><li class="chat-item left"><img src="img/avatar-1.jpg" class="chat-avatar"/><div class="bubble-item bubble-bear"><span class="chat-content">我是萌萌的左边小熊</span><span class="cell cell-1"></span><span class="cell cell-2"></span><span class="cell cell-3"></span><span class="cell cell-4"></span><span class="cell cell-5"></span><span class="cell cell-6"></span><span class="cell cell-7"></span><span class="cell cell-8"></span></div></li><!-- more -->
</ul>

CSS

/* 气泡的position设为relative,方便其子元素的定位 */
.bubble-item {position: relative;
}/* 子元素的position设为absolute,方便其定位到父元素 */
.cell {position: absolute;
}/* 设定背景图(CSS Sprites) */
.bubble-bear .cell-1,
.bubble-bear .cell-3,
.bubble-bear .cell-5,
.bubble-bear .cell-7 {background: url(../img/bubbles.png) no-repeat;
}/* 内容区域,防止被其他区域遮挡 */
.chat-content {position: relative;z-index: 10;
}/*** 以下是小熊左侧的实现代码*//* 区域0(内容区域)的边距及背景颜色等 */
.left .bubble-bear .chat-content {margin: 17px 32px 15px 18px;display: inline-block;background-color: #fff8ef;
}/* 区域1(左上角)的定位、大小设置、背景图位置设置 */
.left .bubble-bear .cell-1 {left: 0;top: 6px;width: 20px;height: 20px;background-position: -3px -10px;
}/* 区域2(上边)的定位、大小设置、背景及边框颜色 */
.left .bubble-bear .cell-2 {left: 20px;top: 11px;right: 20px;height: 16px;background-color: #fff8ef;border-top: 1px solid #835426;
}/* 区域3(右上角)的定位、大小设置、背景图位置设置 */
.left .bubble-bear .cell-3 {right: 0;top: 0;width: 60px;height: 28px;background-position: -58px -4px;
}/* 区域4(右边)的定位、大小设置、背景及边框颜色 */
.left .bubble-bear .cell-4 {top: 28px;right: 6px;bottom: 10px;width: 60px;background-color: #fff8ef;border-right: 1px solid #835426;
}/* 区域5(右下角)的定位、大小设置、背景图位置设置 */
.left .bubble-bear .cell-5 {right: 0;bottom: 0;width: 60px;height: 16px;background-position: -58px -50px;
}/* 区域6(下边)的定位、大小设置、背景及边框颜色 */
.left .bubble-bear .cell-6 {right: 60px;bottom: 6px;left: 20px;height: 10px;background-color: #fff8ef;border-bottom: 1px solid #835426;
}/* 区域7(左下角)的定位、大小设置、背景图位置设置 */
.left .bubble-bear .cell-7 {left: 0;bottom: 0;width: 20px;height: 20px;background-position: -3px -46px;
}/* 区域8(左边)的定位、大小设置、背景及边框颜色 */
.left .bubble-bear .cell-8 {top: 25px;bottom: 20px;left: 4px;width: 20px;background-color: #fff8ef;border-left: 1px solid #835426;
}

另一侧(即右侧)的样式与左侧类似,此处不再详举。其他皮肤的实现方式也与此相同,只是需要根据背景图来调整CSS里各属性的值(主要为定位相关的值top/right/bottom/left,大小相关的值width/height,背景及边框颜色,background-position等)。

完整代码

完整代码见 Github。您还可以在原文的评论区域找到此种实现方案的具体应用。


// www.sfg.name
// sfg1991@163.com
// 2016/9/6

自适应的对话气泡皮肤实现方案相关推荐

  1. linux视频对话框,抖音对话框视频怎么做?如何在视频画面上添加对话气泡框?视频加对话气泡的方法...

    小编家里有个快要两周岁的小侄女,平日里总是喜欢做一些人小鬼大的事情,这不,前段时间她妈妈发了一个小视频,她拉着一个跟她差不多大的行李箱一脸严肃地说她要去上班~那么小一个小不点,居然很认真地对她妈妈说要 ...

  2. 论文阅读(4)基于卷积神经网络的自适应颜色增强在皮肤深层病变分割中的应用

    目录 基于卷积神经网络的自适应颜色增强在皮肤深层病变分割中的应用 摘要 1.引言 2.人工数据增强 2.1 颜色增强 2.2 空间增强 3. 网络结构 4.结果 5.讨论 5.1 色彩增强的有效性-- ...

  3. [css] 使用css实现对话气泡的效果

    [css] 使用css实现对话气泡的效果 方法:使用圆角矩形作为对话的主体框,左侧或右侧增加附加三角形,三角形使用border样式设置来实现,相对定位和绝对定位结合使三角形附于圆角矩形左侧或右侧: h ...

  4. Excel中 对「对话气泡(吹き出し)」中的文字添加删除线 等操作

    ■前言 好久之前的操作的,当时找了半天, 现在总结一下. ■操作方法如下图所示 (例:给「对话气泡(吹き出し)」有文本「aaabbbccc」,给其中的bbb添加删除线) 第一步 第二步 完成后的效果 ...

  5. H5聊天对话气泡的一种实现方式及原理

    H5聊天对话气泡的一种实现方式及原理 实现效果 实现原理 实现代码 聊天对话气泡实现特别需要处理的是气泡的小尖角. 实现效果 实现原理 基于HTML元素边框原理及CSS伪元素实现气泡小尖角.关键点如下 ...

  6. Unity 对话气泡

    前言: unity真是啥都得自己写,还是ue4牛逼. 对话气泡功能挺实用的,下图是最终的效果. 准备阶段: 文字逐字显示动画用到了DOTWeen 需要自己用PS画对话气泡 需要自行学习相关的布局组件. ...

  7. html语音对话,纯CSS对话框/对话气泡/语音泡沫/speech bubbles【27个示例】

    本文介绍的是纯CSS实现的对话框(对话气泡/语音泡沫/speech bubbles),所有示例都使用简单的语义HTML,没有空元素,没有不必要的额外元素,没有JavaScript,没有图像. 一.基本 ...

  8. 气泡文字php,HTML5实现对话气泡点击动画

    本篇文章给大家介绍一下使用HTML5实现对话气泡点击动画的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 需求 还是要先把需求拿出来. 要求:对话气泡要有动画,动画总共4秒 在 ...

  9. java绘制聊天气泡代码_封装一个canvas画对话气泡的函数

    quadraticCurveTo(cp1x, cp1y, x, y) 绘制二次贝塞尔曲线,cp1x,cp1y为一个控制点,x,y为结束点.开始点由moveTo,或者前面一次的结束点作为下次调用的开始点 ...

最新文章

  1. 点赞功能,用 MySQL?还是 Redis!
  2. 国自然申请初审中的注意事项
  3. 启动ipython内核发生错误_ipython3启动
  4. antd 表单域验证规则 - 只能输入数字字符,去除前导0
  5. 从一个OutOfMemoryError 学会了分析Java内存泄漏问题
  6. 清华2018顶级数据团队建设全景报告发布:Python最受欢迎,C语言含金量最高
  7. 【Proteus仿真8086实验一】RAM存储器62256
  8. 自从阿里拿下 Flink 以后, 你还不懂 Flink 就 out 了
  9. 搜狐Linux运维工程师面试真题曝光
  10. Filenet基金会发放第一期打包节点公开激励
  11. python代码实现自动登录
  12. xcode打包IPA(完整详细图文)
  13. 图书信息管理系统的设计与实现
  14. 机架式服务器主要内部组件,戴尔R815机架式服务器
  15. 计算机只存在于计算机硬盘上,计算机病毒只存在于计算机硬盘上。
  16. 什么是静态测试?什么是动态测试?
  17. python鲜花_【实战案例】90 行Python代码实现一棵鲜花盛开树
  18. Python进阶【第一篇】socket
  19. 东京实验店开张!日本7-Eleven以脸部辨识付款商店
  20. 人脸识别,验证,登录开发 (三)

热门文章

  1. 关键词SEO排名优化的对策与流程
  2. 高新技术企业申报的条件和好处
  3. MongoDB KB2731284 补丁
  4. 如何写好年度总结PPT? by 傅一平
  5. 央行发文深入推进农村支付服务环境建设并答记者问
  6. MySQL 5.7.17 Group Relication(组复制)搭建手册
  7. PHPMailer邮箱发送
  8. ibm tivoli_Tivoli Identity Manager中的角色重新认证
  9. 优雅的underscore
  10. Radon变换理论介绍与matlab实现--经验交流