开始

开发聊天气泡
image.png

先把样式画出来,左边是一个头像,右边是一个文字。
image.png
气泡有这个尖尖的角
image.png
左右结构。
image.png

  1. <!-- 聊天列表 -->
  2. <view class="user-chat-list">
  3. <image src="../../static/demo/userpic/11.jpg" mode="widthFix"
  4. lazy-load="true"></image>
  5. <view class="">
  6. <text></text>
  7. </view>
  8. </view>

image.png
flex布局
image.png

  1. <!-- 聊天列表 -->
  2. <view class="user-chat-list u-f">
  3. <image src="../../static/demo/userpic/11.jpg" mode="widthFix"
  4. lazy-load="true"></image>
  5. <view class="user-chat-list-body">
  6. <text>随便</text>
  7. </view>
  8. </view>

头像的宽高 圆角。 不希望被压缩flex-shrink:0
image.png

  1. .user-chat-list{
  2. }
  3. .user-chat-list>image{
  4. width: 100upx;
  5. height: 100upx;
  6. border-radius: 100%;
  7. flex-direction: 0;
  8. }

气泡样式

吸取聊天框的背景色
image.png

image.png

  1. /* 聊天背景 */
  2. .user-chat-list-body{
  3. position: relative;
  4. background: #f4f4f4;
  5. padding: 25upx;
  6. margin-left: 20upx;
  7. }

image.png
气泡加上圆角
image.png

  1. .user-chat-list-body{
  2. position: relative;
  3. background: #f4f4f4;
  4. padding: 25upx;
  5. margin-left: 20upx;
  6. border-radius: 20upx;
  7. }

image.png

多加点文字
image.png
右边会紧贴着右边。所以要设置一个margin-right
image.png
image.png

image.png

聊天窗三角符号

image.png

image.png

  1. .user-chat-list-body:after{
  2. position: absolute;
  3. left: -30upx;
  4. right: 0;
  5. content: '';
  6. width:0;
  7. height: 0;
  8. border: 16px solid #F4F4F4;
  9. }

视频中看的也不是很清楚。
image.png

H5端我自己写的截图:
image.png

加个top
image.png
image.png
再往下一点点。
image.png
改变边框的颜色
image.png
实现了小三角。
image.png

自己在H5端调试,找到一个合适的位置。手机端可能就不一定是这样的了。可能需要单独的处理。
image.png

  1. .user-chat-list-body:after{
  2. position: absolute;
  3. left: -25upx;
  4. right: 0;
  5. top: 20upx;
  6. content: '';
  7. width:0;
  8. height: 0;
  9. border: 16px solid #F4F4F4;
  10. border-color: transparent #F4F4F4 transparent transparent;
  11. }

在最外层加一个class
image.png

  1. <view class="user-chat-list u-f user-chat-me">

左边头像先注释,复制一份头像代码放在右边。
image.png

文本要距离头像近一点。然后小三角移到右边去。
image.png

image.png
第二步气泡。和上面的css反着来。
image.png

  1. .user-chat-me{
  2. justify-content: flex-end;
  3. }
  4. .user-chat-me .user-chat-list-body{
  5. margin-right: 20upx;
  6. margin-left: 100upx;
  7. }

小三角。
image.png
把颜色放到最后。三角才会颠倒过来。image.png

image.png
H5端,自己在浏览器上调试一下 合适的位置
image.png
浏览器是28px。那么upx基本上是px的两倍,right就是56upx

  1. .user-chat-me .user-chat-list-body:after{
  2. left: auto;
  3. right: -56upx;
  4. border-color: transparent transparent transparent #F4F4F4;
  5. }

图片聊天窗

构建图片的聊天窗,把上面文字的先注释掉。
image.png

  1. <view class="user-chat-list-body">
  2. <!-- <text>随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便</text> -->
  3. <image src="../../static/demo/3.jpg" mode="widthFix" lazy-load="true"></image>
  4. </view>

image.png
设置最大宽度和最大高度。
image.png

  1. .user-chat-list-body>image{
  2. max-width: 150upx;
  3. max-height: 200upx;
  4. }

image.png

本节代码

  1. <template>
  2. <view>
  3. <!-- 聊天列表 -->
  4. <view class="user-chat-list u-f user-chat-me">
  5. <!-- <image src="../../static/demo/userpic/11.jpg" mode="widthFix"
  6. lazy-load="true"></image> -->
  7. <view class="user-chat-list-body">
  8. <!-- <text>随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便随便</text> -->
  9. <image src="../../static/demo/3.jpg" mode="widthFix" lazy-load="true"></image>
  10. </view>
  11. <image src="../../static/demo/userpic/11.jpg" mode="widthFix"
  12. lazy-load="true"></image>
  13. </view>
  14. <!-- 输入框 -->
  15. <user-chat-bottom @submit="submit"></user-chat-bottom>
  16. </view>
  17. </template>
  18. <script>
  19. import userChatBottom from '@/components/user-chat/user-chat-bottom.vue';
  20. export default {
  21. components:{
  22. userChatBottom
  23. },
  24. data() {
  25. return {
  26. text:""
  27. }
  28. },
  29. methods: {
  30. submit(data){
  31. console.log(data);
  32. }
  33. }
  34. }
  35. </script>
  36. <style>
  37. .user-chat-list{
  38. }
  39. .user-chat-list>image{
  40. width: 100upx;
  41. height: 100upx;
  42. border-radius: 100%;
  43. flex-shrink: 0;
  44. }
  45. /* 聊天背景 */
  46. .user-chat-list-body{
  47. position: relative;
  48. background: #f4f4f4;
  49. padding: 25upx;
  50. margin-left: 20upx;
  51. border-radius: 20upx;
  52. margin-right: 100upx;
  53. }
  54. .user-chat-list-body:after{
  55. position: absolute;
  56. left: -25upx;
  57. right: 0;
  58. top: 20upx;
  59. content: '';
  60. width:0;
  61. height: 0;
  62. border: 16px solid #F4F4F4;
  63. border-color: transparent #F4F4F4 transparent transparent;
  64. }
  65. .user-chat-me{
  66. justify-content: flex-end;
  67. }
  68. .user-chat-me .user-chat-list-body{
  69. margin-right: 20upx;
  70. margin-left: 100upx;
  71. }
  72. .user-chat-me .user-chat-list-body:after{
  73. left: auto;
  74. right: -56upx;
  75. border-color: transparent transparent transparent #F4F4F4;
  76. }
  77. .user-chat-list-body>image{
  78. max-width: 150upx;
  79. max-height: 200upx;
  80. }
  81. </style>

结束