整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

HTML表单|如何在HTML页面创建表单的文本域和密码域?

TML 表单用于收集不同类型的用户输入,它是一个包含表单元素的区域。

表单元素是允许用户在表单中输入内容,比如:文本域(textarea)、下拉列表、单选框(radio-buttons)、复选框(checkboxes)等等。今天我们主要来说说文本域和密码域这两个部分,希望对大家学习有所帮助哟!

本文福利后台回复【学习】即可获得Python、HTML等编程学习资料

HTML 表单

表单使用表单标签 <form> 来设置:

<form>

First name: <input type="text" name="firstname"><br>

Last name: <input type="text" name="lastname">

</form>


HTML 表单 - 输入元素

多数情况下被用到的表单标签是输入标签(<input>)。输入类型是由类型属性(type)定义的。

如何在 HTML 页面创建文本域?

用户可以在文本域中写入文本,参考代码如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>菜鸟教程(runoob.com)</title>

</head>

<body>

<form action="">

First name: <input type="text" name="firstname"><br>

Last name: <input type="text" name="lastname">

</form>

<p><b>注意:</b> 表单本身是不可见的。并且注意一个文本字段的默认宽度是20个字符。</p>

</body>

</html>

运行结果为

如何创建 HTML 的密码域?

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>菜鸟教程(runoob.com)</title>

</head>

<body>

<form action="">

Username: <input type="text" name="user"><br>

Password: <input type="password" name="password">

</form>

<p><b>注意:</b> 密码字段中的字符是隐藏的(显示为星号或圆圈)。</p>

</body>

</html>

运行结果如下


戳了解更多免费领取HTML试听课~

lt;form> 标签用于为用户输入创建 HTML 表单。

表单能够包含 input 元素,比如文本字段、复选框、单选框、提交按钮等等。

表单还可以包含 menus、textarea、fieldset、legend 和 label 元素。

表单用于向服务器传输数据。

下面小编为大家介绍几个常用的表单标签。


<datalist>标签

这个标签规定了 <input> 元素可能的选项列表。

一般会被用来在为<input> 元素提供"自动完成"的特性。用户能看到一个下拉列表,里边的选项是预先定义好的,将作为用户的输入数据。

我们来演示一个案例,大家就知道怎么用了:

上面这个小代码,我们看得出,input标签的list属性值和datalist标签的id是一样的,没错,它们就是这样来相互关联起来的。当它们结合起来之后,不仅可以像select标签一样可以通过下拉来选择已有的选项,还可以根据用户输入的字符,对选项进行匹配筛选。

效果图如下:

有了datalist标签,我们实现这种效果起来十分简单,不需要任何的JavaScript代码也能轻松实现。



<output>标签:

标签定义不同类型的输出。比如脚本的输出、一些加减乘除的运算结果,我们都可以使用这个标签。

我们来举个例子:输入的数字乘以2后得到的结果,我们用output输出显示。

我们用oninput属性监听着表单的变化,并把得到的结果赋值到output标签的value。我们来看看效果图:



其中,output标签是可以离开form表单标签的,但是,如果你这样做的话,必须给output标签添加form属性,其属性值是与其相关联form表单的id。

我们来将output移到form表单的外面试试:

<form id="demo" oninput="b.value = parseInt(a.value)*2">
 <input type="number" name="a"> 乘以2=
</form>
<output form="demo" name="b" for="a"></output>

跟上面的代码有几处不同之处,form标签多了一个id,值为“demo”,output标签被移到了form标签外面,不再是form标签的子节点,变成了兄弟节点(当然你可以把它移到文档的其他位置)。output标签还多了一个form属性,此时,它的值正好是form标签的id值:“demo”。这种写法,代码同样是奏效的。



<keygen>标签

这个标签相信大家很少用到,但是也是为了学习,我们来了解一下就好。

这个标签规定用于表单的密钥对生成器字段。当提交表单时,私钥存储在本地,公钥发送到服务器,这种机制是专为使用基于Web的证书管理系统。

我在MDN(Mozilla Developer Network)的网站上看到了关于它的一些介绍:

There iscurrently discussion among Web browser makers whether to keep this feature ornot. Until a decision is reached, it is better to continue to consider thisfeature as deprecated and going away.

