首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >游戏行业实战案例4:在线时长分析

游戏行业实战案例4:在线时长分析

作者头像
猴子数据分析
发布于 2022-05-19 04:25:16
发布于 2022-05-19 04:25:16
4.1K00
代码可运行
举报
文章被收录于专栏:猴子数据分析猴子数据分析
运行总次数:0
代码可运行

【面试题】某游戏数据后台设有“登录日志”和“登出日志”两张表。

“登录日志”记录各玩家的登录时间和登录时的角色等级。

“登出日志”记录各玩家的登出时间和登出时的角色等级。

其中,“角色id”字段唯一识别玩家。

游戏开服前两天(2022-08-13至2022-08-14)的角色登录和登出日志如下

一天中,玩家可以多次登录登出游戏,请使用SQL分析出以下业务问题:

请根据玩家登录登出的时间,统计各玩家每天总在线时长情况。

(如玩家登录后没有对应的登出日志,可以使用当天23:59:59作为登出时间,时间之间的计算可以考虑使用时间戳函数unix_timestamp。)

问题4:

统计各玩家每天总在线时长分为两步:

第一步,计算各玩家每天每次登录游戏后的在线时长;

第二步,对各玩家每天每次的在线时长进行求和,得到各玩家每天的总在线时长。

1. 计算各玩家每天每次登录游戏后的在线时长

玩家每次登录后的在线时长=每次的登出时间-每次对应的登录时间,因此,我们需要对玩家的登录时间、登出时间进行一一对应。

登录时间从“登录日志”表获取,登出时间从“登出日志”表获取。那么,如何对玩家的登录时间、登出时间进行一一对应呢?

玩家每次登录后必然伴随着登出,因此玩家的登录时间顺序与登出时间顺序是一致的。对每个玩家的登录时间进行排序得到排名,再对每个玩家的登出时间进行排序得到排名,那么登录时间对应的排名必然与登出时间对应的排名一致。即:排名为1的登录时间与排名为1的登出时间相对应,排名为2的登录时间与排名为2的登出时间相对应……

使用排序窗口函数对每个玩家的登录登出时间进行排序(三个排序窗口函数选择其一即可,在此选择rank()窗口函数),由于要获取每个玩家每天的登录登出时间排名,因此以角色id,日期进行分组,以登录或登出时间升序排序,即partition by 角色id,日期 order by 登录时间/登出时间 asc

对登录登出时间进行排序的SQL的书写方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#对每个玩家每天的登录时间进行排序
select 角色id,日期,登录时间,rank() over(partition by 角色id,日期 order by 登录时间 asc) as 登录排名
from 登录日志;
#对每个玩家每天的登出时间进行排序
select 角色id,日期,登出时间,rank() over(partition by 角色id,日期 order by 登出时间 asc) as 登出排名
from 登出日志;

查询结果如下:

对每个玩家每天的登录登出时间进行排序后,就可以将登录登出时间进行一一对应了。

如何一一对应呢?通过横向联结就可以实现,即使用join联结方法。

根据题意,“登录日志”表中的登录时间不存在缺失,而“登出日志”表中某个玩家的登出时间可能存在缺失,为了在联结的时候完整的保留登录登出时间,将上述查询结果1设为临时表a,查询结果2设为临时表b,并让临时表a左联结(left join)临时表b。

左联结时,还需要设置条件使两个临时表的角色id、日期和排名相等,这样才能使登录登出时间一一对应。

进行左联结的SQL的书写方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select a.角色id,a.日期,a.登录时间,b.登出时间
from
(select 角色id,日期,登录时间,rank() over(partition by 角色id,日期 order by 登录时间 asc) as 登录排名
from 登录日志) as a
left join
(select 角色id,日期,登出时间,rank() over(partition by 角色id,日期 order by 登出时间 asc) as 登出排名
from 登出日志) as b
on a.角色id = b.角色id and a.日期 = b.日期 and a.登录排名 = b.登出排名;

查询结果如下:

需要注意的是,根据题意:如玩家登录后没有对应的登出日志,可以使用当天23:59:59作为登出时间。也就是说,若玩家登录后没有对应的登出日志,则进行左联结后“登出时间”这一列会存在空值,而空值可以使用当天23:59:59进行填充。

如何实现这一操作呢?

可以使用case when子句进行条件判断,当“登出时间”这一列的某个值为空值时,则使用当天23:59:59作为值,否则就不改变值,即:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
case when 登出时间 is null then 当天23:59:59 else 登出时间 end

除了使用case when填充空值,还可以使用ifnull()函数填充空值。ifnull()函数的语法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ifnull(1,2)

其中,若值1为null,则返回值2,若值1不为null,则返回值1。

比如:

ifnull(null,1),返回值为1;ifnull(0,1),返回值为0。

将其应用于本问题,则是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ifnull(登出时间,'当天23:59:59')

即:若登出时间为null,则返回当天23:59:59,若登出时间不为null,则返回登出时间。

case when子句和ifnull()函数能达到同样的效果,两者选择其一即可。在此选择case when子句进行条件判断。

那么,如何得到当天23:59:59呢?

当天即为“日期”列中的值,因此我们可以将“日期”列中的值与23:59:59进行合并得到当天23:59:59。合并字符串使用concat()函数,合并时日期与23:59:59之间存在一个空格,使时间格式一致,即:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
concat(日期,' 23:59:59')

这样,在左联结时,同时填充“登出时间”字段空值的SQL的书写方法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select a.角色id,a.日期,a.登录时间,
       (case when b.登出时间 is null then concat(a.日期,'23:59:59') else b.登出时间 end) as 登出时间              
       #使用ifnull()函数,则为ifnull(b.登出时间,concat(a.日期,' 23:59:59')) as 登出时间
from
(select 角色id,日期,登录时间,rank() over(partition by 角色id,日期 order by 登录时间 asc) as 登录排名
from 登录日志) as a
left join
(select 角色id,日期,登出时间,rank() over(partition by 角色id,日期 order by 登出时间 asc) as 登出排名
from 登出日志) as b
on a.角色id = b.角色id and a.日期 = b.日期 and a.登录排名 = b.登出排名;

查询结果如下:

可以看到,登录时间和登出时间已经一一对应,将登出时间减去登录时间就可以得到玩家每次登录后的在线时长。

将上述查询结果设为临时表c,则计算每个玩家每天每次登录后的在线时长的SQL的书写方法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 角色id,日期,
unix_timestamp(登出时间) - unix_timestamp(登录时间) as 每次在线时长
from c;

unix_timestamp()函数可以将日期时间格式转化成10位数的时间戳格式,单位为秒,因此,为了得到单位为分钟的在线时长,我们需要在登出登录时间相减后再除以60秒,即:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 角色id,日期,
       (unix_timestamp(登出时间) - unix_timestamp(登录时间))/60 as 每次在线时长_min
from c;

利用with…as语句来封装临时表c的查询语句,则SQL的书写方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with c as
(select a.角色id,a.日期,a.登录时间,
        (case when b.登出时间 is null then concat(a.日期,'23:59:59') else b.登出时间 end) as 登出时间
from
(select 角色id,日期,登录时间,rank() over(partition by 角色id,日期 order by 登录时间 asc) as 登录排名
from 登录日志) as a
left join
(select 角色id,日期,登出时间,rank() over(partition by 角色id,日期 order by 登出时间 asc) as 登出排名
from 登出日志) as b
on a.角色id = b.角色id and a.日期 = b.日期 and a.登录排名 = b.登出排名
)
select 角色id,日期,
round((unix_timestamp(登出时间)- unix_timestamp(登录时间))/60,2) as 每次在线时长_min #使用round()函数保留2位小数
from c;

查询结果如下:

2. 计算各玩家每天的总在线时长

使用group by子句对角色id、日期进行分组,再使用sum()函数对每个玩家每天的每次在线时长进行求和,就可以得到各玩家每天的总在线时长。

