效果:

原理:

1.利用css的自定义变量以及var函数

2.css里0除以0的结果是null,而且css运算式中只要出现null的结果就一定是null

缺点:

1.给定网格之间的间隙大小=m时,头尾的网格和中间的网格尺寸差1/4m(如果等分数为3,那么会差1/2m)

2.本人是在vue项目里使用,很方便,当然我还是更推荐使用第三方网格插件

3.兼容性未知

CSS:

<!-- 父元素 -->
.qiuGrid {position: relative;<!-- 父元素默认3行3列,间隔15px,通过style属性修改 -->--num-w: 3;--num-h: 3;--pad-around: 15px;
}
<!-- 子元素 -->
.qiuGrid .grid-each {<!-- 改子元素占用的左上点和右下点位置 -->--pos1-x: 0;--pos1-y: 0;--pos2-x: 1;--pos2-y: 0;position: absolute;left: calc(100% / var(--num-w) * var(--pos1-x));top: calc(100% / var(--num-h) * var(--pos1-y));width: calc(100% / var(--num-w) * (var(--pos2-x) - var(--pos1-x) + 1));height: calc(100% / var(--num-h) * (var(--pos2-y) - var(--pos1-y) + 1));box-sizing: border-box;padding-left: calc((var(--pos1-x) / var(--pos1-x)) * (var(--pad-around) / 2));padding-top: calc((var(--pos1-y) / var(--pos1-y)) * (var(--pad-around) / 2));padding-right: calc(((var(--num-w) - 1 - var(--pos2-x)) / (var(--num-w) - 1 - var(--pos2-x))) * (var(--pad-around) / 2));padding-bottom: calc(((var(--num-h) - 1 - var(--pos2-y)) / (var(--num-h) - 1 - var(--pos2-y))) * (var(--pad-around) / 2));
}

使用例子:

下面的代码关心带qiuGrid的父元素和带grid-each的子元素就好了
顺嘴一提,下面这几个是为了在不同尺寸的电脑上不至于发生宽高比变化给的样式:
    --ratio: 设置盒子宽高比
    qiu-fix-ratio-shell:固定盒子宽高比的父盒子样式
    qiu-fix-ratio-box:固定盒子宽高比的子盒子样式

