开始

关注的公共列表。
头像是单独的一列。
image.png

image.png
话题页也会用到这个组件。
image.png
image.png
image.png

image.png
image.png

开始写这个组件

后面会单独封装成一个组件。
image.png
首先是左边的头像
image.png

  1. <!-- 列表 -->
  2. <view class="common-list">
  3. <view class="">
  4. <image src="../../static/demo/userpic/12.jpg" mode="widthFix" lazy-load="true"></image>
  5. </view>
  6. </view>

左边和右边的class属性
image.png

  1. <view class="common-list">
  2. <view class="common-list-l">
  3. <image src="../../static/demo/userpic/12.jpg" mode="widthFix" lazy-load="true"></image>
  4. </view>
  5. <view class="common-list-r">
  6. </view>
  7. </view>

垂直方向居中,左右两边靠边
image.png
性别的图标
image.png
左边昵称 性别 和岁数。
image.png

  1. <view class="">昵称<view class="icon iconfont icon-nan">25</view>

关注图标
image.png
标题和图片
image.png

  1. <view class="">
  2. <image src="../../static/demo/datapic/13.jpg" mode="widthFix" lazy-load="true"></image>
  3. </view>

最下面一行,也是左右的结构。flex布局,左右两边分别靠边。
image.png
3个图标分别是转发 评论,点赞。
image.png

image.png

  1. <view class="u-f-ajc u-f-jsb">
  2. <view class="">深圳 龙岗</view>
  3. <view class="">
  4. <view class="icon iconfont icon-zhuanfa"></view>
  5. <view class="icon iconfont icon-pinglun1"></view>
  6. <view class="icon iconfont icon-dianzan1"></view>
  7. </view>
  8. </view>

让这三个图标 flex布局,并且是水平的排列。
image.png
flex布局,垂直方向居中
image.png
image.png
最外层也是需要flex布局的
image.png
头像太大了。
image.png

image.png
头像增加宽和高。加一个圆形
image.png

  1. .common-list-l image{
  2. width: 90upx;
  3. height: 90upx;
  4. border-radius: 100%;
  5. }

image.png

如果标题很长。左边往往会被压缩。
image.png
这里没有被压缩。
image.png
为了保险起见。给左边设置防止被压缩。flex-shrink设置为0 就不会被压缩了。
image.png

  1. .common-list-l{
  2. flex-shrink: 0;
  3. }

组件和窗口的间距

上下左右都有间距
image.png
最外层加一个内边距
image.png

  1. .common-list{
  2. padding: 20upx;
  3. }

右边图片放最大化。
第三个view下面的image
image.png
image.png
image.png
昵称性别之类 不是flex布局
image.png
flex布局 并且垂直方向居中。
image.png

image.png
右边为了保险起见,加flex布局。我们要保证让他填满剩余的空间。
image.png

  1. .common-list-r{
  2. flex: 1;
  3. }

左边和右边增加间距
image.png
先加一个外边距 试一下。
image.png

  1. .common-list-r{
  2. flex: 1;
  3. margin-left: 10upx;
  4. }

image.png

右边第一行优化

image.png

image.png

  1. .common-list-r>view:nth-child(1){
  2. }
  3. .common-list-r>view:nth-child(2){
  4. }
  5. .common-list-r>view:nth-child(3){
  6. }
  7. .common-list-r>view:nth-child(4){
  8. }

吸取昵称颜色
image.png
昵称的颜色, 然后是右边的关注的背景 和边距
image.png

  1. .common-list-r>view:nth-child(1)>view:first-child{
  2. color: #999999;
  3. }
  4. .common-list-r>view:nth-child(1)>view:last-child{
  5. background: #EEEEEEE;
  6. padding: 0 10upx;
  7. font-size: 26upx;
  8. }

昵称的字大一点。
image.png
年龄增加class
image.png
字体、左右边距,距离左边外边距。圆角
image.png

  1. .tag-sex{
  2. background: #007AFF;
  3. color: #FFFFFF;
  4. font-size: 23upx;
  5. padding: 0 5upx;
  6. margin-left: 10upx;
  7. border-radius: 20upx;
  8. }

