前端隨筆 —— Form 的原生部件

初之發表於2019-05-14

前言

最近在學Chrome的擴充套件,在寫單選框的時候突然忘了radio怎麼合併成一個組。。。元件庫用多了基本的HTML標籤都忘了。 然後就去MDN上查。發現了兩個個沒見過的標籤<fieldset> <legend>

看了下文件,原來<fieldset>用於對<form>中的控制元素分組,<legend>用於表示其父元素內容的標題。

用法如下
<!-- 使用 fieldset, legend, and label 的表單 -->
<form action="" method="post">
  <fieldset form="options" name="selectArea">
        <legend>選擇區域</legend>
            <label><input name="open" type="radio" checked value="1">開啟</label>
            <label><input name="open" type="radio" value="0">關閉</label>
        </fieldset>
</form>
複製程式碼
效果如下
選擇區域

mmp,看得我十分鬱悶。想當年要實現這樣的邊框效果,得在外面套個<div>再搞個<span>設定絕對定位.這一個<fieldset>套一個<legend>還不用css。

正文

原生部件

input

type="text"

這個和type="password"應該是最常用到的,就不用多說了.

type="email"

瀏覽器會對type設定為email<input>標籤進行檢查,是否符合郵件地址的格式,在顯示上於type="text"的input標籤沒有什麼區別。

type="search"

type設定為search<input>標籤在輸入值後會在右邊顯示一個X號用於清空內容。除此之外,在顯示上於type="text"的input標籤沒有什麼區別。

tips: 在IE11, Chrome, EDGE會顯示X號。而FireFox始終不會顯示

type="tel"

MDN的文件說因為世界範圍記憶體在各種各樣的電話號碼格式,所以對type為tel的<input>不會做任何限制。在顯示上於type="text"的input標籤沒有什麼區別。

建議最好在需要的地方設定為tel,因為在移動裝置上可能會出現專門用於輸入電話號碼的虛擬鍵盤,個人感覺能顯著提升使用者體驗(九宮格的數字鍵盤好方便?)。

type="url"

瀏覽器會對type設定為url<input>標籤進行檢查,是否符合url的格式,在顯示上於type="text"的input標籤沒有什麼區別。

type="number"

瀏覽器會對type設定為number<input>標籤進行檢查,只允許輸入浮點樹,右側有按鈕用來控制增加/減少值。

<fieldset form="options" name="Number">
    <legend>Number</legend>
    <label><input type="number" name="age" id="age" step="2"></label>
</fieldset>
複製程式碼
Number

type="range"

通過把type設定為range可以建立一個滑塊。之後需要設定maxminstep三個屬性,分別控制最大最小值和步長。

<fieldset form="options" name="Range">
    <legend>Range</legend>
    <label><input type="range" name="beans" id="beans" min="0" max="500" step="10"></label>
</fieldset>
複製程式碼
Range

順便看一下各個瀏覽器對range的預設樣式。

  • 只有IE11提供了確切數字的顯示。
  • 微軟的兩款瀏覽器的預設樣式明顯好看一點
  • Chrome對預設樣式是最不上心的(所有部件的預設樣式都這樣。。。)
    前端隨筆 —— Form 的原生部件

type="datatime-local/month/time/week/data"

目前Chrome,Edge,Opera支援全部的日期選擇器型別,FireFox 66.0.3支援timedate,IE系列全部不支援。

EDGE正是微軟親兒子,幾乎所有部件EDGE的預設樣式是最好看。?

<fieldset form="options" name="DateTime">
    <legend>DateTime</legend>
    <label><input type="datetime-local" name="datetime" id="datetime"></label>
    <label><input type="month" name="month" id="month"></label>
    <label><input type="time" name="time" id="time"></label>
    <label><input type="week" name="week" id="week"></label>
    <label><input type="date" name="date" id="date"></label>
</fieldset>
複製程式碼
DateTime

type="color"

拾色器,這個除了IE其他瀏覽器都支援了,不用相容IE的話可以用一下。

