应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

flex 每行3个。flex一行显示3个。flex 每行显示4个自适应排列。flex每行固定几个布局。css 格子栏效果,css实现框框效果。模板。小屏下一行显示4个,大屏下一行显示5个

9681人阅读 2019/11/16 21:31 总访问:5182873 评论:0 收藏:0 手机
分类: 前端

效果如下,每行显示3个自适应排列

其实也很简单,只需要设置父元素flex布局,然后设置一下换行排列,flex-wrap: wrap。然后子元素设置一下宽度占1/3就可以了。其他什么间距这些微调就行了。这是这种方式主要适用于里边只是文字内容的形式,显示的时候能看到的宽度就是文字的长度,如果要显示固定的那种一块一块的效果就不是太适用了,这个下面有讲其他方法实现。


使用grid布局可以更简单更通用,可以参考:https://www.tnblog.net/aojiancc2/article/details/8231

代码如下

html代码:

  1. <div class="labroom-level">
  2. <!-- 优良中差分别为excellent,good ,middle,poor -->
  3. <div class="labroom-level-item labroom-level-excellent">
  4. <div class="labroom-level-title">
  5. </div>
  6. <div class="labroom-level-box">
  7. <div class="labroom-level-box-course">
  8. <span class="course-name">《Photoshop应用设计》</span>
  9. <span class="course-completepr">99%</span>
  10. </div>
  11. <div class="labroom-level-box-course">
  12. <span class="course-name">《Photoshop应用设计》</span>
  13. <span class="course-completepr">99%</span>
  14. </div>
  15. <div class="labroom-level-box-course">
  16. <span class="course-name">《Photoshop应用设计XXXX》</span>
  17. <span class="course-completepr">99%</span>
  18. </div>
  19. <div class="labroom-level-box-course">
  20. <span class="course-name">《Photoshop应用设计》</span>
  21. <span class="course-completepr">99%</span>
  22. </div>
  23. <div class="labroom-level-box-course">
  24. <span class="course-name">《Photoshop应用设计MMM》</span>
  25. <span class="course-completepr">99%</span>
  26. </div>
  27. </div>
  28. </div>
  29. <div class="labroom-level-item labroom-level-middle">
  30. <div class="labroom-level-title">
  31. 及格
  32. </div>
  33. <div class="labroom-level-box">
  34. <div class="labroom-level-box-course">
  35. <span class="course-name">《Photoshop应用设计》</span>
  36. <span class="course-completepr">99%</span>
  37. </div>
  38. <div class="labroom-level-box-course">
  39. <span class="course-name">《Photoshop应用设计》</span>
  40. <span class="course-completepr">99%</span>
  41. </div>
  42. <div class="labroom-level-box-course">
  43. <span class="course-name">《Photoshop应用设计XXXX》</span>
  44. <span class="course-completepr">99%</span>
  45. </div>
  46. <div class="labroom-level-box-course">
  47. <span class="course-name">《Photoshop应用设计》</span>
  48. <span class="course-completepr">99%</span>
  49. </div>
  50. <div class="labroom-level-box-course">
  51. <span class="course-name">《Photoshop应用设计MMM》</span>
  52. <span class="course-completepr">99%</span>
  53. </div>
  54. </div>
  55. </div>
  56. <div class="labroom-level-item labroom-level-poor">
  57. <div class="labroom-level-title">
  58. </div>
  59. <div class="labroom-level-box">
  60. <div class="labroom-level-box-course">
  61. <span class="course-name">《Photoshop应用设计》</span>
  62. <span class="course-completepr">99%</span>
  63. </div>
  64. <div class="labroom-level-box-course">
  65. <span class="course-name">《Photoshop应用设计》</span>
  66. <span class="course-completepr">99%</span>
  67. </div>
  68. <div class="labroom-level-box-course">
  69. <span class="course-name">《Photoshop应用设计XXXX》</span>
  70. <span class="course-completepr">99%</span>
  71. </div>
  72. <div class="labroom-level-box-course">
  73. <span class="course-name">《Photoshop应用设计》</span>
  74. <span class="course-completepr">99%</span>
  75. </div>
  76. <div class="labroom-level-box-course">
  77. <span class="course-name">《Photoshop应用设计MMM》</span>
  78. <span class="course-completepr">99%</span>
  79. </div>
  80. </div>
  81. </div>
  82. </div>