SQL的书写方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with c as
(select a.角色id,a.日期,a.登录时间,
        (case when b.登出时间 is null then concat(a.日期,'23:59:59') else b.登出时间 end) as 登出时间
from
(select 角色id,日期,登录时间,rank() over(partition by 角色id,日期 order by 登录时间 asc) as 登录排名
from 登录日志) as a
left join
(select 角色id,日期,登出时间,rank() over(partition by 角色id,日期 order by 登出时间 asc) as 登出排名
from 登出日志) as b
on a.角色id = b.角色id and a.日期 = b.日期 and a.登录排名 = b.登出排名
)
select 角色id,日期,
sum(round((unix_timestamp(登出时间)- unix_timestamp(登录时间))/60,2)) as 总在线时长_min #使用round()函数保留2位小数
from c
group by 角色id,日期;

查询结果如下:

问题4:

统计各玩家每天总在线时长分为两步:

第一步,计算各玩家每天每次登录游戏后的在线时长;

第二步,对各玩家每天每次的在线时长进行求和,得到各玩家每天的总在线时长。

1. 计算各玩家每天每次登录游戏后的在线时长

玩家每次登录后的在线时长=每次的登出时间-每次对应的登录时间,因此,我们需要对玩家的登录时间、登出时间进行一一对应。

登录时间从“登录日志”表获取,登出时间从“登出日志”表获取。那么,如何对玩家的登录时间、登出时间进行一一对应呢?

玩家每次登录后必然伴随着登出,因此玩家的登录时间顺序与登出时间顺序是一致的。对每个玩家的登录时间进行排序得到排名,再对每个玩家的登出时间进行排序得到排名,那么登录时间对应的排名必然与登出时间对应的排名一致。即:排名为1的登录时间与排名为1的登出时间相对应,排名为2的登录时间与排名为2的登出时间相对应……

使用排序窗口函数对每个玩家的登录登出时间进行排序(三个排序窗口函数选择其一即可,在此选择rank()窗口函数),由于要获取每个玩家每天的登录登出时间排名,因此以角色id,日期进行分组,以登录或登出时间升序排序,即partition by 角色id,日期 order by 登录时间/登出时间 asc

对登录登出时间进行排序的SQL的书写方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#对每个玩家每天的登录时间进行排序
select 角色id,日期,登录时间,rank() over(partition by 角色id,日期 order by 登录时间 asc) as 登录排名
from 登录日志;
#对每个玩家每天的登出时间进行排序
select 角色id,日期,登出时间,rank() over(partition by 角色id,日期 order by 登出时间 asc) as 登出排名
from 登出日志;

查询结果如下:

对每个玩家每天的登录登出时间进行排序后,就可以将登录登出时间进行一一对应了。

如何一一对应呢?通过横向联结就可以实现,即使用join联结方法。

根据题意,“登录日志”表中的登录时间不存在缺失,而“登出日志”表中某个玩家的登出时间可能存在缺失,为了在联结的时候完整的保留登录登出时间,将上述查询结果1设为临时表a,查询结果2设为临时表b,并让临时表a左联结(left join)临时表b。

左联结时,还需要设置条件使两个临时表的角色id、日期和排名相等,这样才能使登录登出时间一一对应。

进行左联结的SQL的书写方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select a.角色id,a.日期,a.登录时间,b.登出时间
from
(select 角色id,日期,登录时间,rank() over(partition by 角色id,日期 order by 登录时间 asc) as 登录排名
from 登录日志) as a
left join
(select 角色id,日期,登出时间,rank() over(partition by 角色id,日期 order by 登出时间 asc) as 登出排名
from 登出日志) as b
on a.角色id = b.角色id and a.日期 = b.日期 and a.登录排名 = b.登出排名;

查询结果如下:

