Skip to content

3.3 HTML5新增输入类型

关键词: HTML5新增输入类型, email输入, url输入, tel输入, number输入, range输入, date输入, color输入, search输入, 表单验证

学习目标

  • 掌握HTML5新增的各种输入类型及其语法
  • 理解不同输入类型的验证机制和属性
  • 学会在实际项目中正确使用新增输入类型
  • 掌握输入类型的浏览器兼容性和回退方案
  • 理解HTML5表单验证的基本原理

3.3.1 邮箱输入(input type="email")

基本语法

<input type="email">用于创建专门用于输入邮箱地址的输入框:

html
<input type="email" name="email" id="email">

属性和特性

基础使用

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>邮箱输入类型</title>
</head>
<body>
    <h1>邮箱输入示例</h1>
    
    <form>
        <label for="email">邮箱地址:</label>
        <input type="email" id="email" name="email" 
               placeholder="请输入您的邮箱" required>
    </form>
</body>
</html>

多邮箱输入

使用multiple属性允许输入多个邮箱地址:

html
<form>
    <label for="emails">多个邮箱(用逗号分隔):</label>
    <input type="email" id="emails" name="emails" 
           multiple placeholder="email1@example.com, email2@example.com">
</form>

常用属性

html
<form>
    <!-- 必填邮箱 -->
    <input type="email" name="email" required>
    
    <!-- 带默认值的邮箱 -->
    <input type="email" name="email" value="user@example.com">
    
    <!-- 只读邮箱 -->
    <input type="email" name="email" value="admin@site.com" readonly>
    
    <!-- 禁用邮箱输入 -->
    <input type="email" name="email" disabled>
    
    <!-- 带自动完成的邮箱 -->
    <input type="email" name="email" autocomplete="email">
</form>

验证机制

HTML5会自动验证邮箱格式的基本要求:

html
<form>
    <label for="email">邮箱验证示例:</label>
    <input type="email" id="email" name="email" required>
    <button type="submit">提交</button>
</form>

3.3.2 网址输入(input type="url")

基本语法

<input type="url">用于创建专门用于输入网址的输入框:

html
<input type="url" name="website" id="website">

使用示例

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>网址输入类型</title>
</head>
<body>
    <h1>网址输入示例</h1>
    
    <form>
        <fieldset>
            <legend>网站信息</legend>
            
            <label for="website">个人网站:</label>
            <input type="url" id="website" name="website" 
                   placeholder="https://www.example.com">
            
            <label for="blog">博客地址:</label>
            <input type="url" id="blog" name="blog" 
                   placeholder="请输入您的博客网址" required>
        </fieldset>
        
        <button type="submit">保存</button>
    </form>
</body>
</html>

URL验证特性

html
<form>
    <!-- 基本URL输入 -->
    <input type="url" name="url" placeholder="http://example.com">
    
    <!-- 必填URL -->
    <input type="url" name="url" required>
    
    <!-- 带默认值的URL -->
    <input type="url" name="homepage" value="https://www.w3.org">
    
    <!-- 多个URL输入 -->
    <input type="url" name="urls" multiple>
</form>

3.3.3 电话输入(input type="tel")

基本语法

<input type="tel">用于创建专门用于输入电话号码的输入框:

html
<input type="tel" name="phone" id="phone">

使用示例

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>电话输入类型</title>
</head>
<body>
    <h1>电话输入示例</h1>
    
    <form>
        <fieldset>
            <legend>联系信息</legend>
            
            <label for="mobile">手机号码:</label>
            <input type="tel" id="mobile" name="mobile" 
                   placeholder="138-0000-0000" required>
            
            <label for="home">家庭电话:</label>
            <input type="tel" id="home" name="home" 
                   placeholder="021-12345678">
            
            <label for="office">办公电话:</label>
            <input type="tel" id="office" name="office" 
                   placeholder="+86-21-12345678">
        </fieldset>
        
        <button type="submit">保存联系信息</button>
    </form>
</body>
</html>

电话号码格式

html
<form>
    <!-- 中国大陆手机号 -->
    <input type="tel" name="mobile" pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}" 
           placeholder="138-0000-0000">
    
    <!-- 带国际区号 -->
    <input type="tel" name="international" pattern="\+[0-9]{2,3}-[0-9]{2,4}-[0-9]{7,8}" 
           placeholder="+86-21-12345678">
    
    <!-- 简单数字格式 -->
    <input type="tel" name="simple" pattern="[0-9]{11}" 
           placeholder="13800000000">
</form>

3.3.4 数字输入(input type="number")

基本语法

<input type="number">用于创建专门用于输入数字的输入框:

html
<input type="number" name="quantity" id="quantity">