样式:样式用了lang=”scss”,可以写层级

  1. .labroom-level-item {
  2. margin-top: 20px;
  3. .labroom-level-title {
  4. background: #F5F9FF;
  5. height: 45px;
  6. line-height: 45px;
  7. padding: 0 20px;
  8. font-size: 16px;
  9. font-family: MicrosoftYaHei-, MicrosoftYaHei;
  10. font-weight: normal;
  11. }
  12. .labroom-level-box {
  13. border: 1px solid #EAEEF0;
  14. border-top: none;
  15. padding-top: 10px;
  16. padding-bottom: 20px;
  17. min-height: 20px;
  18. display: flex;
  19. flex-wrap: wrap;
  20. padding-left: 13px;
  21. }
  22. .labroom-level-box-course {
  23. // 直接让宽度为33.33%就可以每行显示3快了
  24. width: 33.33%;
  25. margin-top: 10px;
  26. .course-name {
  27. color: #333339;
  28. font-size: 14px;
  29. font-family: MicrosoftYaHei-, MicrosoftYaHei;
  30. }
  31. }
  32. }
  33. // 优秀时候的字体颜色与字体颜色
  34. .labroom-level-excellent {
  35. color: #3E91F7;
  36. .labroom-level-title {
  37. background: #F5F9FF;
  38. }
  39. }
  40. // 及格时候的字体颜色与背景颜色
  41. .labroom-level-middle {
  42. color: #F19537;
  43. .labroom-level-title {
  44. background: #FFF9F0;
  45. }
  46. }
  47. // 不及格时候的字体颜色与背景颜色
  48. .labroom-level-poor {
  49. color: #E57470;
  50. .labroom-level-title {
  51. background: #FFF4F4;
  52. }
  53. }

小屏下一行显示4个,中屏下一行显示5个,大屏下一行显示6个

其实和上面那种类似,在上面的基础上做一个屏幕适配就行了,在多大的分辨率下单独设置一下就行了

  1. // 小屏下一行显示4个
  2. @media screen and (min-width:100px) {
  3. .menuItem {
  4. width: 25%;
  5. margin-bottom: 20px;
  6. }
  7. }
  8. // 中屏一行显示5个 写到下面会覆盖掉上面的样式
  9. @media screen and (min-width:1366px) {
  10. .menuItem {
  11. width: 20%;
  12. margin-bottom: 20px;
  13. }
  14. }
  15. // 大屏一行显示6个。写到下面会覆盖掉上面的样式
  16. @media screen and (min-width:1799px) {
  17. .menuItem {
  18. width: 16.66%;
  19. margin-bottom: 20px;
  20. }
  21. }

