如何使用HTML创建一个4行4列的表格?
释放双眼,带上耳机,听听看~!
HTML表格是web1.0时代的产物,现在已经基本上被淘汰了,但是有些时候还是会用到,这里有必要简单的讲述一下。
表格由一行或多行单元格组成,应用表格可以让数据展现更有条理,表格标签有:table标签(表格)、tr标签(行)、td标签(单元格)组成。例如,要展现一组企业员工通讯录,通讯录包括员工名称、电话、电子邮件、职务四项,就可以使用多行四栏的表格来展现企业员工通讯录。
假如有下面的企业员工通讯录(张三,电话,邮件,研发工程师)、(王二,电话,邮件,研发经理)、(李四,电话,邮件、研发工程师),企业员工通讯录可以使用HTML表格元素来展现。
下图是浏览器显示效果。从浏览器显示效果可以看出,表格为四行四列,第一行为表头,使用tr标签,tr标签内的单元格使用th标签,标签间的内容为黑体字体起到强调的作用;第二、三、四行为表格主体,也使用tr标签,tr标签内的单元格使用td标签,标签间的内容为普通字体。
表格线
上图显示的表格有个缺点,栏与栏之间,行与行之间没有表格线,整个表格结构不是很清晰。可以在table标签内添加属性boder来设置表格线,border的值为表格线的宽度,单位为百分数或像素。在前面HTML文档的table标签添加border属性,属性的值为1像素,这个理论上应该在CSS样式中去说的,现在想起来了就先了解一下吧,HTML文档的样式都是由CSS来控制的。
在table标签添加border属性后,企业员工通讯录在浏览器显示的效果如下图所示。
这里补充说一下表格的样式,以后在CSS的学习中就不说了,以为表格这东西基本上已经是淘汰的产物,不过会在一些特殊情况下用到。
表格栏间距离(cellspacing)
表格栏间距离是指表格栏与栏之间的距离,table标签的cellspacing属性用于设置表格栏之间的距离,cellspacing属性的值可以是百分数或像素。在前面HTML文档的table标签添加cellspacing属性,属性的值为20像素,cellspacing="20"。
在table标签添加cellspacing属性后,企业员工通讯录在浏览器显示的效果如下图所示。
表格单元格内间距(cellpadding)
表格单元格内间距是指表格单元格内容与单元格边线之间的距离。在上图的企业员工通讯录中,表格单元格的内容与单元格边线紧挨在一起,没有边距,表格加上边线后,显得不够直观。在前面HTML文档的table标签添加cellpadding属性,属性的值为20像素,语法为cellpadding="20"。
在table标签添加cellpadding属性后,企业员工通讯录在浏览器显示的效果如下图所示。
上图的表格并不是我们希望显示的表格样式,特别是表格边线没有完整地连接在一起。原因是表格属性cellspacing设置过宽,每个表格单元都被单独分隔,设置cellspacing为0即可,在修改cellspacing属性后,企业员工通讯录在浏览器显示的效果如下图所示。
设置表格宽度
前面的table标签没有设置表格宽度,表格宽度就是表格中每一列宽度的总和,列的宽度由单元格的内容和cellpadding属性来确定。可以在table标签中添加width属性来设置表格的宽度,单位为百分数或像素。在前面HTML文档的table标签添加width属性,属性的值为1000像素,语法为width="1000",显示效果如下图所示。
表格单元格内容对齐属性分为水平对齐和垂直对齐两种方式。水平对齐又分为左对齐、居中对齐、右对齐和两端对齐;垂直对齐又分为上对齐、中对齐、底对齐。表格单元格内容对齐属性可以应用于tr标签、th标签和td标签。
水平对齐属性为align,常用值为left(左对齐)、center(居中对齐)、right(右对齐)、justify(两端对齐)。
垂直对齐属性为valign,常用值为top(上对齐)、middle(中对齐)、bottom(底对齐)。
上图中的表格改变宽度后,单元格内容没有在水平方向上居中对齐,在tr标签添加align属性,值为center,语法为align="center"。
在tr标签添加align属性后,企业员工通讯录在浏览器显示的效果如下图所示。
表格的行合并与栏合并
前面介绍的表格都是由简单的行和列组成的,如果要展现一些复杂的表格就难以胜任了。例如下面的表格:
网页要展现上述表格就需要用到表格的行合并属性与栏合并属性。行合并属性用于一个单元格跨越多行,通常使用在td和th标签中,属性为rowspan;栏合并属性用于一个单元格跨越多栏,通常使用在td和th标签中,属性为colspan。下面的HTML文档可以实现上述表格的展现。
下图是浏览器显示效果。从浏览器显示效果可以看出,表格的第一行单元格使用了colspan属性,属性的值为4,表示将该行的四个单元格合并为一个单元格;第三行的第二个单元格使用了rowspan属性,属性值为2,将第三行和第四行的第二个单元格跨行合并为一个单元格;第五行使用了colspan属性,属性的值为3,将该行的前三个单元格合并为一个单元格。
总结:
表格标签有:table标签(表格)、tr标签(行)、td标签(单元格)组成,可以在table标签内添加属性boder来设置表格线,还可以用cellspacing属性来修改表格之间的外部间距,同时也可以用cellpadding来修改表格的内边距,表格的宽度可以用width来指定,对齐方式可以用align来添加,行合并可以用rowspan,栏合并可以用colspan,这些要是现在能记住以后对CSS学习还是很有帮助的,这些基本就是CSS基础样式修改的常用语法标签。
推荐阅读
-
35 岁实现财务*,腾讯程序员手握2300万提前退休?-1000万房产、1000万腾讯股票、加上300万的现金,一共2300万的财产。有网友算了一笔账,假设1000万的房产用于自住,剩下1300万资产按照平均税后20-50万不等进行计算,大约花上26-60年左右的时间才能赚到这笔钱。也就是说,普通人可能奋斗一辈子,才能赚到这笔钱。在很多人还在为中年危机而惶惶不可终日的时候,有的人的35岁,就已经安全着陆,试问哪个打工人不羡慕?但问题是有这样财富积累必然有像样的实力做靠山。没有人可以不劳而获。 看到这里,肯定有人说,那么对于普通人来说,卷可能真就成了唯一的出路。但是卷也有轻松的卷,“偷懒”的卷法,对于程序员而言,刨除掉一时无法改掉的开会传统占用的大部分时间,如何把有限的时间和精力放在真正重要的架构设计、需求设计上,而不是重复的造*,编码、改bug、手动测试。因此在科技改变生活的今天,学会使用AI工具成为程序员们的必备技能。 以全栈式全自动的软件开发工具飞算SoFlu软件机器人为例,作为全球首款面向微服务架构设计和最佳实践的软件机器人,SoFlu软件机器人改变了原来手工编码的作业模式,通过可视化拖拽方式以及参数配置就能实现等同于编写复杂代码的业务逻辑,在设计业务逻辑时就完成了微服务应用开发,做到“业务即图,图即代码”,实现“软件开发,十倍提效”。 而作为飞算SoFlu软件机器人的一个重要组成部分,FuncGPT(慧函数)支持所有类型函数创建。通过自然语言描述Java函数需求,实时生成高质量、高可读性的Java函数代码。生成代码可直接复制到IDEA,或一键导入Java全自动开发工具函数库。 FuncGPT(慧函数)具有五大核心能力: ● 自然语言:通过自然语言即可生成函数,降低软件开发门槛。 ● 秒级函数开发:全自动秒级开发函数,秒级完成,效率千倍提升。 ● 一站式函数开发应用:函数生成即可直接应用,效率、安全有保障。 ● 质量可靠:生成的函数代码符合业界规范、具备良好的可读性,符合最优解。 ● 灵活生成:可以根据开发人员的具体需求生成并支持调整和修改。 以“将文件流转换为File对象”这个需求为例,以下是FuncGPT(慧函数)秒级生成的代码: / 类名:FileConverter // 函数名:convertStreamToFile // 函数功能:将文件流转换为File对象 // POM依赖包:无 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class FileConverter { /** * 将文件流转换为File对象 * @param inputStream 文件流 * @param filePath 文件路径 * @param fileName 文件名 * @return 转换后的File对象 * @throws IOException 如果发生I/O异常 */ public static File convertStreamToFile(InputStream inputStream, String filePath, String fileName) throws IOException { File file = new File(filePath + File.separator + fileName); // 创建File对象 try (FileOutputStream outputStream = new FileOutputStream(file)) { // 创建文件输出流 byte buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { // 从文件流读取数据并写入文件 outputStream.write(buffer, 0, bytesRead); } } return file; // 返回转换后的File对象 } } // 函数示例 // 将文件流转换为File对象示例 // 入参:inputStream,文件流 // 入参:filePath,文件路径 // 入参:fileName,文件名 // 出参:file,转换后的File对象 // 调用示例: // InputStream inputStream = new FileInputStream("example.txt"); // String filePath = "C:\\Users\\User\\Documents"; // String fileName = "example.txt"; // File file = FileConverter.convertStreamToFile(inputStream, filePath, fileName); // System.out.println(file.getAbsolutePath); // 输出结果:例如,将文件流转换为File对象后,文件的绝对路径为:C:\Users\User\Documents\example.txt // 则输出结果为:C:\Users\User\Documents\example.txt 通过分析,不难发现以上代码:
-
如何使用 HTML、CSS 创建完全响应的中秋礼品卡❤️
-
源码为您提供,零基础搭建的免费网址导航站--中国妖怪百集,收集了大量古代文献中的妖怪,非常详细的记录了妖怪的来历、描述甚至图片,让您对中国的妖怪文化有一个整体的了解,茶余饭后的消遣非常有趣,类似的网站还有很多,期待您的探索! 导航站的另一个特点是汇集了大量咖啡平时用的非常好的工具软件,其中大部分都是在线的,不需要下载安装,包括文档协作、分享,图片、音频、视频处理,格式转换,文件传输,各个网站的视频下载等等,兼职就是一个工具百宝箱! 如果你觉得这些网站不符合你的使用习惯,或者想添加一些自己收藏的网站,那么把源码交给你,只需简单修改就可以变成符合自己使用习惯的独特导航了! 如何修改 导航站采用纯静态构建,下载源代码后,只需要修改 html 文件中的代码块即可,代码块结构如下: 只需要修改四个地方,分别对应网站的四个关键信息: 修改相应网站的 URL 地址 修改相应网站的徽标 修改相应网站的名称
-
创建一个使用列表、链接、图像并将图像用作链接元素的导航 - Html - php中文网博客
-
Java 类加载器的作用 - 简介:类加载器是 Java™ 中一个非常重要的概念。类加载器负责将 Java 类的字节码加载到 Java 虚拟机中。本文首先详细介绍了 Java 类加载器的基本概念,包括代理模型、加载类的具体过程和线程上下文类加载器等。然后介绍了如何开发自己的类加载器,最后介绍了类加载器在 Web 容器和 OSGi™ 中的应用。 类加载器是 Java 语言的一项创新,也是 Java 语言广受欢迎的重要原因之一。它允许将 Java 类动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 开始出现,最初是为了满足 Java Applets 的需求而开发的,Java Applets 需要从远程位置下载 Java 类文件并在浏览器中执行。现在,类加载器已广泛应用于网络容器和 OSGi。一般来说,Java 应用程序的开发人员不需要直接与类加载器交互;Java 虚拟机的默认行为足以应对大多数情况。但是,如果遇到需要与类加载器交互的情况,而您又不太了解类加载器的机制,就很容易花费大量时间调试异常,如 ClassNotFoundException 和 NoClassDefFoundError。本文将详细介绍 Java 的类加载器,帮助读者深入理解 Java 语言中的这一重要概念。下面先介绍一些基本概念。 类加载器的基本概念 顾名思义,类加载器用于将 Java 类加载到 Java 虚拟机中。一般来说,Java 虚拟机以如下方式使用 Java 类:Java 源程序(.java 文件)经 Java 编译器编译后转换为 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码并将其转换为 java.lang 实例。每个实例都用来表示一个 Java 类。通过该实例的 newInstance 方法创建该类的对象。实际情况可能更加复杂,例如,Java 字节代码可能是由工具动态生成或通过网络下载的。 基本上,所有类加载器都是 java.lang.ClassLoader 类的实例。下面将详细介绍这个 Java 类。 java.lang.ClassLoader 类简介 java.lang.ClassLoader 类的基本职责是根据给定类的名称为其查找或生成相应的字节码,然后根据这些字节码定义一个 Java 类,即 java.lang.Class 类的实例。除此之外,ClassLoader 还负责加载 Java 应用程序所需的资源,如图像文件和配置文件。不过,本文只讨论它加载类的功能。为了履行加载类的职责,ClassLoader 提供了许多方法,其中比较重要的方法如表 1 所示。下文将详细介绍这些方法。 表 1.与加载类相关的 ClassLoader 方法
-
如何使用HTML创建一个4行4列的表格?
-
如何使用HTML创建一个4行4列的表格布局
-
如何使用Node.js和Express轻松创建一个基础的后端服务器?
-
在React和Vue中,我们是如何玩转router的? - 使用HTML5 History API,React Router利用pushState和replaceState方法在不刷新页面的情况下管理导航历史。它像这样工作: 1. 当URL发生变化时,React Router悄悄地“监听”浏览器地址栏的改动,主要通过popstate事件来察觉url更改。 2. 随着URL的变化,Router会对照预先设定好的JavaScript路由配置对象,依据一套规则找出与当前URL匹配的路径。 3. 一旦找到合适的路线,React Router就会如魔法般地渲染相应的组件到网页上,从而实现了页面内容的实时更新。让我们来看一个React Router实际运用的例子。
-
玩转Java底层:JMX详解 - jconsole与自定义MBean监控工具的实际应用与区别" 在日常JVM调优中,我们熟知的jconsole工具通过JMX包装的bean以图形化形式展示管理数据,而像jstat和jmap这类内建监控工具则由JVM直接支持。本文将以jconsole为例,深入讲解其实质——基于JMX的MBean功能,包括可视化界面上的bean属性查看和操作调用。 MBeans在jconsole中的体现是那些可观察的组件属性和方法,如上图所示,通过名为"Verbose"的属性能看到其值为false,同时还能直接操作该bean的方法,例如"closeJerryMBean"。 尽管jconsole给我们提供了直观的可视化界面,但请注意,这里的MBean并非固定不变,开发者可根据JMX提供的接口将自己的自定义bean展示到jconsole。以下步骤展示了如何创建并注册一个名为"StudyJavaMBean"的自定义MBean: 1. 首先定义接口`StudyJavaMBean`,接口需遵循MBean规范,即后缀为"MBean"且包含getter方法代表属性,如`getApplicationName`,和无返回值的setter方法代表操作,如`closeJerryMBean`。 ```java public interface StudyJavaMBean { String getApplicationName(); void closeJerryMBean(); } ``` 2. 编写接口的实现类`StudyJavaMBeanImpl`,实现接口中的方法: ```java public class StudyJavaMBeanImpl implements StudyJavaMBean { @Override public String getApplicationName() { return "每天学Java"; } @Override public void closeJerryMBean() { System.out.println("关闭Jerry应用"); } } ``` 3. 在代码中注册自定义MBean,涉及的关键步骤包括: - 获取平台MBeanServer - 定义ObjectName,指定唯一的MBean标识符 - 注册MBean到服务器 - 启动RMI连接器服务,以便jconsole能够访问 ```java public void registerMBean() throws Exception { // ... 具体实现省略 ... } ``` 实际运行注册后的MBean,您将在jconsole中发现并查看自定义bean的属性和调用相关方法。然而,这种方式相较于传统的属性/日志查看和HTTP接口,实用性相对有限,可能存在潜在的安全风险。但不可否认的是,JMX及其MBean机制对于获取操作系统信息、内存状态等关键性能指标仍然具有重要价值。例如: 1. **获取操作系统信息**:通过JMX MBean,可以直接获取到诸如CPU使用率、操作系统版本等系统级信息,这对于资源管理和优化工作具有显著帮助。