004 封装表格样式模块

前言

之前咱们是已经封装了一个随机模块, 在这个随机模块中能够生成随机的用户信息, 并没有被用起来.

另外咱们还有一个想法, 那就是单独封装一个表格相关的样式模块, 也还没有实现.

所以,咱们继续开搞.

使用生成的随机用户数据

首先, 修改一下App.vue获取用户数据的逻辑, 使用随机数据.

arduino 复制代码
import random from "./zdpui/js/random.js";

let users = ref(random.users(8))

此时我们可以发现, 代码少了非常多, 然后去界面看看效果.

在这里插入图片描述

效果也非常的不错, 数据非常的真实.

此时App.vue完整代码如下:

xml 复制代码
<script setup>
import {onMounted, ref} from "vue";
import random from "./zdpui/js/random.js";

let users = ref(random.users(8))
</script>
<template>
  <div>
    <table>
      <thead>
      <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>年龄</th>
      </tr>
      </thead>
      <tbody>
      <tr v-for="(user, index) in users" :key="user.id">
        <td>{{ index + 1 }}</td>
        <td>{{ user.name }}</td>
        <td>{{ user.age }}</td>
      </tr>
      </tbody>
    </table>
  </div>
</template>

<style scoped>
table {
  border-collapse: collapse;
  width: 100%;
  margin: 20px 0;
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
  border-radius: 8px;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}

thead {
  background: linear-gradient(to right, #00c6ff, #0072ff);
  color: white;
}

th {
  text-transform: uppercase;
  letter-spacing: 1px;
  padding: 12px;
  text-align: left;
}

tbody tr:nth-child(even) {
  background-color: #f3f4f6;
}

tbody tr:hover {
  background-color: #e5e7eb;
  transition: background-color 0.3s;
}

tbody td {
  padding: 12px;
  text-align: left;
  border-top: 1px solid #e5e7eb;
}

th, td {
  vertical-align: middle;
}
</style>

表格样式调整

为了便于封装统一的样式, 我们给这个表格样式取个名字, 就叫table1吧, 简单点, 意思就是我们的第一套表格样式.

我是取名鬼才,大家有想法的可以留言哈...

先个table加上样式:

ini 复制代码
<table class="table1">

然后在之前的所有样式前面加上一个层级, 表示是属于 table1 下面的样式:

css 复制代码
table.table1 {
  border-collapse: collapse;
  width: 100%;
  margin: 20px 0;
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
  border-radius: 8px;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}

.table1 thead {
  background: linear-gradient(to right, #00c6ff, #0072ff);
  color: white;
}

.table1 th {
  text-transform: uppercase;
  letter-spacing: 1px;
  padding: 12px;
  text-align: left;
}

.table1 tbody tr:nth-child(even) {
  background-color: #f3f4f6;
}

.table1 tbody tr:hover {
  background-color: #e5e7eb;
  transition: background-color 0.3s;
}

.table1 tbody td {
  padding: 12px;
  text-align: left;
  border-top: 1px solid #e5e7eb;
}

.table1 th,
.table1 td {
  vertical-align: middle;
}

此时刷新页面, 确保样式没有变化:

在这里插入图片描述

封装表格样式模块

接下来, 我们就可以把这个样式代码抽离出来, 放到一个单独的css文件中了.

css 复制代码
/*表格样式1开始*/
table.table1 {
  border-collapse: collapse;
  width: 100%;
  margin: 20px 0;
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
  border-radius: 8px;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}

.table1 thead {
  background: linear-gradient(to right, #00c6ff, #0072ff);
  color: white;
}

.table1 th {
  text-transform: uppercase;
  letter-spacing: 1px;
  padding: 12px;
  text-align: left;
}

.table1 tbody tr:nth-child(even) {
  background-color: #f3f4f6;
}

.table1 tbody tr:hover {
  background-color: #e5e7eb;
  transition: background-color 0.3s;
}

.table1 tbody td {
  padding: 12px;
  text-align: left;
  border-top: 1px solid #e5e7eb;
}

.table1 th,
.table1 td {
  vertical-align: middle;
}

/*表格样式1结束*/

此时, 我的项目结构是下面这样的:

在这里插入图片描述

使用封装的样式

接着我们回到App.vue, 只需要简单的引入css样式文件就行了.

arduino 复制代码
import "./zdpui/css/table.css";

此时App.vue的完整代码如下:

xml 复制代码
<script setup>
import {onMounted, ref} from "vue";
import random from "./zdpui/js/random.js";
import "./zdpui/css/table.css";

let users = ref(random.users(8))
</script>
<template>
  <div>
    <table class="table1">
      <thead>
      <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>年龄</th>
      </tr>
      </thead>
      <tbody>
      <tr v-for="(user, index) in users" :key="user.id">
        <td>{{ index + 1 }}</td>
        <td>{{ user.name }}</td>
        <td>{{ user.age }}</td>
      </tr>
      </tbody>
    </table>
  </div>
</template>

刷新浏览器, 可以发现, 整体样式还是没有变化:

在这里插入图片描述

说明我们封装得比较成功.

总结

到目前为止, 我们就把之前的两个想法实现了, 完美, 可惜我不喝酒, 不然和大家喝酒庆祝一下!!!

至少我自己是比较开心的, 虽然简单, 但是我封装了自己的第一个样式文件, 第一个js文件, 后面可以不断的复用, 而且是没有任何第三方依赖的, 非常的舒服.

这比较符合我自己的预期啊.

接下来, 就是将html代码封装为组件了.

我们需要将html代码封装到一个组件中,就是我们的表格组件, 这个组件接收我们传入的表格内容数据和表头数据, 进行渲染.

期待我们能尽快实现这个目标.

相关推荐
answerball2 小时前
🔥 Vue3响应式源码深度解剖:从Proxy魔法到依赖收集,手把手教你造轮子!🚀
前端·响应式设计·响应式编程
Slow菜鸟3 小时前
ES5 vs ES6:JavaScript 演进之路
前端·javascript·es6
小冯的编程学习之路3 小时前
【前端基础】:HTML
前端·css·前端框架·html·postman
Jiaberrr5 小时前
Vue 3 中搭建菜单权限配置界面的详细指南
前端·javascript·vue.js·elementui
科科是我嗷~5 小时前
【uniapp】textarea maxlength字数计算不准确的问题
javascript·uni-app·html
懒大王95275 小时前
uniapp+Vue3 组件之间的传值方法
前端·javascript·uni-app
烛阴5 小时前
秒懂 JSON:JavaScript JSON 方法详解,让你轻松驾驭数据交互!
前端·javascript
拉不动的猪6 小时前
刷刷题31(vue实际项目问题)
前端·javascript·面试
zeijiershuai6 小时前
Ajax-入门、axios请求方式、async、await、Vue生命周期
前端·javascript·ajax
恋猫de小郭6 小时前
Flutter 小技巧之通过 MediaQuery 优化 App 性能
android·前端·flutter