贴一下完整一点的代码吧

  1. <template>
  2. <div class="my-app-container">
  3. <div class="content">
  4. <el-card v-if="schoolList.length > 0" class="box-card mymenucard">
  5. <div slot="header" class="clearfix">
  6. <span>教学看板</span>
  7. </div>
  8. <div class="menuItemWrap">
  9. <div v-for="(item, index) in schoolList" :key="index" class="menuItem"
  10. @click="jumpSchool(item.schoolID)">
  11. <div class="menuItemImg" />
  12. <div class="menuItemDesc">{{ item.schoolName }}</div>
  13. </div>
  14. </div>
  15. </el-card>
  16. </div>
  17. </div>
  18. </template>
  19. <script>
  20. import { mapGetters } from 'vuex'
  21. export default {
  22. // 组件名字
  23. name: 'ApplicationCenter',
  24. data() {
  25. return {
  26. schoolList: [],
  27. permission_routes_show: []
  28. }
  29. },
  30. mounted() {
  31. this.getSchoolListByTeacher()
  32. this.handlerMenus()
  33. },
  34. computed: {
  35. ...mapGetters([
  36. 'permission_routes'
  37. ])
  38. },
  39. // 组件方法
  40. methods: {
  41. }
  42. }
  43. </script>
  44. <style scoped="scoped" lang="scss">
  45. .my-app-container {
  46. padding-left: 20px;
  47. padding-right: 20px;
  48. background: #F8F8F8;
  49. .content {
  50. // margin-top: 20px;
  51. .mymenucard {
  52. margin-top: 20px;
  53. margin-bottom: 20px;
  54. }
  55. .menuItemWrap {
  56. display: flex;
  57. flex-wrap: wrap;
  58. // justify-content: space-between;
  59. }
  60. .menuItem {
  61. font-size: 14px;
  62. display: flex;
  63. cursor: pointer;
  64. // background-color: #ffabcd;
  65. .menuItemImg {
  66. height: 43px;
  67. width: 43px;
  68. // background-image: url('~@/assets/imgs/applicationCenter/applicationCenter1.png');
  69. background-size: cover;
  70. }
  71. .menuItemImgBasic {
  72. height: 43px;
  73. width: 43px;
  74. background-size: cover;
  75. }
  76. .menuItemDesc {
  77. height: 43px;
  78. line-height: 43px;
  79. margin-left: 9px;
  80. overflow: hidden;
  81. text-overflow: ellipsis;
  82. white-space: nowrap;
  83. }
  84. }
  85. // 没有图标的循环换一下图标
  86. .menuItem:nth-child(6n-1) {
  87. .menuItemImg {
  88. background-image: url('~@/assets/imgs/applicationCenter/applicationCenter5.png');
  89. }
  90. }
  91. .menuItem:nth-child(6n-2) {
  92. .menuItemImg {
  93. background-image: url('~@/assets/imgs/applicationCenter/applicationCenter4.png');
  94. }
  95. }
  96. .menuItem:nth-child(6n-3) {
  97. .menuItemImg {
  98. background-image: url('~@/assets/imgs/applicationCenter/applicationCenter3.png');
  99. }
  100. }
  101. .menuItem:nth-child(6n-4) {
  102. .menuItemImg {
  103. background-image: url('~@/assets/imgs/applicationCenter/applicationCenter2.png');
  104. }
  105. }
  106. .menuItem:nth-child(6n-5) {
  107. .menuItemImg {
  108. background-image: url('~@/assets/imgs/applicationCenter/applicationCenter1.png');
  109. }
  110. }
  111. .menuItem:nth-child(6n) {
  112. .menuItemImg {
  113. background-image: url('~@/assets/imgs/applicationCenter/applicationCenter6.png');
  114. }
  115. }
  116. // 小屏下一行显示4个
  117. @media screen and (min-width:100px) {
  118. .menuItem {
  119. width: 25%;
  120. margin-bottom: 20px;
  121. }
  122. }
  123. // 中屏一行显示5个 写到下面会覆盖掉上面的样式
  124. @media screen and (min-width:1500px) {
  125. .menuItem {
  126. width: 20%;
  127. margin-bottom: 20px;
  128. }
  129. }
  130. // 大屏一行显示6个。写到下面会覆盖掉上面的样式
  131. @media screen and (min-width:1799px) {
  132. .menuItem {
  133. width: 16.66%;
  134. margin-bottom: 20px;
  135. }
  136. }
  137. }
  138. }
  139. </style>

flex 实现每行4个(带格子方块的),自适应排列

上面的实现方法一般主要适用里边都是文字的情况,但是我要显示类似这种一块一块的效果,就不太适用了,比如下面的效果