<!-- 下面的代码关心带qiuGrid的父元素和带grid-each的子元素就好了 -->
<!-- --ratio: 设置盒子宽高比qiu-fix-ratio-shell:固定盒子宽高比的父盒子样式qiu-fix-ratio-box:固定盒子宽高比的子盒子样式-->
<template><div class="box"><div class="page-w"><div class="head"><Header></Header></div><div class="main"><div :style="{'--ratio': 2/5}" class="col qiu-fix-ratio-shell"><div class="qiu-fix-ratio-box"><div class="list qiuGrid" :style="displaySize"><div :style="setPosStyle(displayLine1)[0]" class="item grid-each classification"><div class="item-box"><div class="classification-list no-scrollbar"><div :class="{'active':activeIndex==index}" @click="activeIndex=index" v-for="(site,index) in classificationList" class="classification-item">{{site}}</div></div></div></div><div v-if="activeIndex>=0" :style="setPosStyle(displayLine1)[n]" class="item grid-each" v-for="n in 5"><router-link tag="div" :to="{ name: 'ProductDetail' }" class="item-box"><img class="image" src="../Home/image/test_product.png" alt=""></router-link></div><div v-if="activeIndex<0" :style="setPosStyle(displayLine1_adv)[1]" class="item grid-each"><router-link tag="div" :to="{ name: 'ProductDetail' }" class="item-box"><img class="image" src="../Home/image/test_product.png" alt=""></router-link></div></div></div></div><div v-for="n in 3" :style="{'--ratio': 2/5}" class="col qiu-fix-ratio-shell"><div class="qiu-fix-ratio-box"><div class="list qiuGrid" :style="displaySize"><div :style="setPosStyle(displayLine2[n%2])[m-1]" class="item grid-each" v-for="m in 7"><router-link tag="div" :to="{ name: 'ProductDetail' }" class="item-box"><img class="image" src="../Home/image/test_product.png" alt=""></router-link></div></div></div></div></div></div></div>
</template><!-- 邱的私用样式 -->
<style scoped src="@/assets/styles/qiu.css"></style>
<script>export default {data () {return {//网格划分displaySize: {'--num-w':5,'--num-h':2,'--pad-around': '30px'},//显示广告的布局displayLine1_adv: [[0,0,0,1],[1,0,4,1]],//不显示广告的布局displayLine1: [[0,0,0,1],[1,0,1,0],[2,0,2,0],[1,1,1,1],[2,1,2,1],[3,0,4,1],],//第二行开始的布局displayLine2: [[[0,0,0,0],[0,1,0,1],[1,0,1,0],[1,1,1,1],[2,0,2,0],[2,1,2,1],[3,0,4,1],],[[0,0,1,1],[2,0,2,0],[2,1,2,1],[3,0,3,0],[4,0,4,0],[3,1,3,1],[4,1,4,1],]],//是否选中了分类classificationList: ["米食","雜糧","乾貨","麵食","飲品/沖泡","休閒食品","食材醬料","茶","低溫生鮮",],}}}
</script><style lang="less" scoped>
.main {.col {margin-bottom: 30px;.list {width: 100%;height: 100%;.item-box {height: 100%;background-color: #fff;box-sizing: border-box;border-radius: 10px;overflow: hidden;cursor: pointer;.image {width: 100%;height: 100%;object-fit: cover;}}.classification {.item-box {border-radius: 3px;padding: 20px 0px;box-sizing: border-box;.classification-list {height: 100%;overflow: auto;.classification-item {padding: 0px 20px;font-size: 25px;line-height: 50px;color: #000;cursor: pointer;box-sizing: border-box;}.classification-item.active,.classification-item:hover {background-color: rgba(153,221,211,0.5);}}}}}}
}
</style>

优点:

仅仅提供一个css使用的新思路,特别是远离里的第2点,我是觉得挺好用的。

为什么不用弹性盒子:

主要看上面的效果图,用弹性盒子实现的话,我需要再加一层子盒子(父+子+子)(ps:可能是我水平不够,想不到啥更好的方法),在第三层添加padding属性来实现间距。但是头尾的padding值还是不一样,也就是还是要通过上面的原理2来实现。

当然,如果只是等分并固定死了子盒子的大小,那当我没说,弹性盒子还是好用的很。

PS:

1.还是推荐使用第三方的网格插件,虽然我没用过,但是总比我这好。

2.如果觉得我的这方案太麻烦了,有啥好方法的,麻烦私信或评论告诉我,么么哒

vue项目里的简易的网格样式相关推荐

  1. jq的插件 vue中引用_详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件

    本篇文章主要介绍了详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件,具有一定的参考价值,有兴趣的可以了解一下 使用vue-cli构建的vue项目,webpack的配置文 ...

  2. Vue项目里Websocket的使用

    由于项目需求有要使用长链接,我们普通的http请求如果用轮询的方式与服务端通讯就很消耗资源.我们一起来学习一下在vue项目里如何使用websocket,本文纯属个人观点,如果有不正确的地方请大家批评指 ...

  3. 网易七鱼客服对接记录以及Vue项目里使用

    网易七鱼客服对接记录 之前是腾讯客服,因为业务关系,变更到七鱼,所以在这里记录一下 1.第一步 去http://help.qiyukf.com/官方注册一个账号 2第二步 找到自己需要的业务,我的是现 ...

  4. VUE项目里返回按钮的处理(各个分页有返回按钮,首页没有)

    VUE项目中   返回按钮 的处理, 各个分页有返回按钮,首页没有. 主要代码: <mt-header fixed title="黑马程序员·Vue项目">       ...

  5. vue项目,引入插件element ui 样式不生效

    用vue ui 命令 引入插件 element ui 样式不生效 步骤一:执行如下命令,安装babel-plugin-component npm install babel-plugin-compon ...

  6. Vue项目里引入Muse-UI

    一.在电脑中装好了node和vue的环境 二.下载纯净的Vue项目 1.在指定文件夹中输入指令:vue init webpack (自定义的项目名称): 2.然后根据提示,一路回车. 注意:Use E ...

  7. 应用在vue项目里的axios使用方法

    1.首先要安装axios,在你项目目录下安装axios.在命令行里输入:npm install axios: 2.然后要在main.js的入口文件里引入以下代码: ​ ​ import axios f ...

  8. 【Vue】16.vue项目里引入百度统计

    参考官网:百度统计开放平台 百度统计 最近往项目里面引入百度统计,也是在网上查了各种资料,把百度统计的官网api又好好的看了一下,顺着文档的步骤,一步一步走下来,其实还蛮简单的,首先先在百度统计注册一 ...

  9. vue项目中使用组件库设置样式不生效的解决方法

    scoped 实现原理 实现组件的私有化,不对全局造成样式污染 ,我们使用scoped 作用:声明的样式只对当前组件生效 <style lang="less" scoped& ...

  10. vue项目里手动写一个走马灯效果

    我们知道elementUI里有个走马灯的组件,如下图,每隔指定的时间,就可以实现轮播切换 现在项目需求是顶部的派出所和下面的警务人员名单都是后端接口返回的数据,然后派出所是个可以单击选中且有走马灯效果 ...

最新文章

  1. mysql parametertype_MyBatis传入参数与parameterType
  2. 目标检测优化2021
  3. 探索ElasticSearch(一)
  4. 给采购凭证分配合作伙伴方案
  5. [SCOI2012] 喵星球上的点名
  6. java erlang_Java开发人员的Erlang
  7. Linux 删除指定目录下的文件/删除文件
  8. 【渝粤教育】 广东开放大学 10548_金融学k1_21秋考试
  9. flash中物体运动基础之七---------碰撞处理
  10. 手把手教你快速构建自定义分类器
  11. 个人博客成长分析(一)
  12. 如何把手机证件照压缩到15KB?手机压缩图片方法
  13. 闭环控制步进电机对比传统开环控制的优点
  14. HDLBITS笔记15:组合逻辑之7420芯片
  15. Java-TCP通信(实现多发多收、群聊功能),BS通信源码
  16. 120年奥运历史数据分析
  17. post_thumbnail_html,使用WordPress函数the_post_thumbnail_url()获取特色图片缩略图URL
  18. python如果获取windows管理员权限(二)
  19. APK安装失败的原因之一
  20. 使用Typora书写甘特图

热门文章

  1. 如何构建集团母子公司集权式财务管理体制
  2. SE11表激活警告——Enhancement category for table missing
  3. 【vue-cli3源码解析】02_vue create命令
  4. Hive一条SQL使用随机值创建测试表一百万条数据
  5. mysql sum 对应_使用MySQL SUM()查找总和并为列标题提供别名
  6. splunk-(UF)通用转发器
  7. 电影推荐之《 哈利波特与密室》 隐私策略(Privacy policy)
  8. 掌财社乐学堂:一字线是什么?​一字线操作策略介绍
  9. 解决Chrome谷歌浏览器访问网页过慢问题~
  10. oracle将奖金和工资相加,工资和年终奖一起发,是应该分别计税再相加,还是直接相加再一起按奖金计税?...