需要注意的是,根据题意:如玩家登录后没有对应的登出日志,可以使用当天23:59:59作为登出时间。也就是说,若玩家登录后没有对应的登出日志,则进行左联结后“登出时间”这一列会存在空值,而空值可以使用当天23:59:59进行填充。

如何实现这一操作呢?

可以使用case when子句进行条件判断,当“登出时间”这一列的某个值为空值时,则使用当天23:59:59作为值,否则就不改变值,即:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
case when 登出时间 is null then 当天23:59:59 else 登出时间 end

除了使用case when填充空值,还可以使用ifnull()函数填充空值。ifnull()函数的语法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ifnull(1,2)

其中,若值1为null,则返回值2,若值1不为null,则返回值1。

比如:

ifnull(null,1),返回值为1;ifnull(0,1),返回值为0。

将其应用于本问题,则是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ifnull(登出时间,'当天23:59:59')

即:若登出时间为null,则返回当天23:59:59,若登出时间不为null,则返回登出时间。

case when子句和ifnull()函数能达到同样的效果,两者选择其一即可。在此选择case when子句进行条件判断。

那么,如何得到当天23:59:59呢?

当天即为“日期”列中的值,因此我们可以将“日期”列中的值与23:59:59进行合并得到当天23:59:59。合并字符串使用concat()函数,合并时日期与23:59:59之间存在一个空格,使时间格式一致,即:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
concat(日期,' 23:59:59')

这样,在左联结时,同时填充“登出时间”字段空值的SQL的书写方法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select a.角色id,a.日期,a.登录时间,
       (case when b.登出时间 is null then concat(a.日期,'23:59:59') else b.登出时间 end) as 登出时间              
       #使用ifnull()函数,则为ifnull(b.登出时间,concat(a.日期,' 23:59:59')) as 登出时间
from
(select 角色id,日期,登录时间,rank() over(partition by 角色id,日期 order by 登录时间 asc) as 登录排名
from 登录日志) as a
left join
(select 角色id,日期,登出时间,rank() over(partition by 角色id,日期 order by 登出时间 asc) as 登出排名
from 登出日志) as b
on a.角色id = b.角色id and a.日期 = b.日期 and a.登录排名 = b.登出排名;

查询结果如下:

可以看到,登录时间和登出时间已经一一对应,将登出时间减去登录时间就可以得到玩家每次登录后的在线时长。

将上述查询结果设为临时表c,则计算每个玩家每天每次登录后的在线时长的SQL的书写方法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 角色id,日期,
unix_timestamp(登出时间) - unix_timestamp(登录时间) as 每次在线时长
from c;

unix_timestamp()函数可以将日期时间格式转化成10位数的时间戳格式,单位为秒,因此,为了得到单位为分钟的在线时长,我们需要在登出登录时间相减后再除以60秒,即:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 角色id,日期,
       (unix_timestamp(登出时间) - unix_timestamp(登录时间))/60 as 每次在线时长_min
from c;

利用with…as语句来封装临时表c的查询语句,则SQL的书写方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with c as
(select a.角色id,a.日期,a.登录时间,
        (case when b.登出时间 is null then concat(a.日期,'23:59:59') else b.登出时间 end) as 登出时间
from
(select 角色id,日期,登录时间,rank() over(partition by 角色id,日期 order by 登录时间 asc) as 登录排名
from 登录日志) as a
left join
(select 角色id,日期,登出时间,rank() over(partition by 角色id,日期 order by 登出时间 asc) as 登出排名
from 登出日志) as b
on a.角色id = b.角色id and a.日期 = b.日期 and a.登录排名 = b.登出排名
)
select 角色id,日期,
round((unix_timestamp(登出时间)- unix_timestamp(登录时间))/60,2) as 每次在线时长_min #使用round()函数保留2位小数
from c;

查询结果如下:

2. 计算各玩家每天的总在线时长

使用group by子句对角色id、日期进行分组,再使用sum()函数对每个玩家每天的每次在线时长进行求和,就可以得到各玩家每天的总在线时长。