实现如下

  1. <template>
  2. <div class="app-container">
  3. <div class="shcoolItem">重庆应用职业技术学院</div>
  4. <div class="shcoolItem">重庆应用职业技术学院</div>
  5. <div class="shcoolItem">重庆应用职业技术学院</div>
  6. <div class="shcoolItem">重庆应用职业技术学院</div>
  7. <div class="shcoolItem">重庆应用职业技术学院</div>
  8. <div class="shcoolItem">重庆应用职业技术学院</div>
  9. <div class="shcoolItem">重庆应用职业技术学院</div>
  10. </div>
  11. </template>
  12. <script>
  13. export default {
  14. // 组件名字
  15. name: 'SchoolChangeDialog',
  16. // 组件参数
  17. props: {
  18. percentage: {
  19. type: Number,
  20. default: 0
  21. },
  22. title: {
  23. type: String,
  24. default: ''
  25. },
  26. },
  27. data() {
  28. return {
  29. }
  30. },
  31. mounted() {
  32. },
  33. // 组件方法
  34. methods: {
  35. }
  36. }
  37. </script>
  38. <style scoped="scoped" lang="scss">
  39. .app-container {
  40. margin-top: 20px;
  41. margin-bottom: 100px;
  42. padding-left: 10px;
  43. padding-right: 10px;
  44. display: flex;
  45. flex-wrap: wrap;
  46. justify-content: space-between;
  47. .shcoolItem {
  48. // width: 240px;
  49. height: 46px;
  50. background: rgba(0, 150, 255, 0.15);
  51. border: 1px solid #0E66A1;
  52. border-radius: 4px;
  53. font-size: 16px;
  54. font-family: Microsoft YaHei;
  55. font-weight: 400;
  56. color: #FFFFFF;
  57. text-align: center;
  58. line-height: 46px;
  59. // 这里如果某些情况下有问题,比如百分比不是相对于父级而是整个页面了,可以调整为width:23%试试
  60. flex: 0 0 23%;
  61. /* 动态计算间距 */
  62. margin-right: calc(8% / 3);
  63. // margin-bottom: calc(5% / 3);
  64. margin-bottom: 20px
  65. }
  66. /* 去除每行尾的多余边距 */
  67. .shcoolItem:nth-child(4n) {
  68. margin-right: 0;
  69. }
  70. /* 使最后一个元素的边距填满剩余空间 */
  71. .shcoolItem:last-child {
  72. margin-right: auto;
  73. }
  74. }
  75. </style>

父容器主要的样式就是

  1. display: flex;
  2. flex-wrap: wrap;
  3. justify-content: space-between;

这个没什么好说的

子元素主要的样式就是

  1. .shcoolItem {
  2. flex: 0 0 23%;
  3. /* 动态计算间距 */
  4. margin-right: calc(8% / 3);
  5. // margin-bottom: calc(5% / 3);
  6. margin-bottom: 20px
  7. }
  8. /* 去除每行尾的多余边距 */
  9. .shcoolItem:nth-child(4n) {
  10. margin-right: 0;
  11. }
  12. /* 使最后一个元素的边距填满剩余空间 */
  13. .shcoolItem:last-child {
  14. margin-right: auto;
  15. }

其中的flex: 0 0 23%,表示每个子元素占宽度的23%。

其中的margin-right: calc(8% / 3),表示每块右边距离是8%除以3。为什么是8%呢,因为每块是23%,4块就是92%,还剩下8%的宽度,让他们之间均分,就是8%/3了,至于为什么不是除以4因为4个元素中间是3块空白。如果每块占用的宽度是24,flex: 0 0 24%,那么间距的计算就不是8%/3,而是4%/3,因为每块占24%,4块就是96%了,就还剩4%来做他们之间的间距了。

