Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
用過Delphi的程序員,對Form這個詞應該比較熟悉。在Delphi中,Form被翻譯為“窗體、窗口”,作用是:為用戶提供界面,供用戶輸入信息,向用戶展示處理結果。
HTML5中也有Form,功能與Delphi中的Form差不多,用于接收用戶輸入,和服務器進行交互。不過HTML5中的Form,中文一般譯為“表單”。
Web前端,指瀏覽器上展示的HTML文件,以及HTML文件使用的CSS文件及JavaScript腳本。
Web后端,指運行在服務器上的,為Web前端提供服務的軟件,Web后端也常常被稱為Web服務器。
在HTML5中,Web前端與Web后端交互的流程一般如下:
(1)Web前端向Web后端發起HTTP請求;
(2)Web后端收到HTTP請求后,進行業務處理;
(3)Web后端向Web前端返回HTTP響應。
到目前為止,我們在HTML5中碰到的Web前端發起HTTP請求的方式有兩種:
第1種:HTML頁面通過<a>元素向用戶提供超級鏈接,用戶點擊該鏈接時,會向服務器發起請求;
第2種:HTML頁面通過表單為用戶提供輸入界面,用戶提交表單時,會向服務器發起請求。
HTTP請求有八種,對Web前端開發者來說,最常用的是GET請求和POST請求。
GET請求:向Web后端請求指定的頁面;GET請求攜帶的數據,以URL參數的形式提供;
POST請求:向Web后端提交數據,請求Web后端對數據進行處理;POST請求攜帶的數據,在請求消息體中提供。
在HTML5中,用戶點擊鏈接地址,Web前端向后端發起GET請求;
在HTML5中,用戶提交表單,Web前端可以向后端發起GET請求,也可以發起POST請求。
說明:由于目前沒有和后端服務器對接,為了便于對表單設計進行展示,下面的例子HTML文檔,都是用GET請求來提交數據。
<form>元素:表示表單;
<input>元素:表單中的輸入控件,輸入控件可以是文本框、單選框、復選框、按鈕等等;
<label>元素:表單中的標簽控件;
<button>元素:表單中的按鈕控件;
<select>與<option>元素:用于實現列表框和下拉菜單;
<textarea>元素:多行文本控件。
下面是一個可以提交文本框輸入的HTML文檔:
<!DOCTYPE html>
<html>
<head>
<title>form001</title>
<meta charset="utf-8" />
</head>
<body>
<form action="process.html" method="get">
<label>請輸入您的姓名:</label>
<input type="text" name="name" />
<br/>
<input type="submit"/>
</form>
</body>
</html>
在瀏覽器中打開該HTML文檔時,展示效果如下:
我們可以在文本框中輸入信息,例如輸入tom:
當我們點擊“提交”按鈕后,瀏覽器顯示信息如下;
可以看到,數據被提交給process.html頁面,并且附帶了一個參數name,且值為我們輸入的tom。
下面是一個可以提交單選框被選信息的HTML文檔:
<!DOCTYPE html>
<html>
<head>
<title>form002</title>
<meta charset="utf-8" />
</head>
<body>
<form action="process.html" method="get">
<label>性別:</label>
<br/>
男:<input type="radio" name="gender" value="male" />
女:<input type="radio" name="gender" value="female" />
<br/><br/>
<label>國籍:</label>
<br/>
中國:<input type="radio" name="nationality" value="Chinese" /> <br/>
美國:<input type="radio" name="nationality" value="American" /> <br/>
日本:<input type="radio" name="nationality" value="Japanese" /> <br/>
英國:<input type="radio" name="nationality" value="English" /> <br/>
其它:<input type="radio" name="nationality" value="Other" /> <br/>
<br/>
<input type="submit"/>
</form>
</body>
</html>
在瀏覽器中打開該HTML文檔時,顯示效果如下:
我們可以選擇性別和國籍,例如我們選擇“男”和“中國”:
當我們點擊“提交”按鈕后,瀏覽器顯示信息如下:
可以看到,我們選擇的信息被提交給process.html文件,并且附帶了gender參數的值為male,nationality參數的值為Chinese。
下面是一個可以提交復選框被選信息的HTML文檔;
<!DOCTYPE html>
<html>
<head>
<title>form003</title>
<meta charset="utf-8" />
</head>
<body>
<form action="process.html" method="get">
<label>請選擇您的業余愛好:</label>
<br/>
美術:<input type="checkbox" name="hobby" value="Art" /> <br/>
足球:<input type="checkbox" name="hobby" value="Football" /> <br/>
唱歌:<input type="checkbox" name="hobby" value="Singing" /> <br/>
廚藝:<input type="checkbox" name="hobby" value="Cook" /> <br/>
其它:<input type="checkbox" name="hobby" value="Other" /> <br/>
<br/>
<input type="submit"/>
</form>
</body>
</html>
在瀏覽器中打開該HTML文檔時,顯示效果如下:
我們可以選擇自己的業余愛好,例如我們選擇足球、唱歌、廚藝:
當我們點擊“提交”按鈕后,瀏覽器顯示信息如下:
可以看到,我們選擇的信息被提交給process.html文件,并且附帶了三個hobby參數,其值分別為Football,Singing和Cook。
下面是一個可以提交下拉菜單被選信息的HTML文檔;
<!DOCTYPE html>
<html>
<head>
<title>form004</title>
<meta charset="utf-8" />
</head>
<body>
<form action="process.html" method="get">
<label>請選擇您的學歷:</label>
<br/>
<select name="education">
<option value="primary_school">小學</option>
<option value="junior_high_school">初中</option>
<option value="senior_high_school">高中</option>
<option value="college">大學</option>
</select>
<br/><br/>
<label>請選擇您的興趣愛好:</label>
<br/>
<select name="hobby" multiple="true">
<option value="Art">美術</option>
<option value="Football">足球</option>
<option value="Singing">唱歌</option>
<option value="Cook">廚藝</option>
<option value="Other">其它</option>
</select>
<br/><br/>
<input type="submit"/>
</form>
</body>
</html>
在瀏覽器中打開該HTML文檔時,顯示效果如下:
我們可以單選我們的學歷,也可以通過按下Shift+鼠標鍵多選我們的興趣。例如我們選擇“初中”學歷,選擇“美術”和“廚藝”兩項愛好:
當我們點擊“提交”按鈕后,瀏覽器顯示信息如下:
可以看到,我們選擇的信息被提交給process.html文件,并且附帶了education參數和兩個hobby參數,education的值為junior_high_school,hobby的值為Art和Cook。
上面列舉了幾種控件的HTML5表單設計方法,其它的控件也大概差不多,把多個控件組合在同一個<form>元素中的方法也是相同的,這里就不再贅述了。
.表格的制作
1、表格元素–<table>
表格中的行–<tr>
表格中的列–<td>
表格中的表頭–【居中/加粗】
table標記的邊框–border
table標記的寬度–width
table標記的高度–height
table標記的水平對齊方式–align
table標記的表格背景色–bgcolor
table標記的表格邊框色–bordercolor
table標記的表格中的內容與邊框之間的距離–cellpadding
table標記的表格中的邊框與邊框之間的距離–cellspacing【默認是1px】
tr標記的align屬性–設置當前行的水平對齊方式
tr標記的bgcolor屬性–設置當前行的背景色
tr標記的valign屬性–設置當前行的垂直對齊方式【top/middle/bottom】
td標記的align屬性–設置當前列的水平對齊方式
td標記的bgcolor屬性–設置當前列的背景色
td標記的valign屬性–設置當前列的垂直對齊方式【top/middle/bottom】
合并單元格
水平方向合并單元格–跨列—colspan
以下是計算器的控制面板代碼
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>計算器的控制面板</title>
</head>
<body>
<table border="1" cellspacing="10px" cellpadding="20px"
align="center" bgcolor="aliceblue">
<tr><td colspan="5" height="40px" align="right"><font size="7"><b>0</b></font></td></tr>
<tr align="center">
<td>MC</td>
<td>MR</td>
<td>MS</td>
<td>M+</td>
<td>M-</td>
</tr>
<tr align="center">
<td><-</td>
<td>CE</td>
<td>C</td>
<td>+/-</td>
<td>√</td>
</tr>
<tr align="center">
<td>7</td>
<td>8</td>
<td>9</td>
<td>/</td>
<td>%</td>
</tr>
<tr align="center">
<td>4</td>
<td>5</td>
<td>6</td>
<td>*</td>
<td>1/x</td>
</tr>
<tr align="center">
<td>1</td>
<td>2</td>
<td>3</td>
<td>-</td>
<td rowspan="2" bgcolor="yellow">=
</td>
</tr>
<tr align="center">
<td colspan="2">0</td>
<td>.</td>
<td>+</td>
</tr>
</table>
</body>
</html>
看成品:
2. 列表元素
2.1 有序列表
ol—有序列表
li—列表中的每一項【條目】
默認的標志是有順序的數字
我們可以通過ol的type屬性來修改標志
1–有順序的數字
a–有順序的小寫字母
A–有順序的大寫字母
i–有順序的小寫羅馬數字
I–有順序的大寫羅馬數字
start屬性設置書順序的開始值
2.2 無序列表
ul—無序列表
li—列表中的每一項【條目】
默認的標志是實心點
我們可以通過ul的type屬性來修改標志
circle–圓形【?!?/p>
disc----實心點[默認]
square–正方形
none–沒有標志
2.3 自定義列表
dl—自定義列表
dt—自定義列表的頭
dd—子項目
以下是有序,無序,和自定義列表
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>列表</title>
</head>
<body>
<ul type="none">
<li>無序列表</li>
<li>無序列表</li>
<li>無序列表</li>
</ul>
<ol type="A">
<li>有序列表</li>
<li>有序列表</li>
<li>有序列表</li>
</ol>
<dl>
<dt>自定義列表</dt>
<dt>自定義列表</dt>
<dt>自定義列表</dt>
</dl>
</body>
</html>
3. 表單<form>
主要負責采集信息的,可以將采集的信息提交。
form的屬性
action—指定表單數據的后端處理程序
method----指定表單數據的提交方式【get[默認]/post】
get提交數據會將被處理的數據跟隨在請求地址之后
被提交的數據255個字符
https://www.baidu.com/s?&wd=html
post提交數據會將被處理的數據封裝到http協議的頭
https://www.baidu.com/s
被提交的數據沒有限制
通常情況下提交文件只能用post
enctype屬性規定在將表單數據發送到服務器之前如何對其進行編碼。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<table border="1" align="center" cellpadding="20px" cellspacing="0">
<tr>
<td>application/x-www-form-urlencoded</td>
<td>在發送前對所有字符進行編碼(默認)。</td>
</tr>
<tr>
<td>multipart/form-data</td>
<td>不對字符編碼。當使用有文件上傳控件的表單時,該值是必需的。
</td>
</tr>
<tr>
<td>text/plain</td>
<td>將空格轉換為 "+" 符號,但不編碼特殊字符。</td>
</tr>
</table>
</body>
</html>
表單元素
input 文本框/密碼框/單選按鈕/復選框…
seletc 下拉列表
textarea 文本域—富文本編輯器
家好,今天我將和大家一起動手做個練習,使用 Flexbox 布局創建一個響應式的表單,本篇文章不會和大家生硬的去介紹 Flexbox 知識點,而是通過實踐的形式去理解 Flexbox 布局。剛學前端時,大家會不會覺得CSS太容易了,沒有過多實踐,就開始上手實踐JS和相關的前端框架了,一遇到一些樣式的問題,就開始慌了,無從下手。CSS學好用好,也是需要花功夫的,不要因為CSS簡單了,就輕視了,畢竟作為一個專業的前端,要給大家呈現產品美感,更多考驗的是 CSS 的功底。
好了,給大家嘮叨多了,讓我們回到本節的案例,雖然例子簡單,但是要做漂亮了,是需要花功夫的,這里我們不使用媒介查詢屬性,完全使用 Flexbox 布局就能創建一個完美的響應式表單,在動手之前,我們來看看,我們例子長什么樣?
好了,基于上面的長相,我們開始動手創建表單的 HTML 結構:
僅此而已,我們通過定義了兩個無序列表創建了一個簡單表單結構,示例代碼如下:
<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 容器,在這個例子中,我們在以下元素進行應用:
此外,我們需要讓這些彈性元素在 cross-axis 軸方向垂直居中,并支持溢出換行:
.flex-outer li,
.flex-inner {
display: flex;
flex-wrap: wrap;
align-items: center;
}
2、接下來我們來定義彈性盒子的寬度,我們先從定義 .flex-outer 列表的元素開始 。
我們的需求是這樣的:
通過這個需求,我們應該明確表單寬度至少為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 的樣式,在定義基礎表單樣式時,我們設置了.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;
}
使用這個屬性,能讓我們很好的均勻的對齊元素,唯一不足時,每行項目不相等時,最后一行的對齊方式也許不是你期望看到的。
如上圖所示,也許你希望最后兩個元素相鄰顯示,不是分的這么開,我么該如何做呢?
通過以上學習,我們有兩點需要明確的是:
完成上述基本的架子后,我們需要讓表單更加漂亮些,比如添加樣式,定義文字大小、盒子的內間距、寬度等,由于文章篇幅有限,這里就不過多介紹了,最終完成的 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/
最后分享給大家一張圖,方便大家記憶和學習彈性盒子布局。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。