image.png
字体变大一点, 性别行高设置为0
image.png

  1. .tag-sex{
  2. background: #007AFF;
  3. color: #FFFFFF;
  4. font-size: 23upx;
  5. padding: 0 5upx;
  6. margin-left: 10upx;
  7. border-radius: 20upx;
  8. line-height: 0;
  9. }

内边距上下为2,左右为10
image.png

image.png
行高改成20upx
image.png

  1. .common-list-r>view:nth-child(1)>view:last-child{
  2. background: #EEEEEEE;
  3. padding: 0 10upx;
  4. font-size: 26upx;
  5. }
  6. .tag-sex{
  7. background: #007AFF;
  8. color: #FFFFFF;
  9. font-size: 23upx;
  10. padding: 2upx 10upx;
  11. margin-left: 10upx;
  12. border-radius: 20upx;
  13. line-height: 20upx;
  14. }

image.png

image.png

  1. line-height: 24upx;

image.png

image.png

  1. .common-list-r>view:nth-child(1)>view:last-child{
  2. background: #EEEEEEE;
  3. padding: 0 10upx;
  4. font-size: 32upx;
  5. }
  6. .tag-sex{
  7. background: #007AFF;
  8. color: #FFFFFF;
  9. font-size: 23upx;
  10. padding: 5upx 10upx;
  11. margin-left: 10upx;
  12. border-radius: 20upx;
  13. line-height: 22upx;
  14. }

image.png

第二行调解样式

首先是标题大一点。上下加一点间距
image.png

  1. .common-list-r>view:nth-child(2){
  2. font-size: 32upx;
  3. padding: 15upx 0;
  4. }

image.png
改成12
image.png

  1. .common-list-r>view:nth-child(2){
  2. font-size: 32upx;
  3. padding: 12upx 0;
  4. }

第四行

image.png
取色,第四行的颜色
image.png

最后一行所有图标和字体的颜色
image.png

image.png
第四行 最右边的3个图标的父元素的view
image.png

  1. .common-list-r>view:nth-child(4)>view:nth-child(2)>view{
  2. margin-left: 10upx;
  3. padding-left: 5upx;
  4. }

image.png

最后一行加一条线

image.png

  1. .common-list-r {
  2. flex: 1;
  3. margin-left: 15upx;
  4. border-bottom: 1upx solid #EEEEEE;
  5. }

image.png
增加间距
image.png

  1. .common-list-r {
  2. flex: 1;
  3. margin-left: 15upx;
  4. border-bottom: 1upx solid #EEEEEE;
  5. padding-bottom: 10upx;
  6. }

image.png