其实感觉使用上面文字的那种实现方法也可以
文字的宽度其实不是固定的应该是文字有多宽块块就有多宽,但是为了让一行固定显示几个就固定一下宽度,比如一个块的宽度是25%那么就是一行显示4个,其实宽度固定实现起来还要方便一些,比如下面这种情况一行固定显示4个还要有点间距,我们其实可以这样。
每块的宽度设置成23%,或者是24%都可以,然后在设置一下:

  1. justify-content: space-between

它就会自动分配剩下的空间给每块之间的间隔了,感觉实现起来比刚刚上面提到的方法还简单很多,就设置一下宽度和justify-content即可。

flex 实现每行3个(带格子方块的),自适应排列


和上面那个实现方法一样,用的时候方便直接复制。

设计图(选中的效果请忽略,主要是每行三个的布局):

标签:

  1. <view class="completeInfo">
  2. <view class="completeItem" v-for="(item, index) in 17" :key="index">张三三</view>
  3. </view>

样式:

  1. .completeInfo {
  2. background-color: #fff;
  3. display: flex;
  4. flex-wrap: wrap;
  5. justify-content: space-between;
  6. .completeItem {
  7. flex: 0 0 31%;
  8. /* 动态计算间距,除以2是因为3个元素中间只有2个缝隙 */
  9. margin-right: calc(7% / 2);
  10. margin-bottom: 15rpx;
  11. height: 65rpx;
  12. background: #F6F6F6;
  13. font-size: 26rpx;
  14. color: #313960;
  15. text-align: center;
  16. line-height: 65rpx;
  17. }
  18. /* 去除每行尾的多余边距 */
  19. .completeItem:nth-child(3n) {
  20. margin-right: 0;
  21. }
  22. /* 使最后一个元素的边距填满剩余空间 */
  23. .completeItem:last-child {
  24. margin-right: auto;
  25. }
  26. }

flex 实现图片一行显示4个,自适应排列


和上面那两个实现方法逻辑一样的

效果图:

标签:

  1. <view class="image-content">
  2. <image class="imgitem" @click="previewImg(0)" mode="scaleToFill"
  3. src="https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg">
  4. </image>
  5. <image class="imgitem" @click="previewImg(1)"
  6. src="https://fuss10.elemecdn.com/0/6f/e35ff375812e6b0020b6b4e8f9583jpeg.jpeg">
  7. </image>
  8. <image class="imgitem" @click="previewImg(2)"
  9. src="https://fuss10.elemecdn.com/d/e6/c4d93a3805b3ce3f323f7974e6f78jpeg.jpeg">
  10. </image>
  11. <image class="imgitem" @click="previewImg(3)"
  12. src="https://fuss10.elemecdn.com/3/28/bbf893f792f03a54408b3b7a7ebf0jpeg.jpeg">
  13. </image>
  14. <image class="imgitem" @click="previewImg(4)"
  15. src="https://fuss10.elemecdn.com/2/11/6535bcfb26e4c79b48ddde44f4b6fjpeg.jpeg">
  16. </image>
  17. <image class="imgitem" @click="previewImg(5)"
  18. src="https://fuss10.elemecdn.com/9/bb/e27858e973f5d7d3904835f46abbdjpeg.jpeg">
  19. </image>
  20. </view>

样式:

  1. .image-content {
  2. margin-top: 10px;
  3. display: flex;
  4. flex-wrap: wrap;
  5. justify-content: space-between;
  6. .imgitem {
  7. flex: 0 0 23%;
  8. /* 动态计算间距 */
  9. margin-right: calc(8% / 3);
  10. margin-bottom: 15rpx;
  11. height: 200rpx;
  12. background: #F6F6F6;
  13. border-radius: 0px 0px 0px 0px;
  14. opacity: 1;
  15. }
  16. /* 去除每行尾的多余边距 */
  17. .imgitem:nth-child(4n) {
  18. margin-right: 0;
  19. }
  20. /* 使最后一个元素的边距填满剩余空间 */
  21. .imgitem:last-child {
  22. margin-right: auto;
  23. }
  24. }