数字输入属性

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>数字输入类型</title>
</head>
<body>
    <h1>数字输入示例</h1>
    
    <form>
        <fieldset>
            <legend>商品信息</legend>
            
            <!-- 基本数字输入 -->
            <label for="price">价格:</label>
            <input type="number" id="price" name="price" 
                   min="0" max="10000" step="0.01" 
                   placeholder="0.00">
            
            <!-- 数量输入 -->
            <label for="quantity">数量:</label>
            <input type="number" id="quantity" name="quantity" 
                   min="1" max="100" step="1" value="1">
            
            <!-- 评分输入 -->
            <label for="rating">评分(1-10):</label>
            <input type="number" id="rating" name="rating" 
                   min="1" max="10" step="1">
        </fieldset>
        
        <button type="submit">提交</button>
    </form>
</body>
</html>

数字控制属性

html
<form>
    <!-- 最小值和最大值 -->
    <input type="number" name="score" min="0" max="100">
    
    <!-- 步长控制 -->
    <input type="number" name="weight" step="0.1" min="0">
    
    <!-- 整数输入 -->
    <input type="number" name="age" step="1" min="0" max="150">
    
    <!-- 负数允许 -->
    <input type="number" name="temperature" step="0.1">
    
    <!-- 默认值 -->
    <input type="number" name="default" value="50" min="0" max="100">
</form>

3.3.5 范围输入(input type="range")

基本语法

<input type="range">用于创建滑块控件:

html
<input type="range" name="volume" id="volume">

范围控件示例

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>范围输入类型</title>
</head>
<body>
    <h1>范围输入示例</h1>
    
    <form>
        <fieldset>
            <legend>设置选项</legend>
            
            <!-- 音量控制 -->
            <label for="volume">音量:</label>
            <input type="range" id="volume" name="volume" 
                   min="0" max="100" value="50" step="1">
            
            <!-- 亮度调节 -->
            <label for="brightness">屏幕亮度:</label>
            <input type="range" id="brightness" name="brightness" 
                   min="0" max="100" value="80" step="5">
            
            <!-- 价格区间 -->
            <label for="price-range">价格范围:</label>
            <input type="range" id="price-range" name="price-range" 
                   min="0" max="5000" value="1000" step="100">
        </fieldset>
        
        <button type="submit">应用设置</button>
    </form>
</body>
</html>

范围控件属性

html
<form>
    <!-- 基本范围控件 -->
    <input type="range" name="basic" min="0" max="100" value="50">
    
    <!-- 小步长范围 -->
    <input type="range" name="precise" min="0" max="1" step="0.01" value="0.5">
    
    <!-- 大范围控件 -->
    <input type="range" name="large" min="0" max="10000" step="100" value="5000">
    
    <!-- 负值范围 -->
    <input type="range" name="negative" min="-100" max="100" value="0">
</form>

3.3.6 日期时间输入类型

日期输入(input type="date")

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>日期输入类型</title>
</head>
<body>
    <h1>日期时间输入示例</h1>
    
    <form>
        <fieldset>
            <legend>时间信息</legend>
            
            <!-- 日期选择 -->
            <label for="birthday">出生日期:</label>
            <input type="date" id="birthday" name="birthday" 
                   min="1900-01-01" max="2024-12-31">
            
            <!-- 时间选择 -->
            <label for="meeting-time">会议时间:</label>
            <input type="time" id="meeting-time" name="meeting-time" 
                   min="09:00" max="18:00" step="1800">
            
            <!-- 日期时间选择 -->
            <label for="appointment">预约时间:</label>
            <input type="datetime-local" id="appointment" name="appointment" 
                   min="2024-01-01T00:00" max="2024-12-31T23:59">
            
            <!-- 周选择 -->
            <label for="project-week">项目周:</label>
            <input type="week" id="project-week" name="project-week">
            
            <!-- 月份选择 -->
            <label for="report-month">报告月份:</label>
            <input type="month" id="report-month" name="report-month" 
                   min="2024-01" max="2024-12">
        </fieldset>
        
        <button type="submit">确定时间</button>
    </form>
</body>
</html>

各种日期时间类型

html
<form>
    <!-- 完整日期 -->
    <input type="date" name="date" value="2024-01-01">
    
    <!-- 时间 -->
    <input type="time" name="time" value="14:30">
    
    <!-- 本地日期时间 -->
    <input type="datetime-local" name="datetime" value="2024-01-01T14:30">
    
    <!-- 月份 -->
    <input type="month" name="month" value="2024-01">
    
    <!-- 周 -->
    <input type="week" name="week" value="2024-W01">
    
    <!-- 带限制的日期 -->
    <input type="date" name="limited" min="2024-01-01" max="2024-12-31">
</form>

3.3.7 颜色选择器(input type="color")

基本语法

