首页 > 其他分享 >css grid布局实现一个复杂表格

css grid布局实现一个复杂表格

时间:2024-08-29 14:23:38浏览次数:6  
标签:表格 solid start 1px grid f3f4f5 css row

产品设计了这样一个表格,如下图:
在这里插入图片描述
当然表格内容格式是固定的,本来想用element ui的,但是思考了一下,用el-table好像嵌套的比较麻烦,还要合并单元格,所以采用了grid布局。
废话不多说,直接上代码:

<template>
  <div class="table">
    <!-- 表头1 -->
    <div class="th">类型名称</div>
    <div class="th">类型</div>
    <div class="th">标签</div>
    <div class="th">标签编码</div>
    <div class="th">标准定额(元/吨)</div>
    <div class="td td-9">a</div>
    <!-- 一行 -->
    <div class="td td-2">a</div>
    <div class="td">b</div>
    <div class="td">BHGZ</div>
    <div class="td">
      <el-input></el-input>
    </div>
    <!-- 一行 -->
    <div class="td">c</div>
    <div class="td">BHGL</div>
    <div class="td">
      <el-input></el-input>
    </div>
    <!-- 表头2 -->
    <div class="th">
      <div>条件层级</div>
      <div>条件类型</div>
    </div>
    <div class="th">标签</div>
    <div class="th">编码</div>
    <div class="th">浮动金额(±xx/元)</div>
    <!-- 一行 -->
    <div class="td">
      <div>a</div>
      <div>对接</div>
    </div>
    <div class="td">主体对接</div>
    <div class="td">ZTDJ</div>
    <div class="td">
      <el-input></el-input>
    </div>
    <!-- 一行 -->
    <div class="td td-3">
      <div>二级</div>
      <div>重量占比</div>
    </div>
    <div class="td" v-text="'占比≥10%,<20%'"></div>
    <div class="td">LJZB1</div>
    <div class="td">
      <el-input></el-input>
    </div>
    <!-- 一行 -->
    <div class="td" v-text="'占比≥20%,<30%'"></div>
    <div class="td">LJZB2</div>
    <div class="td">
      <el-input></el-input>
    </div>
    <!-- 一行 -->
    <div class="td" v-text="'占比≥30'"></div>
    <div class="td">LJZB3</div>
    <div class="td">
      <el-input></el-input>
    </div>
    <!-- 一行 -->
    <div class="td td-2">
      <div>三级</div>
      <div>张三</div>
    </div>
    <div class="td">mmm</div>
    <div class="td">线</div>
    <div class="td">
      <el-input></el-input>
    </div>
    <!-- 一行 -->
    <div class="td">kkk</div>
    <div class="td">线</div>
    <div class="td">
      <el-input></el-input>
    </div>
  </div>
</template>
<script>
</script>
<style lang="scss" scoped>
.table {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  border-top: 1px solid #f3f4f5;
  border-left: 1px solid #f3f4f5;
  margin-bottom: 16px;
  font-size: 14px;
  grid-auto-rows: 48px; //额外的行高统一
  .td {
    display: flex;
    align-items: center;
    padding: 0 16px;
    border-bottom: 1px solid #f3f4f5;
    border-right: 1px solid #f3f4f5;
    @for $i from 1 through 15 {
      &-#{$i} {
        grid-row-start: span $i;
      }
    }
    > div {
      flex: 1;
      &:last-child {
        padding-left: 16px;
      }
    }
    // &-2 {
    //   grid-row-start: 2;
    //   grid-row-end: 4;
    //   grid-row-start: span 2;
    // }
  }
  .th {
    display: flex;
    align-items: center;
    background: #eff0f2;
    border-bottom: 1px solid #f3f4f5;
    padding: 0 16px;
    > div {
      flex: 1;
    }
  }
}
</style>

就可以实现产品所需的效果了,也庆幸产品的表格是固定的,没有新增删除啥的,要不然真的麻瓜了。。。
上面代码中td-2就代表合同两行,已经配置成动态的了,最多可以写到15行。
这个需求也再次认识了grid中几个新的api:

  1. grid-auto-rows: 48px; //额外的行高统一
    本来是用的grid-template-rows: repeat(13, 48px);但是因为有多个类似表格,行数直接写死的话,不太合适,就发现了这个上面方法,可以替代。
  2. grid-row-start: span 2;
    刚开始合并行是用下面这个代码:
grid-row-start: 2;
grid-row-end: 4;

但是这种写法不能通用,发现上面这个方法更好。
阮易峰老师的grid布局

标签:表格,solid,start,1px,grid,f3f4f5,css,row
From: https://blog.csdn.net/weixin_40451732/article/details/141677560

相关文章

  • 列表与表格
    列表<ol><li>Java</li><li>Java</li><li>Java</li></ol><hr><ul><li>Java</li><li>Java</li><li>Java</li></ul><hr><dl>&l......
  • vue3导入excel表格并展示(使用xlsx插件+vite+element-plus)/js上传表格(js+xlsx)
    第一步:下载两个库npminstallfile-saver--savenpminstallxlsx--save第二步:引入import{saveAs}from'file-saver'import*asXLSXfrom'xlsx'第三步:给组件设置点击事件<el-form-item@click="handleExport">导出</el-for......
  • DevExpress WinForms中文教程:Data Grid - 如何设置条件格式?
    本文介绍DevExpressWinForms中的Excel样式的条件格式设置,您可以了解最终用户可用的特性,了解可用的格式类型以及如何在设计时或在代码中设置条件格式。P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构......
  • vue3导入excel表格并展示(使用xlsx插件+vite+element-plus)/js上传表格(js+xlsx)
    首先下载两个库npminstallxlsx--savenpminstallfile-saver--save然后在你需要导出的组件里引入库import{saveAs}from'file-saver'import*asXLSXfrom'xlsx'创建函数consthandleExport=()=>{letoneDimensionalArray=[]lettwoDimensionalArray......
  • element中表格合并单元格
    最近要写一个如下图的项目,需要合并单元格 <el-table:data="list"borderstyle="width:1000px;":span-method="objectSpanMethod"><el-table-columnalign="center"prop="frist_name":label="list[0].specName&q......
  • 【爬虫实战】——利用bs4和sqlalchemy操作mysql数据库,实现网站多行数据表格爬取数据
    前言此篇接上一篇的内容,在其基础上爬取网站的多行表格数据,以及把数据写入到mysql数据库中目录一、定位表格查找元素二、提取数据三、写入mysql数据库四、附录一、定位表格查找元素首先打开网站,如图需要爬取多行数据的表格,利用查找元素定位,看图中分析得知我要爬取的是tr......
  • CSS (border-radius应用) 笔记 08
      border-radius: n1 n2 n3n4 /a1 a2 a3 a4  【n1-a1,n2-a2,n3-a3,n4-a4 分别表示上右下左顺序边角的椭圆边角,其中n代表水平,a代表垂直】e.g有趣的小水滴动画(应用)<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname=&qu......
  • CSS(样式-定位) 笔记 06
    position:;定位1.static代表静态模式,常态模式2.fixed 代表固定模式特点:不随浏览器的滚动而滚动,释放掉自己原来的空间,参照物是整个浏览器3.absolute代表绝对模式特点:随浏览器的滚动而滚动,释放掉自己原来的空间,参照物是整个浏览器4.relative代表相对位置特点:随浏......
  • html+css编写三级菜单
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>Document</title&g......
  • html+css编写二级菜单
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>Document</title&g......