SQL的书写方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with c as
(select a.角色id,a.日期,a.登录时间,
        (case when b.登出时间 is null then concat(a.日期,'23:59:59') else b.登出时间 end) as 登出时间
from
(select 角色id,日期,登录时间,rank() over(partition by 角色id,日期 order by 登录时间 asc) as 登录排名
from 登录日志) as a
left join
(select 角色id,日期,登出时间,rank() over(partition by 角色id,日期 order by 登出时间 asc) as 登出排名
from 登出日志) as b
on a.角色id = b.角色id and a.日期 = b.日期 and a.登录排名 = b.登出排名
)
select 角色id,日期,
sum(round((unix_timestamp(登出时间)- unix_timestamp(登录时间))/60,2)) as 总在线时长_min #使用round()函数保留2位小数
from c
group by 角色id,日期;

查询结果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 猴子数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
HTML5 表单验证 API
HTML5 表单验证在现代浏览器中得到了广泛支持。但在使用新特性时,仍需考虑兼容性问题。可以使用特性检测来提供优雅的降级处理:
空白诗
2024/12/13
5110
HTML5表单及其验证
将原本type为text的input控件声明为以上特殊类型,是为了给用户呈现不同的输入界面(移动平台上支持这些不同的输入界面,这里就不细说),而且表单提交时会对其值做进一步的验证。下面展示这些新表单元素,请用支持这些表单元素的浏览器查看,IE对其支持最差。
HUC思梦
2020/09/03
2.1K0
HTML 表单和约束验证的完整指南
在本文中,我们将研究 HTML 表单字段和 HTML5 提供的验证选项。我们还将研究如何通过使用 CSS 和 JavaScript 来增强这些功能。
玖柒的小窝
2021/09/13
10.1K0
HTML 表单和约束验证的完整指南
HTML基础-表单元素与属性:深入浅出指南
在网页设计中,表单(Form)是收集用户输入信息的重要组成部分,它允许用户与网站进行交互,如注册新账户、填写调查问卷或提交反馈等。本文将深入浅出地介绍HTML中表单元素与属性的基础知识,探讨一些常见问题、易错点,并提供避免错误的方法及代码示例。
Jimaks
2024/06/05
3170
HTML基础-表单元素与属性:深入浅出指南
HTML 交互式表单验证
在 HTML 中创建表单总是有点复杂。你首先得将 HTML 标记编写正确,然后需要确保每一个表单项在提交之前都有一个可用的值,最后还需要在有问题时用提醒来告知用户。   还好 HTML5 引入了一些新
用户1667431
2018/04/18
2.4K0
HTML 交互式表单验证
纯CSS实现表单验证
在我们的日常业务中,表单验证是个很常见设计需求,像一些登录注册框,问卷调查也都需要用到表单验证。
陈大鱼头
2020/04/16
1.7K0
纯CSS实现表单验证
HTML5新增的表单验证功能
一、HTML5表单的特点: HTML5 表单增加了许多内置的控件和控件属性 XHTML 中需要放在 form 之中的诸如 input/button/select/textarea 等标签元素,在 HTML 5 中完全可以放在页面任何位置,并通过新增的 form 属性指向元素所属表单的 ID 值,即可关联起来。 二、HTML5新增的控件类型: email输入类型:<input type="email" name="email" /> 要求输入格式正确的 email 地址,否则浏览器不允许提交,同时会提示错
Leophen
2019/08/23
2.8K0
angularjs 表单验证
一、常用的表单验证指令  1. 必填项验证 某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记required即可: <input type="text" required />   2. 最小长度 验证表单输入的文本长度是否大于某个最小值,在输入字段上使用指令ng-minleng= "{number}": <input type="text" ng-minlength="5" /> 3. 最大长度 验证表单输入的文本长度是否小于或等于某个最大值,在输入字段上使用指令ng-maxlength=
柴小智
2018/04/10
7.3K0
angularjs 表单验证
html5 表单元素示例
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>html5中的表单</title> <script type="text/javascript"> var flag = true; function checkMail(){ var url = document.getElementById("url"); if (url.value==""){ //表单提交时 自定义验证信息
用户7718188
2021/11/02
1.8K0
用神奇的 form 验证 API 来优化你的表单验证
鱼头曾在 『极限版』不掺水,用纯 CSS 来实现超飒的表单验证功能 一文中分享过一个花里胡哨的 纯 CSS 的表单验证功能 。虽然仅仅依赖 CSS 是无法满足我们的日常开发需求的,但是配合着各种原生的 form 验证 API ,情况又不一样了。
陈大鱼头
2021/01/05
1.2K0
【Web前端】如何构建简单HTML表单?
HTML 表单是 Web 开发中非常重要的组成部分。它们是与用户交互的主要方式,能够收集用户输入的数据。表单的灵活性使它们成为 HTML 中最复杂的结构之一,但若使用正确的结构和元素,可以确保其可用性和无障碍性。
一条晒干的咸鱼
2024/11/26
4080
【Web前端】如何构建简单HTML表单?
6.HTML输入表单标签元素介绍
描述: 表单是一个包含表单元素的区域,表单元素是允许用户在表单中输入内容,其包含 文本框、文本域(textarea)、按钮、下拉列表、单选框(radio-buttons)、复选框(checkboxes)等元素都要放在form标签里面或者进行form的id值的调用,否则提交的数据到不了后端。
全栈工程师修炼指南
2023/03/21
5.6K0
HTML5-输入验证
HTML5引入了对输入验证的支持。设计者可告知浏览器自己需要什么类型的数据,然后浏览器在提交表单之前会使用这些信息检查用户输入的数据是否有效。其好处是:用户可以立刻得到问题反馈。
奋飛
2019/08/15
2.4K0
Angularjs的表单验证
在AngularJS中,有许多用于验证的指令。我们将先学习几个最流行的内置指令,然后再创建一个自定义验证规则的指令。
星回
2018/08/02
2.6K0
angularjs输入验证[通俗易懂]
原文 http://www.cnblogs.com/woshinidezhu/p/Form-validation-with-AngularJS.html
全栈程序员站长
2022/09/15
1.8K0
简单总结Layui中的表单验证
简单来说,实现Layui框架中的表单验证很简单,只需要给表单元素添加上”lay-verify“属性
知识分子没文化
2023/07/01
4.1K0
【Java 进阶篇】创建 HTML 注册页面
在这篇博客中,我们将介绍如何创建一个简单的 HTML 注册页面。HTML(Hypertext Markup Language)是一种标记语言,用于构建网页的结构和内容。创建一个注册页面是网页开发的常见任务之一,它允许用户提供个人信息并注册成为网站的会员。我们将从头开始创建一个包含基本表单元素的注册页面,并介绍如何处理用户提交的数据。
繁依Fanyi
2023/10/12
1.2K0
【Java 进阶篇】创建 HTML 注册页面
[HTML5] 一文读懂H5新特性的应用
<header> 标签用于定义文档或文档某部分的头部内容,通常包含导航链接、网站标识、标题、搜索框等。
DevKevin
2024/08/17
1K0
PHP 表单处理与验证
表单是 Web 应用程序中最基本的组成部分之一,它允许用户与应用程序进行交互。无论是用户注册、登录、填写调查问卷还是提交评论,表单都是数据传输的桥梁。在 PHP 中,表单处理与验证是每个 Web 开发者都必须掌握的重要技能。
繁依Fanyi
2025/01/18
7570
HTML的笔记及展示(2)(表单元素、input元素、label、button以及HTML5新增的一些元素)
1.<form…/>元素 用于生成输入表单,该元素不会生成可视化部分。如单行文本框、多行文本框、单选按钮、复选框等都需要放在<form…/>元素内
鲲志说
2025/04/07
6440
HTML的笔记及展示(2)(表单元素、input元素、label、button以及HTML5新增的一些元素)
相关推荐
HTML5 表单验证 API
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档