<input type="color">用于创建颜色选择器:

html
<input type="color" name="theme-color" id="theme-color">

颜色选择示例

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>颜色输入类型</title>
</head>
<body>
    <h1>颜色选择示例</h1>
    
    <form>
        <fieldset>
            <legend>主题设置</legend>
            
            <!-- 主题色选择 -->
            <label for="primary-color">主色调:</label>
            <input type="color" id="primary-color" name="primary-color" 
                   value="#007bff">
            
            <!-- 背景色选择 -->
            <label for="bg-color">背景颜色:</label>
            <input type="color" id="bg-color" name="bg-color" 
                   value="#ffffff">
            
            <!-- 文字颜色 -->
            <label for="text-color">文字颜色:</label>
            <input type="color" id="text-color" name="text-color" 
                   value="#333333">
        </fieldset>
        
        <button type="submit">应用主题</button>
    </form>
</body>
</html>

颜色值格式

html
<form>
    <!-- 默认蓝色 -->
    <input type="color" name="blue" value="#0000ff">
    
    <!-- 默认红色 -->
    <input type="color" name="red" value="#ff0000">
    
    <!-- 默认绿色 -->
    <input type="color" name="green" value="#00ff00">
    
    <!-- 默认黑色 -->
    <input type="color" name="black" value="#000000">
    
    <!-- 默认白色 -->
    <input type="color" name="white" value="#ffffff">
</form>

基本语法

<input type="search">用于创建搜索输入框:

html
<input type="search" name="query" id="query">

搜索框示例

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>搜索输入类型</title>
</head>
<body>
    <h1>搜索输入示例</h1>
    
    <form action="/search" method="get">
        <!-- 网站搜索 -->
        <label for="site-search">站内搜索:</label>
        <input type="search" id="site-search" name="q" 
               placeholder="请输入搜索关键词" required>
        <button type="submit">搜索</button>
    </form>
    
    <form action="/filter" method="get">
        <!-- 产品筛选 -->
        <fieldset>
            <legend>产品搜索</legend>
            
            <label for="product-search">产品名称:</label>
            <input type="search" id="product-search" name="product" 
                   placeholder="搜索产品">
            
            <label for="brand-search">品牌:</label>
            <input type="search" id="brand-search" name="brand" 
                   placeholder="搜索品牌">
        </fieldset>
        
        <button type="submit">搜索产品</button>
    </form>
</body>
</html>

搜索框特性

html
<form>
    <!-- 基本搜索框 -->
    <input type="search" name="search" placeholder="搜索...">
    
    <!-- 带历史记录的搜索 -->
    <input type="search" name="search" list="search-history">
    <datalist id="search-history">
        <option value="HTML5">
        <option value="CSS3">
        <option value="JavaScript">
        <option value="React">
        <option value="Vue">
    </datalist>
    
    <!-- 自动完成搜索 -->
    <input type="search" name="search" autocomplete="on">
    
    <!-- 实时搜索 -->
    <input type="search" name="live-search" placeholder="实时搜索">
</form>

3.3.9 新增输入类型的综合应用

完整表单示例

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>HTML5新增输入类型综合示例</title>
</head>
<body>
    <h1>用户注册表单</h1>
    
    <form action="/register" method="post">
        <fieldset>
            <legend>基本信息</legend>
            
            <!-- 邮箱 -->
            <label for="email">邮箱地址:</label>
            <input type="email" id="email" name="email" required 
                   placeholder="user@example.com">
            
            <!-- 电话 -->
            <label for="phone">手机号码:</label>
            <input type="tel" id="phone" name="phone" required 
                   pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}" 
                   placeholder="138-0000-0000">
            
            <!-- 个人网站 -->
            <label for="website">个人网站:</label>
            <input type="url" id="website" name="website" 
                   placeholder="https://www.example.com">
            
            <!-- 年龄 -->
            <label for="age">年龄:</label>
            <input type="number" id="age" name="age" 
                   min="18" max="100" required>
        </fieldset>
        
        <fieldset>
            <legend>偏好设置</legend>
            
            <!-- 主题颜色 -->
            <label for="theme">主题颜色:</label>
            <input type="color" id="theme" name="theme" value="#007bff">
            
            <!-- 通知频率 -->
            <label for="frequency">通知频率:</label>
            <input type="range" id="frequency" name="frequency" 
                   min="0" max="10" value="5" step="1">
            
            <!-- 生日 -->
            <label for="birthday">生日:</label>
            <input type="date" id="birthday" name="birthday" 
                   min="1920-01-01" max="2006-01-01">
            
            <!-- 首选联系时间 -->
            <label for="contact-time">首选联系时间:</label>
            <input type="time" id="contact-time" name="contact-time" 
                   min="09:00" max="21:00">
        </fieldset>
        
        <fieldset>
            <legend>搜索偏好</legend>
            
            <!-- 兴趣关键词 -->
            <label for="interests">兴趣关键词:</label>
            <input type="search" id="interests" name="interests" 
                   placeholder="输入您感兴趣的内容">
        </fieldset>
        
        <button type="submit">注册</button>
        <button type="reset">重置</button>
    </form>