大意是:目前各大浏览器厂商还在讨论是否要保留它,在讨论结束之前,你最好还是别用它。

而另一段话则是更加直接明了:

This featurehas been removed from the Web standards. Though some browsers may still supportit, it is in the process of being dropped. Do not use it in old or newprojects. Pages or Web apps using it may break at any time.

大意是:虽然有些浏览器还支持它,但是这个特性已经被移除出web标准了,以后别使用它了。


家好,今天我将和大家一起动手做个练习,使用 Flexbox 布局创建一个响应式的表单,本篇文章不会和大家生硬的去介绍 Flexbox 知识点,而是通过实践的形式去理解 Flexbox 布局。刚学前端时,大家会不会觉得CSS太容易了,没有过多实践,就开始上手实践JS和相关的前端框架了,一遇到一些样式的问题,就开始慌了,无从下手。CSS学好用好,也是需要花功夫的,不要因为CSS简单了,就轻视了,毕竟作为一个专业的前端,要给大家呈现产品美感,更多考验的是 CSS 的功底。

表单项目长啥样?

好了,给大家唠叨多了,让我们回到本节的案例,虽然例子简单,但是要做漂亮了,是需要花功夫的,这里我们不使用媒介查询属性,完全使用 Flexbox 布局就能创建一个完美的响应式表单,在动手之前,我们来看看,我们例子长什么样?

创建表单 HTML 结构

好了,基于上面的长相,我们开始动手创建表单的 HTML 结构:

  • 创建 .flex-outer 无序列表包裹整个表单元素。
  • 接着在内部创建 .flex-inner 无序列包裹复选表单元素。
  • 几乎所有的表单都有其对应的 label 元素,方便扩大表单元素的点击区域。

仅此而已,我们通过定义了两个无序列表创建了一个简单表单结构,示例代码如下:

<div class="container">
 <form>
  <ul class="flex-outer">
    <li>
      <label for="first-name">First Name</label>
      <input type="text" id="first-name" placeholder="Enter your first name here">
    </li>
    <li>
      <label for="last-name">Last Name</label>
      <input type="text" id="last-name" placeholder="Enter your last name here">
    </li>
    <li>
      <label for="email">Email</label>
      <input type="email" id="email" placeholder="Enter your email here">
    </li>
    <li>
      <label for="phone">Phone</label>
      <input type="tel" id="phone" placeholder="Enter your phone here">
    </li>
    <li>
      <label for="message">Message</label>
      <textarea rows="6" id="message" placeholder="Enter your message here"></textarea>
    </li>
    <li>
      <p>Age</p>
      <ul class="flex-inner">
        <!-- list items here -->
      </ul>
    </li>
    <li>
      <button type="submit">Submit</button>
    </li>
  </ul>
 </form>
</div>

接下来我们创建 .flex-inner 元素及年龄选择部分,示例代码如下:

<ul class="flex-inner">
  <li>
    <input type="checkbox" id="twenty-to-twentynine">
    <label for="twenty-to-twentynine">20-29</label>
  </li>
  <li>
    <input type="checkbox" id="thirty-to-thirtynine">
    <label for="thirty-to-thirtynine">30-39</label>
  </li>
  <!-- more list items here -->
</ul>

完成以上结构后,我们的页面长这样:


基本的模样有了,我们需要借助CSS进行美化,长这样,我们怎么好意思拿的出手。

定义表单样式

1、接下来,我们来定义 flex 容器,在这个例子中,我们在以下元素进行应用:

  • .flex-outer 列表中的元素
  • 在 .flex-inner 的 checkboxes 元素

此外,我们需要让这些弹性元素在 cross-axis 轴方向垂直居中,并支持溢出换行:

.flex-outer li,
.flex-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
}

2、接下来我们来定义弹性盒子的宽度,我们先从定义 .flex-outer 列表的元素开始 。

我们的需求是这样的:

  • 每个 labels 的宽度至少为120px, 最多为220px。
  • 每个表单元素的宽度至少为220px

通过这个需求,我们应该明确表单宽度至少为340px, lable 与对应的表单元素水平并排显示。

上述的值,你可以根据自己的需求自行修改

最终我们完成后的代码如下所示:

.flex-outer > li > label,
.flex-outer li p {
  flex: 1 0 120px;
  max-width: 220px;
}
 
.flex-outer > li > label + *,
.flex-inner {
  flex: 1 0 220px;
}

完成后的效果如下图所示:


定义提交按钮样式

我们继续来定义提交按钮的样式,其也是弹性元素,基本的样式代码如下:

.flex-outer li button {
  margin-left: auto;
  padding: 8px 16px;
  border: none;
  background: #333;
  color: #f2f2f2;
  text-transform: uppercase;
  letter-spacing: .09em;
  border-radius: 2px;
}

处理 Checkboxes 的样式

接着我们继续处理复选框 Checkboxes 的样式,在定义基础表单样式时,我们设置了.flex-inner 容器的最小宽度为220px。

1、首先我们来处理下每个 Checkbox 的宽度,设置其父元素 li 标签的宽度为100px:

.flex-inner li {
  width: 100px;
}

2、接着我们来使用 justify-content 属性来定义元素在 main-axis 的显示方式,这里我使用了 space-between 对齐方式。

.flex-inner {
  justify-content: space-between;
}

使用这个属性,能让我们很好的均匀的对齐元素,唯一不足时,每行项目不相等时,最后一行的对齐方式也许不是你期望看到的。

如上图所示,也许你希望最后两个元素相邻显示,不是分的这么开,我么该如何做呢?

  • 首先移除 justify-content 的对齐属性
  • 修正每个弹性盒子的宽度,比如宽度为50%
  • 使用媒介查询器,当屏幕宽度大于 992px 时,我们添加弹性盒子的宽度,让其宽度为25%。

通过以上学习,我们有两点需要明确的是:

  • flex 布局为我们提供了极大的灵活性,让我们可以快速的构建漂亮表格。
  • 上述CSS具体的值只是适用本示例,你可以根据自己的需求进行调整。例如,我们这里的年龄复选框定义的宽度很小,才100px, 如果他们的宽度不同的话,你可以使用 flex: 1 100px 来定义宽度,弹性盒子能足够智能化的处理对齐问题。

最终完成的样式

完成上述基本的架子后,我们需要让表单更加漂亮些,比如添加样式,定义文字大小、盒子的内间距、宽度等,由于文章篇幅有限,这里就不过多介绍了,最终完成的 CSS 代码如下所示:

body {
  font: normal 18px/1.5 "Fira Sans", "Helvetica Neue", sans-serif;
  background: #3AAFAB;
  color: #fff;
  padding: 50px 0;
}

.container {
  width: 80%;
  max-width: 1200px;
  margin: 0 auto;
}

.container * {
  box-sizing: border-box;
}

.flex-outer,
.flex-inner {
  list-style-type: none;
  padding: 0;
}

.flex-outer {
  max-width: 800px;
  margin: 0 auto;
}

.flex-outer li,
.flex-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
}

.flex-inner {
  padding: 0 8px;
  justify-content: space-between;  
}

.flex-outer > li:not(:last-child) {
  margin-bottom: 20px;
}

.flex-outer li label,
.flex-outer li p {
  padding: 8px;
  font-weight: 300;
  letter-spacing: .09em;
  text-transform: uppercase;
}

.flex-outer > li > label,
.flex-outer li p {
  flex: 1 0 120px;
  max-width: 220px;
}

.flex-outer > li > label + *,
.flex-inner {
  flex: 1 0 220px;
}

.flex-outer li p {
  margin: 0;
}

.flex-outer li input:not([type='checkbox']),
.flex-outer li textarea {
  padding: 15px;
  border: none;
}

.flex-outer li button {
  margin-left: auto;
  padding: 8px 16px;
  border: none;
  background: #333;
  color: #f2f2f2;
  text-transform: uppercase;
  letter-spacing: .09em;
  border-radius: 2px;
}

.flex-inner li {
  width: 100px;
}

小节

到这里,本示例就完成了,我们用最少最简单的方式使用 flexbox 布局完成了响应式表单的创建,大家可以访问以下网址,在线体验效果:

https://www.qianduandaren.com/demo/flexform/

最后分享给大家一张图,方便大家记忆和学习弹性盒子布局。