mirror of
https://github.com/wahyd4/ant-design.git
synced 2026-08-16 00:06:26 +10:00
441 lines
19 KiB
HTML
441 lines
19 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
|
<meta name="format-detection" content="telephone=no">
|
|
<meta name="description" content="一个 UI 设计语言"/>
|
|
<title>
|
|
表单 - Ant Design
|
|
</title>
|
|
<link rel="icon" href="https://t.alipayobjects.com/images/T1QUBfXo4fXXXXXXXX.png" type="image/x-icon">
|
|
<link rel="shortcut icon" href="https://t.alipayobjects.com/images/T1QUBfXo4fXXXXXXXX.png" type="image/x-icon">
|
|
|
|
<link rel="stylesheet" href="../../dist/demo.css">
|
|
<script src="https://as.alipayobjects.com/g/component/??console-polyfill/0.2.2/index.js,es5-shim/4.5.7/es5-shim.min.js,es5-shim/4.5.7/es5-sham.min.js,html5shiv/3.7.2/html5shiv.min.js,media-match/2.0.2/media.match.min.js,jquery/1.11.3/jquery.min.js,bluebird/3.1.1/bluebird.min.js"></script>
|
|
<script>
|
|
(function() {
|
|
window.ANT_COMPONENTS = [];
|
|
window.InstantClickChangeFns = [];
|
|
ANT_COMPONENTS.push({
|
|
title: 'Pagination',
|
|
desc: '分页'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Affix',
|
|
desc: '固钉'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Badge',
|
|
desc: '徽标数'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Breadcrumb',
|
|
desc: '面包屑'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Button',
|
|
desc: '按钮'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Calendar',
|
|
desc: '日历'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Carousel',
|
|
desc: '走马灯'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Cascader',
|
|
desc: '级联选择'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Checkbox',
|
|
desc: '多选框'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Collapse',
|
|
desc: '折叠面板'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'DatePicker',
|
|
desc: '日期选择框'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Dropdown',
|
|
desc: '下拉菜单'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Form',
|
|
desc: '表单'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Icon',
|
|
desc: '图标'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'InputNumber',
|
|
desc: '数字输入框'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Layout',
|
|
desc: '布局'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Menu',
|
|
desc: '导航菜单'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Message',
|
|
desc: '全局提示'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Modal',
|
|
desc: '对话框'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Notification',
|
|
desc: '通知提醒框'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Alert',
|
|
desc: '警告提示'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Popconfirm',
|
|
desc: '气泡确认框'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Popover',
|
|
desc: '气泡卡片'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Progress',
|
|
desc: '进度条'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'QueueAnim',
|
|
desc: '进出场动画'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Radio',
|
|
desc: '单选框'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Select',
|
|
desc: '选择器'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Slider',
|
|
desc: '滑动输入条'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Spin',
|
|
desc: '加载中'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Steps',
|
|
desc: '步骤条'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Switch',
|
|
desc: '开关'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Table',
|
|
desc: '表格'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Tabs',
|
|
desc: '标签页'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Tag',
|
|
desc: '标签'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'TimePicker',
|
|
desc: '时间选择框'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Timeline',
|
|
desc: '时间轴'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Tooltip',
|
|
desc: '文字提示'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Transfer',
|
|
desc: '穿梭框'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Tree',
|
|
desc: '树形控件'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'TreeSelect',
|
|
desc: '树选择'
|
|
});
|
|
ANT_COMPONENTS.push({
|
|
title: 'Upload',
|
|
desc: '上传'
|
|
});
|
|
// fix ie location origin
|
|
// http://stackoverflow.com/questions/22564167/window-location-origin-gives-wrong-value-when-using-ie
|
|
if (!window.location.origin) {
|
|
window.location.origin = window.location.protocol + "//"
|
|
+ window.location.hostname
|
|
+ (window.location.port ? ':' + window.location.port : '');
|
|
}
|
|
var i = location.pathname.split('/').lastIndexOf('ant-design');
|
|
if (i > 0) {
|
|
window.rootUrl = location.origin + location.pathname.split('/').slice(0, 2+1).join('/');
|
|
} else {
|
|
window.rootUrl = location.origin;
|
|
}
|
|
})();
|
|
</script>
|
|
<script>
|
|
window.antdVersion = {
|
|
latest: '0.12.12'
|
|
};
|
|
</script>
|
|
<script src="../../dist/demo.js"></script>
|
|
|
|
</head>
|
|
<body >
|
|
<header id="header" class="clearfix">
|
|
<a class="logo" href="../..">
|
|
<img width="60" src="https://t.alipayobjects.com/images/rmsweb/T1B9hfXcdvXXXXXXXX.svg">
|
|
Ant Design
|
|
</a>
|
|
<div class="search">
|
|
<div id="autoComplete"></div>
|
|
</div>
|
|
<nav class="nav" tabindex="-1">
|
|
<span class="bar"></span>
|
|
<ul>
|
|
<li class="">
|
|
<a href="../..">首页</a>
|
|
</li>
|
|
<li class="">
|
|
<a href="../practice/cases">实践</a>
|
|
</li>
|
|
<li class="current">
|
|
<a href="./navigation">模式</a>
|
|
</li>
|
|
<li class="">
|
|
<a href="../react/introduce">组件</a>
|
|
</li>
|
|
<li class="">
|
|
<a href="../spec/introduce">语言</a>
|
|
</li>
|
|
<li class="">
|
|
<a href="../resource/download">资源</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
<div class="nav-phone-icon"></div>
|
|
</header>
|
|
<div class="main-wrapper">
|
|
|
|
<aside class="aside-container">
|
|
<ul>
|
|
<li class="">
|
|
<a href="./"
|
|
class="nav-link-disabled">
|
|
典型页面
|
|
<span class="chinese"></span>
|
|
</a>
|
|
</li>
|
|
<li class="">
|
|
<a href="navigation"
|
|
class="">
|
|
导航
|
|
<span class="chinese"></span>
|
|
</a>
|
|
</li>
|
|
<li class="current">
|
|
<a href="form"
|
|
class="">
|
|
表单
|
|
<span class="chinese"></span>
|
|
</a>
|
|
</li>
|
|
<li class="">
|
|
<a href="list"
|
|
class="">
|
|
列表
|
|
<span class="chinese"></span>
|
|
</a>
|
|
</li>
|
|
<li class="">
|
|
<a href="table"
|
|
class="">
|
|
表格
|
|
<span class="chinese"></span>
|
|
</a>
|
|
</li>
|
|
<li class="">
|
|
<a href="complex-table"
|
|
class="">
|
|
表格:复杂数据
|
|
<span class="chinese"></span>
|
|
</a>
|
|
</li>
|
|
<li class="">
|
|
<a href="advanced-search"
|
|
class="">
|
|
高级搜索
|
|
<span class="chinese"></span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</aside>
|
|
|
|
<section class="main-container">
|
|
<article class="markdown">
|
|
<h1>表单 <span class="subtitle"></span></h1>
|
|
|
|
<p>作为获取用户输入的重要交互方式,表单也承担将问题和答案进行配对的角色。</p>
|
|
<p>设计者进行表单设计时,应当注意这几点:</p>
|
|
<ol>
|
|
<li><p>确保用户了解要提供什么信息,以及为什么要提供这些信息。</p>
|
|
<p>为初级用户/偶尔访问的用户提供白话作为『标签』;为领域专家提供专业术语作为『标签』。当需要用户提供敏感信息时,通过『输入提示』来说明系统为什么要这么做,eg:需要获取身份证号码、手机号码时。</p>
|
|
</li>
|
|
<li><p>让用户能在上下文中获取信息,帮助他完成输入。</p>
|
|
<p>使用『良好的默认值』、『结构化的格式』、『输入提示』、『输入提醒』等方式,避免让用户在空白中完成输入。</p>
|
|
</li>
|
|
<li><p>对错误敏感,并尽可能宽容。</p>
|
|
<p>通过不同的『校验』规则和形式进行反馈,避免用户在点击提交后才刚刚开始『校验』,让用户提前纠正错误;依据『容错格式』,允许用户以多种格式和语法输入,eg:用户在电话号码输入框中多输入了一个空格,系统存储时可以主动删掉空格,但是不需要告诉用户这是一个错误。</p>
|
|
</li>
|
|
<li><p>不要提出不必要的问题。</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<div class="toc"><ul><li><a href="#内容">内容</a></li><li><a href="#交互">交互</a><ul><li><a href="#填空">填空</a></li><li><a href="#组合输入框">组合输入框</a></li><li><a href="#对齐方式">对齐方式</a></li><li><a href="#禁用主按钮">禁用主按钮</a></li><li><a href="#结构化的格式">结构化的格式</a></li><li><a href="#输入提示-amp-输入提醒">输入提示 & 输入提醒</a></li><li><a href="#密码加强计">密码加强计</a></li><li><a href="#校验">校验</a></li><li><a href="#字数校验框">字数校验框</a></li></ul></li><li><a href="#规格">规格</a><ul><li><a href="#间距">间距</a></li><li><a href="#输入框宽度">输入框宽度</a></li><li><a href="#对齐方式">对齐方式</a></li></ul></ul></div>
|
|
<h2 id="内容">内容<a href="#内容" class="anchor">#</a> </h2><p><img class="preview-img" align="right" alt="结构示例" src="https://os.alipayobjects.com/rmsportal/mLkQbODgVsdGUTe.png"></p>
|
|
<p>通常表单会有四个部分组成。</p>
|
|
<ol>
|
|
<li>标签</li>
|
|
<li>输入框</li>
|
|
<li>校验反馈</li>
|
|
<li>动作</li>
|
|
</ol>
|
|
<blockquote>
|
|
<p>注:<code>*</code> 表明该项为必填项。</p>
|
|
</blockquote>
|
|
<h2 id="交互">交互<a href="#交互" class="anchor">#</a> </h2><h3 id="填空">填空<a href="#填空" class="anchor">#</a> </h3><p><img class="preview-img" align="right" alt="填空示例" src="https://os.alipayobjects.com/rmsportal/SdzCTaevNMvJFBR.png"></p>
|
|
<p>在一种描述性的上下文中出现输入项,可以帮助用户理解当前的状况,以及需要提供什么数据。</p>
|
|
<h3 id="组合输入框">组合输入框<a href="#组合输入框" class="anchor">#</a> </h3><p><img class="preview-img" align="right" alt="组合输入框示例" src="https://os.alipayobjects.com/rmsportal/waStvhMnuoqqsCE.png"></p>
|
|
<p>当两个输入框关联性很强时,可以前后拼接,减少页面空间。</p>
|
|
<h3 id="对齐方式">对齐方式<a href="#对齐方式" class="anchor">#</a> </h3><p><img class="preview-img" align="right" alt="对齐方式示例" src="https://os.alipayobjects.com/rmsportal/cjHTEtXFxUSdHnE.png"></p>
|
|
<p>在页面设计表单时,按钮组必须和输入框左对齐。</p>
|
|
<h3 id="禁用主按钮">禁用主按钮<a href="#禁用主按钮" class="anchor">#</a> </h3><p>当输入框非常少时(一般少于 3 个),如果用户没有在必填项中输入内容,可禁用『提交』等主按钮;当输入框非常多时(超过 5 项以上),不建议禁用主按钮。</p>
|
|
<p><br></p>
|
|
<p><img class="preview-img" align="right" alt="未达字符标准时,主按钮禁用状态" src="https://os.alipayobjects.com/rmsportal/VabHKlbouFxSQXz.png"></p>
|
|
<p><img class="preview-img" align="right" alt="达到字符标准时,主按钮可用状态" src="https://os.alipayobjects.com/rmsportal/usdFxJmWDawqUuq.png"></p>
|
|
<p>当输入框非常少时,用户一输入就会有反馈,因而主按钮的禁用规则非常清晰,容易被用户理解。</p>
|
|
<p><br></p>
|
|
<p><img class="preview-img" align="right" alt="不禁用示例" src="https://os.alipayobjects.com/rmsportal/GwZhvOuXmwqUIUW.png"></p>
|
|
<p>当输入框非常多时(尤其是输入项中交叉了必填项和非必填项),整个反馈链路冗长又复杂,禁用规则难以被识别,容易引起困惑。</p>
|
|
<h3 id="结构化的格式">结构化的格式<a href="#结构化的格式" class="anchor">#</a> </h3><p><img class="preview-img" align="right" alt="结构化的格式示例" src="https://os.alipayobjects.com/rmsportal/SQgGfreRAqPZPsm.png"></p>
|
|
<p>用户对输入的内容很熟悉,且系统不希望接受任何偏离期望的格式。</p>
|
|
<h3 id="输入提示-amp-输入提醒">输入提示 & 输入提醒<a href="#输入提示-amp-输入提醒" class="anchor">#</a> </h3><p><img class="preview-img" align="right" alt="输入提示示例" description="在输入框激活后,输入提示一直出现至该输入框失去焦点。" src="https://os.alipayobjects.com/rmsportal/cTlmdEprGSzMZfs.png">
|
|
<img class="preview-img" align="right" alt="输入提醒示例" description="在输入框激活后,输入提醒不要马上消失,等用户完成第一个词输入后再消失。" src="https://os.alipayobjects.com/rmsportal/QPhvLWfMbLTvjRw.png"></p>
|
|
<p>输入提示:不希望在标签上放置太多文字进行解释,同时只有标签又会引起误解。</p>
|
|
<p>输入提醒:提醒用户该控件的目的或所需格式,由于在用户输入后提醒就会消失,所以适用在用户对内容比较熟悉时。</p>
|
|
<h3 id="密码加强计">密码加强计<a href="#密码加强计" class="anchor">#</a> </h3><p><img class="preview-img" align="right" alt="密码强度示例" src="https://os.alipayobjects.com/rmsportal/wKpOgeyyoOUeCrk.png"></p>
|
|
<p>提供关于密码强度和有效性的及时反馈,适用在注册页面时的密码输入框。</p>
|
|
<h3 id="校验">校验<a href="#校验" class="anchor">#</a> </h3><p><img class="preview-img" align="right" description="输入时的实时校验。" src="https://os.alipayobjects.com/rmsportal/urCdIJFuNYCenqH.png">
|
|
<img class="preview-img" align="right" description="输入框失去焦点后的校验。" src="https://os.alipayobjects.com/rmsportal/KkcSBkbTJirIxCw.png"></p>
|
|
<p><img class="preview-img" align="right" description="点击『提交』后,系统将处理结果直接在页面上进行反馈(统计错误数量和标记错误内容)。" src="https://os.alipayobjects.com/rmsportal/PLdlPvaebRdJOgu.png"></p>
|
|
<p>通过不同的『校验』规则和形式进行反馈,避免用户在点击提交后才刚刚开始『校验』,让用户提前纠正错误。</p>
|
|
<h3 id="字数校验框">字数校验框<a href="#字数校验框" class="anchor">#</a> </h3><p><img class="preview-img" align="right" alt="字数校验框示例" src="https://os.alipayobjects.com/rmsportal/JxzQIRfMCtMjuaH.png"></p>
|
|
<p>用于统计当前输入长度,以及是否超过系统阈值。</p>
|
|
<h2 id="规格">规格<a href="#规格" class="anchor">#</a> </h2><h3 id="间距">间距<a href="#间距" class="anchor">#</a> </h3><p><img class="preview-img" align="right" alt="间隔示例" src="https://os.alipayobjects.com/rmsportal/dlTiHzZvCGRbMzL.png"></p>
|
|
<p>典型表单的间隔规范。</p>
|
|
<h3 id="输入框宽度">输入框宽度<a href="#输入框宽度" class="anchor">#</a> </h3><p><img class="preview-img" align="right" alt="正确示例" src="https://os.alipayobjects.com/rmsportal/vypllNQZsEHRszB.png" good>
|
|
<img class="preview-img" align="right" alt="错误示例" src="https://os.alipayobjects.com/rmsportal/XSLwnrlLbKFjiNj.png" bad></p>
|
|
<p>当内容可预知,可以根据内容长短进行定义其落在多少个栅格上。</p>
|
|
<p><br></p>
|
|
<h3 id="对齐方式">对齐方式<a href="#对齐方式" class="anchor">#</a> </h3><p>无论左对齐、右对齐还是顶部对齐,都有其优缺点和应用场景,所以正确的解决方案取决于具体目标和制约因素,诸如:希望用户加快或者降低填写速度(有时设计者希望用户深思熟虑每个输入)、屏幕显示的限制、本地化考虑等多种因素。</p>
|
|
<p><br></p>
|
|
<p><img class="preview-img" align="right" alt="右对齐(推荐)" src="https://os.alipayobjects.com/rmsportal/UxGJfenYBKvkEEB.png"></p>
|
|
<p>右对齐(推荐)。</p>
|
|
<ul>
|
|
<li>优点:节约垂直空间。</li>
|
|
<li>缺点:降低可读性;标签长度和输入框弹性小。</li>
|
|
<li>场景:既要减少垂直空间,又要加快填写速度。</li>
|
|
</ul>
|
|
<p><br></p>
|
|
<p><img class="preview-img" align="right" alt="顶部对齐" src="https://os.alipayobjects.com/rmsportal/AsyyNKormNdEMLi.png"></p>
|
|
<p>顶部对齐。</p>
|
|
<ul>
|
|
<li>优点:有最快的浏览和处理速度;标签长度弹性大。</li>
|
|
<li>缺点:非常占垂直空间。</li>
|
|
<li>场景:希望用户快速填写表单,完成任务。</li>
|
|
</ul>
|
|
<p><br></p>
|
|
<p><img class="preview-img" align="right" alt="左对齐" src="https://os.alipayobjects.com/rmsportal/eqUyDExbRlAQoas.png"></p>
|
|
<p>左对齐。</p>
|
|
<ul>
|
|
<li>优点:文字开头按阅读视线对齐,方便阅读;节约垂直空间。</li>
|
|
<li>缺点:填写速度慢;标签长度和输入框弹性小。</li>
|
|
<li>场景:希望用户放慢速度,仔细思考表单中的每个输入框。</li>
|
|
</ul>
|
|
|
|
</article>
|
|
</section>
|
|
|
|
</div><footer id="footer">
|
|
<ul>
|
|
<li>
|
|
<h2>GitHub</h2>
|
|
<a target="_blank "href="https://github.com/ant-design/ant-design">仓库</a>
|
|
<a target="_blank" href="https://github.com/ant-design/antd-init">脚手架</a>
|
|
<a target="_blank" href="http://ant-tool.github.io/">开发工具</a>
|
|
</li>
|
|
<li>
|
|
<h2>关于我们</h2>
|
|
<a target="_blank" href="https://github.com/ant-ued/blog">博客 - Ant UED</a>
|
|
</li>
|
|
<li>
|
|
<h2>联系我们</h2>
|
|
<a target="_blank" href="https://github.com/ant-design/ant-design/issues">反馈和建议</a>
|
|
<a target="_blank" href="https://gitter.im/ant-design/ant-design">讨论</a>
|
|
<a target="_blank" href="http://dwz.cn/2AF9ao">报告 Bug</a>
|
|
</li>
|
|
<li>
|
|
<div>©2015 蚂蚁金服体验技术部出品</div>
|
|
<div>文档版本:<span id="versions-select"></span></div>
|
|
</li>
|
|
</ul>
|
|
</footer>
|
|
<script data-no-instant>
|
|
if (!location.port) {
|
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
|
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
|
ga('create', 'UA-72788897-1', 'auto');
|
|
ga('send', 'pageview');
|
|
InstantClick.on('change', function() {
|
|
ga('send', 'pageview', location.pathname + location.search);
|
|
});
|
|
}
|
|
</script>
|
|
<script data-no-instant>
|
|
InstantClick.on('change', function() {
|
|
InstantClickChangeFns.forEach(function(fn) {
|
|
fn();
|
|
});
|
|
});
|
|
InstantClick.init();
|
|
</script>
|
|
</body>
|
|
</html> |