惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
V
V2EX
aimingoo的专栏
aimingoo的专栏
爱范儿
爱范儿
博客园 - 聂微东
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
Jina AI
Jina AI
T
The Blog of Author Tim Ferriss
月光博客
月光博客
云风的 BLOG
云风的 BLOG

膨胀自留地

使用CloudFlare标记管理功能优雅的使用谷歌分析 四天轻松版北京旅游攻略 Adsense税务居住地证明申请教程:如何申请中国税收居民身份证明以及Google Adsense更新新加坡税务信息教程 常见的 VPS 优化措施 个人网站接入 Google 登录 如何从 GitHub 永久删除泄露的 .env 文件 Cloudflare设置www的域名跳转到不带www的域名 顶级iOS神器!全面解开App Store限制,AssPP Pro保姆级教程 BroadcastChannel将你的 Telegram Channel 转为微博客 Medama开源轻量级网站统计(分析)系统 白嫖一个网站监控面板:uptime-kuma 部署TraffMonetizer利用闲置VPS挂机赚钱 Counterscale-使用CloudflareWorkers部署的免费网站数据统计工具,界面类似umami 封装一个最简单的Axios,避免过度封装! 如何使用Cloudflare Email Routing创建域名邮箱免费发送邮件 使用Cron定时更新Hosts解决Gihub无法访问问题 容器化MariaDB/Mysql实现定时备份 JetBrains全家桶许可证服务器怎么找,JetBrains激活教程 图片加速接口:缓存图片,加速访问,解决防盗链 MySQL模糊查询再也不用like+%了,全文索引介绍及使用简介 为什么这么多人推荐你办理流量卡?流量卡怎么赚钱?怎么避坑? 借助Cloudflare Worker实现Google Analytics反代加速,规避广告屏蔽插件的拦截 etcd入门之在Centos上安装部署 Grafana在linux下安装和基本使用入门 Prometheus介绍、安装和基本功能快速入门 无需加速器,油猴插件解锁xbox云游戏 阿里云盘自动每日签到,无需部署,无需服务器 自定义VSCode终端主题样式 一行 CSS 代码实现响应式布局 – 使用 Grid 实现的响应式布局 加不加「/」?Nginx location 路径与 proxy_pass 的规律
HTML实现table表格移动端自动转为卡片样式
2024-12-23 · via 膨胀自留地

#编程技术 2024-12-23 10:51:00 | 全文 1546 字,阅读约需 4 分钟 | 加载中... 次浏览

👋 相关阅读


现在的网页开发中,响应式设计至关重要,它能够确保网页在不同设备上都能提供良好的用户体验。本文将使用 HTML、CSS 和原生 JavaScript,实现在移动端将 Table 表格自动转变为卡片样式,并且每个卡片都展示表头,从而提升网页在移动端的用户体验和可读性。

实现效果如下,具体样式可以根据实际需求调整:

PC 端 图片alt

移动端 图片alt

一、HTML 结构搭建

首先,创建一个基本的 HTML 页面,在页面中构建一个表格结构。示例代码如下:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>
            Table to Card on Mobile
        </title>
    </head>
    <body>
		<table id="myTable">
		  <thead>
			<tr>
			  <th>姓名</th>
			  <th>年龄</th>
			  <th>职业</th>
			  <th>联系方式</th>
			</tr>
		  </thead>
		  <tbody>
			<tr>
			  <td>张三</td>
			  <td>25</td>
			  <td>程序员</td>
			  <td>138xxxxxxxx</td>
			</tr>
			<tr>
			  <td>李四</td>
			  <td>30</td>
			  <td>设计师</td>
			  <td>139xxxxxxxx</td>
			</tr>
			</tbody>
		</table>
    </body>
</html>

二、CSS 样式设置

在对应的 CSS 样式中,先定义 PC 端表格的正常样式,然后通过媒体查询(@media)针对移动端进行样式调整。

/* PC端表格样式 */
#myTable {
  width: 100%;
  border-collapse: collapse; /* 合并边框 */
}

#myTable th, #myTable td {
  border: 1px solid #ddd;
  padding: 8px;
  text-align: left;
}