<fieldset form="options" name="Color">
    <legend>Color</legend>
    <label><input type="color" name="color" id="color"></label>
</fieldset>
複製程式碼
Color

附上EDGE美圖一張,其他瀏覽器都是呼叫windows內建的拾色器,只有EDGE是內建在瀏覽器裡的。

前端隨筆 —— Form 的原生部件

type="file"

不多說,都用過吧。

type="image"

這屬性真的是看得我一臉懵逼。設定為image並把src設定為圖片路徑,然後點選圖片會傳送點選位置相對於左上角的座標。我真的不知道這是做什麼用的。

<fieldset form="options" name="Image">
    <legend>Image</legend>
    <label><input type="image" alt="Click me!" src="images/icon.png" width="80" height="30" /></label>
</fieldset>
複製程式碼
Image

select

關於select其實用的也是比較多的,就說一下<optgroup>

<optgroup>用於給<select>內的<option>分組。

<fieldset form="options" name="SelectGroups">
    <legend>SelectGroups</legend>
    <label for="groups"></label>
    <select id="groups" name="groups">
        <optgroup label="fruits">
            <option>Banana</option>
            <option selected>Cherry</option>
            <option>Lemon</option>
        </optgroup>
        <optgroup label="vegetables">
            <option>Carrot</option>
            <option>Eggplant</option>
            <option>Potato</option>
        </optgroup>
    </select>
</fieldset>
複製程式碼
SelectGroups

datalist

<datalist>這玩意根據MDN的介紹,作用應該類似瀏覽器的自動提示功能。比如在第一次登入網站之後瀏覽器會詢問是否儲存賬號密碼。之後再次登入的話,在點選輸入框後,會出現下拉單,讓你選擇之前儲存的賬號密碼。

<datalist>是可以用於任何需要使用者輸入文字的部件,比如<input><textarea>等。

注意:IE10以下(不包括IE10),Safari 12.1以下(不包括12.1),不受支援

<fieldset form="options" name="DataList">
    <legend>DataList</legend>
    <label><input type="text" name="myFruit" id="myFruit" list="mySuggestion"></label>
    <datalist id="mySuggestion">
        <option>Apple</option>
        <option>Banana</option>
        <option>Blackberry</option>
        <option>Blueberry</option>
        <option>Lemon</option>
        <option>Lychee</option>
        <option>Peach</option>
        <option>Pear</option>
    </datalist>
</fieldset>
複製程式碼
DataList

話說這跟單選框好像啊(撓頭)。

checkbox/radio

不多說了,應該都用過吧。

button/input type="button"

從技術上講,使用<button>元素或<input>元素定義的按鈕幾乎沒有區別。唯一的區別在於<button>內部可以插入HTML內容而<input type="button">只能通過設定value屬性插入純文字內容。

<fieldset>
<legend>Button & type="button"</legend>
<label for=“button”><label>
<button id="button" type="button">
    This an <br><strong>anonymous button</strong>
</button>

<label for=“typeButton”><label>
<input id="typeButton" type="button" value="This is an anonymous button">
</fieldset>
複製程式碼
Button & type="button"

progress

進度條

<fieldset form="options" name="Progress">
    <legend>Progress</legend>
    <progress max="100" value="75">75/100</progress>
</fieldset>
複製程式碼
Progress 75/100

meter

儀表,大概作用類似於壓力錶之類的東西,可以通過設定最優值,然後於當前值比較,高於當前值就是紅色報警什麼的。

需要先設定minmaxlowhighoptimunminmax就是最大最小值,主要是lowhigh這兩個值,他們把範圍劃分成三部分。較低範圍,中等範圍,較高範圍。

optimum的值分別在這三個範圍內的情況如下,

min < value && value < low顏色為綠色,low < value && value < high顏色為黃色,high < value && value < max顏色為紅色。 後面兩張圖展示了optimun在中等範圍和較高範圍時的策略。

前端隨筆 —— Form 的原生部件
前端隨筆 —— Form 的原生部件
前端隨筆 —— Form 的原生部件

除了IE系列瀏覽器,其他瀏覽器都支援

相關文章