</body>
</html>

移动端优化

html
<form>
    <h2>移动端优化的表单</h2>
    
    <!-- 移动端键盘优化 -->
    <input type="email" name="email" placeholder="邮箱" 
           autocomplete="email" autocapitalize="off">
    
    <input type="tel" name="phone" placeholder="电话" 
           autocomplete="tel">
    
    <input type="url" name="website" placeholder="网站" 
           autocomplete="url" autocapitalize="off">
    
    <input type="number" name="amount" placeholder="金额" 
           inputmode="decimal">
    
    <input type="search" name="search" placeholder="搜索" 
           autocomplete="off" autocorrect="off">
</form>

3.3.10 浏览器兼容性和回退方案

特性检测

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>兼容性处理示例</title>
</head>
<body>
    <h1>兼容性处理</h1>
    
    <form>
        <!-- 基本回退方案 -->
        <label for="email">邮箱(如不支持会回退为text类型):</label>
        <input type="email" id="email" name="email" 
               placeholder="user@example.com">
        
        <!-- 带有备用方案的日期选择 -->
        <label for="date">日期:</label>
        <input type="date" id="date" name="date" 
               placeholder="YYYY-MM-DD" pattern="[0-9]{4}-[0-9]{2}-[0-9]{2}">
        
        <!-- 数字输入的回退 -->
        <label for="number">数字:</label>
        <input type="number" id="number" name="number" 
               pattern="[0-9]+" placeholder="请输入数字">
        
        <!-- 颜色选择的回退 -->
        <label for="color">颜色:</label>
        <input type="color" id="color" name="color" 
               value="#000000" pattern="#[0-9a-fA-F]{6}">
    </form>
</body>
</html>

渐进增强示例

html
<form>
    <fieldset>
        <legend>渐进增强的表单</legend>
        
        <!-- 在不支持的浏览器中会显示为普通文本框 -->
        <label for="modern-email">现代邮箱输入:</label>
        <input type="email" id="modern-email" name="email" 
               required placeholder="example@domain.com">
        
        <!-- 带验证模式的回退 -->
        <label for="modern-phone">电话号码:</label>
        <input type="tel" id="modern-phone" name="phone" 
               pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}" 
               title="请输入格式:XXX-XXXX-XXXX">
        
        <!-- 日期输入的回退 -->
        <label for="modern-date">选择日期:</label>
        <input type="date" id="modern-date" name="date" 
               min="2024-01-01" max="2024-12-31" 
               placeholder="请选择日期">
    </fieldset>
</form>

本节要点回顾

  • 邮箱输入(email):自动验证邮箱格式,移动端显示@键盘
  • 网址输入(url):验证URL格式,要求包含协议前缀
  • 电话输入(tel):移动端显示数字键盘,可配合pattern验证
  • 数字输入(number):提供数字验证和步进控制,支持min、max、step属性
  • 范围输入(range):创建滑块控件,适用于数值范围选择
  • 日期时间类型:包括date、time、datetime-local、week、month等
  • 颜色选择器(color):提供原生颜色选择界面
  • 搜索框(search):语义化的搜索输入,可能提供搜索历史

相关学习资源

常见问题FAQ

Q: 如果浏览器不支持某个输入类型会怎样?

A: 不支持的浏览器会将新增输入类型回退为普通的text类型,基本功能仍然可用,只是失去了特殊的验证和界面特性。

Q: 如何为不支持的浏览器提供验证?

A: 可以使用pattern属性配合正则表达式进行验证,同时结合title属性提供用户提示,这在所有浏览器中都有效。

Q: 移动端使用这些输入类型有什么优势?

A: 移动端会根据输入类型自动显示相应的虚拟键盘,比如email类型会显示包含@符号的键盘,tel类型显示数字键盘,提升用户体验。

Q: number类型和text类型有什么区别?

A: number类型会进行数值验证,只允许输入数字,提供步进按钮,支持min、max、step属性,而text类型接受任何文本输入。

Q: 如何自定义日期输入的格式?

A: HTML5的date类型使用标准的YYYY-MM-DD格式,显示格式由浏览器和用户的区域设置决定。如需自定义格式,可能需要使用JavaScript库或保持使用text类型配合pattern验证。


下一节预览:下一节我们将学习第3章第4节 - 其他表单元素,重点介绍textarea、select、datalist等表单控件的使用方法。