freeCodeCamp之form表单
免费学习编程的网站 freeCodeCamp(🔥) - 官方版(英文)
通过编写注册表单学习 HTML 表单
效果展示
form表单相关知识点
表单域
<form method="post" action='https://register-demo.freecodecamp.org' name='message'>
</form>
标签:form,双标签,容器级,填写的表单信息可以提交到后台服务器
属性:
属性名 | 属性值 | 描述 |
---|---|---|
action | url | 指定接收并处理表单数据的服务器程序的url地址 |
method | get/post | 用于设置提交表单数据的提交方式 |
name | 自定义名称 | 规定表单的名称 |
表单控件
标签
input,单标签,相当于一个特殊的文本
属性
name属性
元素的名称,也就是name的值代表当前input元素的名字;
value属性
对于不同的输入类型,value 属性的用法也不同:
- type=“button”, “reset”, “submit” - 定义按钮上的显示的文本
- type=“text”, “password”, “hidden” - 定义输入字段的初始值
- type=“checkbox”, “radio”, “image” - 定义与输入相关联的值
注释:<input type="checkbox">
和<input type="radio">
中必须设置 value 属性。
注释:value 属性无法与<input type="file">
一同使用。
maxlength属性
定义input元素中可输入的最长字符数。
pattern 属性
pattern 属性规定用于验证 <input>
元素的值的正则表达式。
注意:pattern 属性适用于下面的 input 类型:text、search、url、tel、email 和 password。
<input id="new-password" name="new-password" type="password" pattern="[a-z0-5]{8,}" required />
checked属性
checked属性规定在页面加载时应该被预先选定的input元素,也可以在页面加载后,通过javascript进行设置
checked属性只能与type="radio"或type="checkbox"的input元素配合使用
disabled属性
disabled属性规定应该禁用input元素。被禁用的字段是不能修改的,也不可以使用tab按键切换到该字段,但可以选中或拷贝其文本
- 注意1:disabled属性无法与type="hidden"的input元素一起使用
- 注意2:对于IE7-浏览器必须设置为disabled=“disabled”,而不可以直接设置disabled,否则使用javascript控制时将失效
required 属性
如果没有填写必需字段就提交表单,会展示一个错误信息
type属性
text: 定义提供用户输入的当行文本的输入框,不能输入多行文字,常用value定义默认的输入文字
<input id="first-name" name="first-name" type="text" required />
password: 字符会被做掩码处理(显示星号或实心圆)
<input id="new-password" name="new-password" type="password" pattern="[a-z0-5]{8,}" required />
email: 类型只允许包含 @ 以及域名中包含 . 的电子邮件。 password 类型会屏蔽输入,如果网站没有启用 HTTPS 会警告。
<input id="email" name="email" type="email" required />
数字字段: 用于输入数字的字段,其中min允许的最小值,max为允许的最大值,value规定默认值,还有step可规定合法数字间隔。
<input id="age" type="number" name="age" min="13" max="120" >
radio: 提供用户点击选择的单选框
<input id="personal-account" type="radio" name="account-type" >
<input id="business-account" type="radio" name="account-type" >
若发现两组单选框都可以选择,故在设置单选框的时候要注意,同一组的单选框之间必须是互斥的关系。
解决方式:给同一组单选框设置相同的name属性
checkbox: 提供给用户点击选择的多选框,也就是可以在有限数量的选项中,选择多个,同一组复选框做好也设置相同的name属性
<input id="terms-and-conditions" type="checkbox" required name="terms-and-conditions" >
submit: 提交按钮,将填写的数据提交到form指定的后台服务器中,并重置清空form中填写的信息
距离父级 form 元素最近的第一个 type 为 submit 的 input 元素会被当作提交按钮。
<input type="submit" value="Submit" >
file: 文件上传,可以将本地文件上传给服务器、添加multiple属性,可选择多个文件
<input id="profile-picture" type="file" name="file" >
<input id="profile-picture" type="file" name="file" multiple='multiple'>
此外还有
普通按钮 type=“button”
<input type="button" value="确认" name="bt" onClick="">
提交按钮不需要设置onclick参数,在单击提交按钮时可以向服务器发送表单数据,数据会发送到表单的action属性中指定的页面,value属性中的值为按钮上显示的文字。
重置按钮 type=“reset”:
<input type="reset" value="重置" name="reset"/>
重置按钮的作用是点击之后表单会刷新回到默认状态,在value属性中输入的值为按钮上显示的文本;
图像按钮 type=“image”
<input type="image" src="图片URL" name="Yes" width="80" height="25" />
<input type="image" src="图片URL" name="No" width="80" height="25" />
这个功能是将图片转为图片形式按钮,其中src是链接图片的路径,name为图片名称,width为图片宽度,height为图片高度,当按下图片按钮会以name中的值向服务器发送信息。
文本域:
textarea,双标签,可以输入多行文本区域
<textarea id="bio" name="bio" rows="3" cols="30" placeholder="I like coding on the beach..."></textarea>
- rows:行,属性值:数字,数字是几显示文本框显示的最大行数,超过行数会被隐藏,出现滚动条
- cols:列,属性值,数字,数字是几,表示每一行显示最大字节(一个汉字按2字节计算)
- placeholder 属性规定可描述输入字段预期值的简短的提示信息(比如:一个样本值或者预期格式的短描述)。
下拉菜单
select 提前设置一些选项,通过点击可以选择其中一项
select,选择,定义下拉标签的整体结构
option,选项,定义下拉菜单的每一项,可以多项
<select id="referrer" name="referrer">
<option value="">(select one)</option>
<option value="1">freeCodeCamp News</option>
<option value="2">freeCodeCamp YouTube Channel</option>
<option value="3">freeCodeCamp Forum</option>
<option value="4">Other</option>
</select>
提交带有选择菜单的表单向服务端发送的信息 value 并不是预期的。 因此,每一个 option 需要指定一个 value 属性。 如果没有指定,向服务器默认提交的是 option 内的文本。
label标签
所有的表单元素都可以通过绑定其他内容去扩大触发点击范围,这时需要使用一个label标签。
作用:是帮表单元素定义标注(标记)。
绑定方法一:
- 给表单元素设置id属性
- 将需要绑定的其他内容用label标签包裹
- 给label标签设置for属性,属性值为之前设置的id值
<input type="checkbox" name="hobby" id="swimming">
<label for="swimming">游泳</label>
绑定方法二:
- 将绑定内容和表单元素写在一起,即label嵌套input标签
<label><input type="checkbox" name="hobby">游泳</label>
此处按照无障碍最佳实践,将 input 元素和 label 元素使用 for 属性联系起来。
<fieldset>
<label for="first-name">Enter Your First Name: <input id="first-name" name="first-name" type="text" required /></label>
<label for="last-name">Enter Your Last Name: <input id="last-name" name="last-name" type="text" required /></label>
<label for="email">Enter Your Email: <input id="email" name="email" type="email" required /></label>
<label for="new-password">Create a New Password: <input id="new-password" name="new-password" type="password" pattern="[a-z0-5]{8,}" required /></label>
</fieldset>
表单美化
body
body {
width: 100%;
height: 100vh;
margin: 0;
background-color: #1b1b32;
color: #f5f6f7;
font-family: Tahoma;
font-size: 16px;
}
width: 100%;
width : 100%在使用绝对定位的情况下,width 为设置了relation的盒子的宽度
height: 100vh;
vh是css中的一个相对长度单位,相对于视窗的高度, 视窗被均分为100单位的vh,即1vh永远等于当前视窗高度的百分之一。
因此,100vh就等于当前浏览器的视窗高度,即浏览器内部的可视区域的高度大小。
设置height:100vh,不论元素没有内容,该元素都会被撑开与屏幕高度一致
margin: 0;
设置对象上下间距为0,左右自动。此处是为了消除浏览器的默认样式
background-color: #1b1b32;
定义背景颜色
color: #f5f6f7;
定义字体颜色
font-family: Tahoma;
定义字体名称
font-size: 16px;
对应字体大小
h1, p
h1, p {
margin: 1em auto;
text-align: center;
}
给 h1 和 p 元素添加一个值为 1em auto 的 margin 属性使其居中显示。 同样也设置其文字 center 居中对齐显示。
em大小是根据父元素字体大小设置的。
body的默认font-size = 16px
对于它的子节点,所以此时,1em = 16px
form
form {
width: 60vw;
max-width: 500px;
min-width: 300px;
margin: 0 auto;
padding-bottom: 2em;
}
vw:
相对于视口的宽度, 视口被均分为 100 单位的vw,1vw等于视口宽度的1%。
margin: 0 auto;
代表的的意思是水平居中
padding-bottom: 2em;
padding-bottom属性设置一个元素的底部填充
fieldset
fieldset {
border: none;
padding: 2rem 0;
border-bottom: 3px solid #3b3b4f;
}
border: none;
把border设为“none”即没有,浏览器解析“none”时将不作出渲染动作,即不会消耗内存值。
padding: 2rem 0;
rem的大小是根据html根目录下的字体大小进行计算的。
fieldset的根节点是body的默认font-size = 16px
2rem = 16px*2=32px
border-bottom: 3px solid #3b3b4f;
CSS border-bottom 简写属性把下边框的所有属性设置到一个声明中。可以按顺序设置如下属性:border-bottom-width、border-bottom-style、border-bottom-color。
fieldset:last-of-type
fieldset:last-of-type {
border-bottom: none;
}
最后一个 fieldset 元素的边框看起来有点不合适。 你可以使用 last-of-type CSS 伪类选择特定类型的最后一个元素
label
label {
display: block;
margin: 0.5rem 0;
}
display: block;
元素显示为块级元素
input,textarea,select
input,
textarea,
select {
margin: 10px 0 0 0;
width: 100%;
min-height: 2em;
}
注意这里 width: 100%;
使其宽度填满父级元素的宽度,则把 label 文本挤到了表单元素的上方
input, textarea
input, textarea {
background-color: #0a0a23;
border: 1px solid #0a0a23;
color: #ffffff;
}
设置 input 和 textarea 元素的 background-color 为 #0a0a23,使其更好地融入背景
.inline
<fieldset>
<label for="personal-account"><input id="personal-account" type="radio" name="account-type" class="inline" /> Personal Account</label>
<label for="business-account"><input id="business-account" type="radio" name="account-type" class="inline" /> Business Account</label>
<label for="terms-and-conditions" name="terms-and-conditions">
<input id="terms-and-conditions" type="checkbox" required name="terms-and-conditions" class="inline" /> I accept the <a href="https://www.freecodecamp.org/news/terms-of-service/">terms and conditions</a>
</label>
</fieldset>
.inline {
width: unset;
margin: 0 0.5em 0 0;
vertical-align: middle;
}
只选择 .inline 元素,并设置其 width 为unset。 这会清除之前设置的 input 元素的 width: 100% 规则。
此时.inline 元素在同行里过于高了。
设置其 vertical-align 属性为 middle 来修复这一点。
属性选择器
input[type="file"] {
padding: 1px 2px;
}
为 type 为 file 的 input 设置样式,使它的 padding 与另一个 input 元素的相同。
评论