本节最终代码

  1. <template>
  2. <view>
  3. <!-- 自定义导航栏 -->
  4. <uni-nav-bar :statusBar="true" @clickRight="openAdd">
  5. <!-- 左边 -->
  6. <block slot="left">
  7. <view class="nav-left">
  8. <view class="icon iconfont icon-qiandao"></view>
  9. </view>
  10. </block>
  11. <!-- 中间 -->
  12. <view class="nav-tab-bar u-f-ajc">
  13. <block v-for="(tab,index) in tabBaras" :key="tab.id">
  14. <view class="u-f-ajc" :class="{'active':tabIndex==index}"
  15. @tap="changeTab(index)">
  16. {{tab.name}}
  17. <view v-if="(tabIndex==index)" class="nav-tab-bar-line"></view></view>
  18. </block>
  19. </view>
  20. <!-- 右边 -->
  21. <block slot="right">
  22. <view class="nav-right u-f-ajc">
  23. <view class="icon iconfont icon-bianji1"></view>
  24. </view>
  25. </block>
  26. </uni-nav-bar>
  27. <!-- 列表 -->
  28. <view class="common-list u-f">
  29. <view class="common-list-l">
  30. <image src="../../static/demo/userpic/12.jpg" mode="widthFix" lazy-load="true"></image>
  31. </view>
  32. <view class="common-list-r">
  33. <view class="u-f-ac u-f-jsb">
  34. <view class="u-f-ac">昵称
  35. <view class="tag-sex icon iconfont icon-nan">25</view>
  36. </view>
  37. <view class="icon iconfont icon-zengjia">关注</view>
  38. </view>
  39. <view class="">我是标题我是标题我是标题我是标题我是标题我是标题我是标题我是标题我是标题我是标题我是标题我是标题</view>
  40. <view class="">
  41. <image src="../../static/demo/datapic/13.jpg" mode="widthFix" lazy-load="true"></image>
  42. </view>
  43. <view class="u-f-ajc u-f-jsb">
  44. <view class="">深圳 龙岗</view>
  45. <view class="u-f-ac">
  46. <view class="icon iconfont icon-zhuanfa"></view>
  47. <view class="icon iconfont icon-pinglun1"></view>
  48. <view class="icon iconfont icon-dianzan1"></view>
  49. </view>
  50. </view>
  51. </view>
  52. </view>
  53. </view>
  54. </template>
  55. <script>
  56. export default {
  57. data() {
  58. return {
  59. tabIndex: 0,
  60. tabBaras: [
  61. {name:'关注',id:'guanzhu'},
  62. {name:'话题',id:'toppic'},
  63. ]
  64. }
  65. },
  66. methods: {
  67. changeTab(index) {
  68. this.tabIndex=index;
  69. },
  70. openAdd(){
  71. uni.navigateTo({
  72. url:'../add-input/add-input'
  73. })
  74. }
  75. }
  76. }
  77. </script>
  78. <style>
  79. .common-list{
  80. padding: 20upx;
  81. }
  82. .common-list-l{
  83. flex-shrink: 0;
  84. }
  85. .common-list-l image{
  86. width: 90upx;
  87. height: 90upx;
  88. border-radius: 100%;
  89. }
  90. .common-list-r {
  91. flex: 1;
  92. margin-left: 15upx;
  93. border-bottom: 1upx solid #EEEEEE;
  94. padding-bottom: 10upx;
  95. }
  96. .common-list-r>view:nth-child(3)>image{
  97. width: 100%;
  98. border-radius: 10upx;
  99. }
  100. .common-list-r>view:nth-child(1)>view:first-child{
  101. color: #999999;
  102. color: 30upx;
  103. }
  104. .common-list-r>view:nth-child(1)>view:last-child{
  105. background: #EEEEEEE;
  106. padding: 0 10upx;
  107. font-size: 32upx;
  108. }
  109. .tag-sex{
  110. background: #007AFF;
  111. color: #FFFFFF;
  112. font-size: 23upx;
  113. padding: 5upx 10upx;
  114. margin-left: 10upx;
  115. border-radius: 20upx;
  116. line-height: 22upx;
  117. }
  118. .common-list-r>view:nth-child(2){
  119. font-size: 32upx;
  120. padding: 12upx 0;
  121. }
  122. .common-list-r>view:nth-child(3){
  123. }
  124. .common-list-r>view:nth-child(4)>view{
  125. color: #AAAAAA;
  126. }
  127. .common-list-r>view:nth-child(4)>view:nth-child(2)>view{
  128. margin-left: 10upx;
  129. padding-left: 5upx;
  130. border-bottom: 1upx solid #EEEEEE;
  131. padding-bottom: 10upx;
  132. }
  133. /* .nav-left,.nav-right{
  134. border: 1upx solid;
  135. width: 100%;
  136. } */
  137. .nav-left{
  138. /* 这里视频中是左边16upx,实际这里是不需要的 */
  139. margin-left: 0upx;
  140. }
  141. .nav-left>view,.nav-right>view{
  142. font-size: 40upx;
  143. }
  144. .nav-left>view{
  145. color: #FF9619;
  146. }
  147. .nav-tab-bar{
  148. /* 父节点是flex为1的 所以这里100%宽度就可以继承父元素的宽度 */
  149. width: 100%;
  150. /* border: 1upx solid; */
  151. margin-left: -20upx;
  152. position: relative;
  153. }
  154. .nav-tab-bar>view{
  155. /* border: 1upx solid; */
  156. font-size: 32upx;
  157. padding: 0 15upx;
  158. font-weight: bold;
  159. color: #969696;
  160. }
  161. .active{
  162. color: #333333!important;
  163. }
  164. .nav-tab-bar-line{
  165. border-bottom: 14upx solid #FEDE33;
  166. /* border-top: 7upx solid red; */
  167. width: 70upx;
  168. border-radius: 20upx;
  169. position: absolute;
  170. bottom: 12upx;
  171. }
  172. </style>

结束