如果一行显示的数量不固定,控制不同分辨率下显示不同的个数

参考:https://www.tnblog.net/aojiancc2/article/details/8176

其实多列多行的情况,使用grid布局会更好实现一点,grid布局是真正的二维布局


grid布局的使用记录,可参考考:https://www.tnblog.net/aojiancc2/article/details/8231


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

css弹性盒子<font color='#ff5555'>,5555'>flex布局

css弹性盒子由于版本不同浏览器问题造成了一些不同的写法display:flexbox;在google浏览器中如果使用下面的写法就不行displa...

<font color='#ff5555'>flex布局常见问题

flex布局中内容div自适应高度&lt;divclass=&quot;content&quot;&gt; &lt;divclass=&quot;text-center&quot;style=&quot;...

<font color='#ff5555'>flex好看的相册

先让大家看看效果图吧:需要引入外来插件:https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.1.0/jquery.magni...

一点<font color='#ff5555'>flex布局的运用

水平分割:html:&lt;divclass=&quot;flex-container&quot;&gt; &lt;divclass=&quot;flex-item&quot;&gt;flexitem1&lt;/div...

css div水平居 <font color='#ff5555'>。文字垂直居中 5555'>。5555'>flex的方式实现div的垂直与水平居中5555'>。布局5555'>模板

DIV等元素水平居中定宽度+margin:top auto可以让一个块级别元素在外层居中例如这样:效果:可以看到这个div已经居中了但是...

uni-app 基础view<font color='#ff5555'>,5555'>flex布局使用

代码如下: &lt;template&gt; &lt;view &gt; &lt;view style=&quot;display: flex;flex-direction:row-reve...

<font color='#ff5555'>flex布局多行自适应间隔

//父盒子,设置为: .templateItem { width: 100%; text-align: center; display: flex; align-content: fl...

css实现左边div固定宽度<font color='#ff5555'>,右边div自适应撑满剩下的宽度5555'>。左边定宽5555'>,左边固定5555'>,右边自适应5555'>。5555'>flex 占剩下的宽度

这是一道面试题,你有多少种办法呢?这里我们假设左边名为 left,宽度为 200 px,右边名为 right。即默认 .left { widt...

<font color='#ff5555'>flex子元素靠右5555'>。5555'>flex让某5555'>个子元素靠右或靠左显示

以下以块元素的Flex布局为示例:只需要两句代码,轻松搞定! 代码1:在父元素里面加入以下代码:(父盒子加了display: fle...

<font color='#ff5555'>flex平分宽度5555'>。5555'>flex宽度自适应5555'>,均分宽度

html: &lt;div class=&quot;parent&quot;&gt; &lt;div class=&quot;item&quot;&gt; 测试1 &lt;/div&g...

vue布局<font color='#ff5555'>模板5555'>,前端布局5555'>模板5555'>,5555'>flex布局应用

设计图效果: 代码: &lt;!-- 学习活跃度 --&gt; &lt;template&gt; &lt;div class=&quot;learnActivityContainer&q...

<font color='#ff5555'>flex布局5555'>一行显示多5555'>个5555'>。5555'>flex布局固定显示n5555'>个5555'>,自适应布局

在前端开发的时候,对页面布局的时候,经常遇到固定的一行显示多个,这个经常遇到,所以我想做个记录,等到下次遇到的时候...

<font color='#ff5555'>flex 5555'>flex-gorw不等分的问题

flex flex-gorw不等分的问题今天在练习flex 栅格布局的时候, 明明设置了项目元素都是flex-gorw:1;但是发现有个地方 ,因为...

<font color='#ff5555'>flex实现5555'>一行显示n5555'>个数量的布局5555'>,不同屏幕宽度下显示不同的数量5555'>,自适应5555'>一行显示的5555'>个数

[TOC]要实现的效果如下: 其实原理也非常简单,父元素主要是主要就是设置一个flex布局,然后flex-wrap设置为需要换行 .app...