/* 移动端卡片样式 */
@media (max-width: 768px) { /* 当屏幕宽度小于等于768px时应用以下样式 */
  #myTable {
	display: block; /* 使表格成为块级元素 */
  }

  #myTable thead {
	display: none; /* 隐藏表头 */
  }

  #myTable tbody tr {
	display: block; /* 使表格行成为块级元素 */
	margin-bottom: 10px; /* 设置卡片间距 */
	border: 1px solid #ddd;
	padding: 10px;
	box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.1); /* 添加阴影效果 */
	border-radius: 5px; /* 添加圆角 */
  }

  #myTable td {
	display: block; /* 使表格单元格成为块级元素 */
	border: none; /* 移除单元格边框 */
	padding: 5px 0;
  }

  /* 使用伪元素在单元格前添加标签 */
  #myTable td:before {
	content: attr(data-label) ": "; /* 获取data-label属性的值 */
	font-weight: bold;
	display: inline-block;
	width: 60px; /* 设置标签宽度 */
  }
}

三、JavaScript 功能实现

(可选,用于动态添加data-label属性)

为了在移动端显示每列的标题,我们需要在每个<td>元素上添加data-label属性

window.onload = function() {
	const table = document.getElementById('myTable');
	const headers = table.querySelectorAll('th');
	const rows = table.querySelectorAll('tbody tr');

	rows.forEach(row => {
		const cells = row.querySelectorAll('td');
		cells.forEach((cell, index) => {
			cell.setAttribute('data-label', headers[index].textContent);
		});
	});
}

这段 JavaScript 代码会在页面加载完成后执行,它会遍历表格的每一行和每一个单元格,并将对应的表头文本设置为单元格的 data-label 属性值。

完整代码

<!DOCTYPE html>
<html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>
            Table to Card on Mobile
        </title>
		<style>
		/* PC端表格样式 */
		#myTable {
		  width: 100%;
		  border-collapse: collapse; /* 合并边框 */
		}

		#myTable th, #myTable td {
		  border: 1px solid #ddd;
		  padding: 8px;
		  text-align: left;
		}

		/* 移动端卡片样式 */
		@media (max-width: 768px) { /* 当屏幕宽度小于等于768px时应用以下样式 */
		  #myTable {
			display: block; /* 使表格成为块级元素 */
		  }

		  #myTable thead {
			display: none; /* 隐藏表头 */
		  }

		  #myTable tbody tr {
			display: block; /* 使表格行成为块级元素 */
			margin-bottom: 10px; /* 设置卡片间距 */
			border: 1px solid #ddd;
			padding: 10px;
			box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.1); /* 添加阴影效果 */
			border-radius: 5px; /* 添加圆角 */
		  }

		  #myTable td {
			display: block; /* 使表格单元格成为块级元素 */
			border: none; /* 移除单元格边框 */
			padding: 5px 0;
		  }

		  /* 使用伪元素在单元格前添加标签 */
		  #myTable td:before {
			content: attr(data-label) ": "; /* 获取data-label属性的值 */
			font-weight: bold;
			display: inline-block;
			width: 60px; /* 设置标签宽度 */
		  }
		}
		</style>
    </head>
    
    <body>
		<table id="myTable">
		  <thead>
			<tr>
			  <th>姓名</th>
			  <th>年龄</th>
			  <th>职业</th>
			  <th>联系方式</th>
			</tr>
		  </thead>
		  <tbody>
			<tr>
			  <td>张三</td>
			  <td>25</td>
			  <td>程序员</td>
			  <td>138xxxxxxxx</td>
			</tr>
			<tr>
			  <td>李四</td>
			  <td>30</td>
			  <td>设计师</td>
			  <td>139xxxxxxxx</td>
			</tr>
			</tbody>
		</table>
        <script>
		window.onload = function() {
			const table = document.getElementById('myTable');
			const headers = table.querySelectorAll('th');
			const rows = table.querySelectorAll('tbody tr');

			rows.forEach(row => {
				const cells = row.querySelectorAll('td');
				cells.forEach((cell, index) => {
					cell.setAttribute('data-label', headers[index].textContent);
				});
			});
		}
		</script>
    </body>

</html>

通过以上 HTML、CSS 和 JavaScript 的协同工作,就能够实现在移动端将 Table 表格自动转变为卡片样式,并且每个卡片都展示表头的功能,从而提升网页在移动端的用户体验和可读性。在实际应用中,还可以根据项目需求进一步优化样式和功能,例如添加动画效果、调整卡片布局等。


×