HTML中使用 <select> 和 <option> 元素創(chuàng)建選擇框。而 <select> 元素對(duì)應(yīng)的是 HTMLSelectElement 接口,<option> 元素對(duì)應(yīng)的是 HTMLOptionElement 接口。這兩個(gè)接口都是通過(guò) HTMLElement 接口從其他 HTML 元素共享所有屬性和方法。
先從 <select> 元素對(duì)應(yīng)的 HTMLSelectElement 接口開(kāi)始介紹專屬的屬性和方法。
下面介紹一下<select> 元素根據(jù)不同選中狀態(tài)下的value屬性的值:
<select name="location" id="selLocation">
<option value="Sunnyvale, CA">Sunnyvale</option>
<option value="Los Angeles, CA">Los Angeles</option>
<option value="Mountain View, CA">Mountain View</option>
<option value="">China</option>
<option>Australia</option>
</select>
當(dāng)選中選項(xiàng)框中的第一項(xiàng)時(shí),<select> 元素的 value 值為 "Sunnyvale, CA";而選中第四項(xiàng)時(shí),<select> 元素的 value 值為 "",因?yàn)樵擁?xiàng)的 value 屬性是空字符串;選中最后一項(xiàng),則 value 值為 "Australia",因?yàn)樵?<option> 元素沒(méi)有指定 value 屬性。
因此,根據(jù)以上的例子,<select> 元素的value屬性根據(jù)以下規(guī)則獲取值:
再介紹 <option> 元素對(duì)應(yīng)的 HTMLOptionElement 接口專屬屬性和方法。
這里強(qiáng)調(diào)一下,<select> 元素的 change 事件與其它表單字段是不一樣的。其它表單字段會(huì)在自己的值改變后觸發(fā) change 事件,然后字段失去焦點(diǎn)。而 <select> 會(huì)在選中一項(xiàng)時(shí)立即觸發(fā) change 事件。
對(duì)于只允許選擇一項(xiàng)的 <select> 元素,獲取選項(xiàng)最簡(jiǎn)單的方式是使用 <select> 元素的 selectIndex 屬性,如下面的例子:
let selectedOption = selectbox.options[selectbox.selectedIndex];
獲取到 <option> 元素后,就可以根據(jù) <option> 元素的屬性和方法獲取想要的信息。
對(duì)于允許多選的 <select> 元素,selectedIndex 屬性就像只允許選擇一項(xiàng)一樣。設(shè)置 selectedIndex 會(huì)移除所有選項(xiàng),只選擇指定的項(xiàng),而獲取 selectedIndex 只會(huì)返回選中的第一項(xiàng)的索引。
選項(xiàng)還可以通過(guò)取得選項(xiàng)的引用并將其 selected 屬性設(shè)置為 true 來(lái)選中。例如,以下代碼會(huì)選中 <select> 的第一項(xiàng):
selectbox.options[0].selected = true;
與 selectedIndex 不同,設(shè)置選項(xiàng)的 selected 屬性不會(huì)在多選時(shí)移除其他選項(xiàng),從而可以動(dòng)態(tài)選擇任意多個(gè)選項(xiàng)。如果修改單選框中選項(xiàng)的 selected 屬性,則其他選項(xiàng)會(huì)被移除。要注意的是,把 selected 屬性設(shè)置為 false 對(duì)單選框沒(méi)有影響。
通過(guò) selected 屬性可以確定選擇框中哪個(gè)選項(xiàng)被選中。要取得所有選中項(xiàng),需要循環(huán)選項(xiàng)集合逐一檢測(cè) selected 屬性,比如:
function getSelectedOptions(selectbox){
let result = new Array();
for (let option of selectbox.options) {
if (option.selected) {
result.push(option);
}
}
return result;
}
可以使用 JavaScript 動(dòng)態(tài)創(chuàng)建選項(xiàng)并將它們添加到選擇框。首先,可以使用 DOM 方法,如下所示:
let newOption = document.createElement("option");
newOption.appendChild(document.createTextNode("Option text"));
newOption.setAttribute("value", "Option value");
selectbox.appendChild(newOption);
以上代碼創(chuàng)建了一個(gè)新的<option>元素,使用文本節(jié)點(diǎn)添加文本,設(shè)置其 value 屬性,然后將其添加到選擇框。添加到選擇框之后,新選項(xiàng)會(huì)立即顯示出來(lái)。
瀏覽器原生提供 Option() 構(gòu)造函數(shù)創(chuàng)建 HTMLOptionElement 實(shí)例:
new Option(text, value, defaultSelected, selected) : HTMLOptionElement
來(lái)看案例:
let newOption = new Option("Option Text", "Option Value", true);
創(chuàng)建之后,需要將該實(shí)例添加到 HTML 的 <select> 元素中,這里有兩種添加方法:
這里詳細(xì)介紹下 add() 方法:
add(element: HTMLOptionElement | HTMLOptGroupElement, before?: HTMLElement | number | null): void;
如果想要符合所有瀏覽器的規(guī)范,可以傳入 undefined 作為第二個(gè)參數(shù)。
let newOption = new Option("Option text", "Option value", true);
selectbox.add(newOption, undefined);
這里注意一下 defaultSelected 和 selected 兩個(gè)參數(shù),有時(shí)候容易弄混。selected 屬性為 true 時(shí),該 <option> 當(dāng)前狀態(tài)處于已選擇狀態(tài)。defaultSelected 屬性為 true 時(shí),表示 <option> 在默認(rèn)情況下為已選擇狀態(tài),但不代表 <option> 的當(dāng)前狀態(tài)是已選擇狀態(tài)。當(dāng)頁(yè)面重置時(shí),selected 屬性值為 true 的 <option> 可能會(huì)變成未選擇狀態(tài),而 defaultSelected 屬性值為 true 的 <option> 則一定會(huì)變成已選擇狀態(tài)。
移除 <option> 元素的方法也不止一種,下面列舉的方法都可以實(shí)現(xiàn):
要清除選擇框的所有選項(xiàng),需要迭代所有選項(xiàng)并逐一移除它們,如下面例子所示:
function clearSelectbox(selectbox) {
for (let index = 0; index < selectbox.options.length;) {
selectbox.remove(0);
}
}
使用 DOM 操作中的 appendChild() 方法實(shí)現(xiàn)從一個(gè) <select> 元素中將 <option> 移到另一個(gè) <select> 元素中,這種實(shí)現(xiàn)方法會(huì)將 <option> 元素先從其父元素中移除,然后再插入指定位置。如下所示:
let selectbox1 = document.getElementById("selLocations1");
let selectbox2 = document.getElementById("selLocations2");
selecbox2.appendChild(selectbox1.options[0]);
移動(dòng)選項(xiàng)和移除選項(xiàng)都會(huì)導(dǎo)致每個(gè) <option> 的 index 屬性重置。
重排 <option> 的話,使用 DOM 操作中的 insertBefore() 方法,而移到最后位置,還是使用 appendChild() 方法較為方便。
下面的代碼演示了將一個(gè) <option> 在 <select> 中前移一個(gè)位置:
let optToMove = selectbox.options[1];
selectbox.insertBefore(optToMove, selectbox.options[optionToMove.index-1]);
這個(gè)例子首先獲得要移動(dòng) <option> 的索引,然后將其插入之前位于它前面的 <option> 之前,其中第二行代碼適用于除第一個(gè) <option> 之外的所有 <option>。下面的代碼則可以將<option>向下移動(dòng)一個(gè)位置:
let optionToMove = selectbox.options[1];
selectbox.insertBefore(optionToMove,
selectbox.options[optionToMove.index+2]);
<select> 和 <option> 是在 HTML 頁(yè)面布局時(shí),經(jīng)常使用的表單控件,學(xué)會(huì)使用與之對(duì)應(yīng)的 HTMLSelectElement 和 HTMLOptionElement 接口中的屬性和方法會(huì)很容易的操控 <select> 和 <option> 元素。借助于 DOM 操作 <select> 和 <option> 也較為方便。
置邊框最常使用border,比如這樣:
border: 1px dashed #333;
這是最常規(guī)的方法了,今天再來(lái)說(shuō)說(shuō)其他兩種方法,
這也算是一種比較常規(guī)的方法了,
outline: 1px solid;
但需要注意的是,outline是在容器的最外部,與border的渲染還是有點(diǎn)區(qū)別的,同時(shí)對(duì)比下:
border: 1px dashed #333;
outline: 1px solid;
外部實(shí)線是outline,內(nèi)部虛線是border,為了一致,可以設(shè)置outline-offset往內(nèi)縮一點(diǎn):
outline-offset: -1px;
這是本文的重點(diǎn),我也是剛get到此項(xiàng)技能,之前一直不知道background居然如此強(qiáng)大,直接上代碼:
background: linear-gradient(90deg, #333 50%, transparent 0) repeat-x 0 0px/9px 1px, #ffffff;
這里我們只設(shè)置了上面看,而且還是虛線的,做一說(shuō)明這種方式的強(qiáng)大,再把其他邊框補(bǔ)上去:
background:
linear-gradient(90deg, #333 50%, transparent 0) repeat-x 0 0px/9px 1px,
linear-gradient(90deg, #333 50%, transparent 0) repeat-x 0 100%/9px 1px,
linear-gradient(0deg, #333 50%, transparent 0) repeat-y 0 0/1px 9px,
linear-gradient(0deg, #333 50%, transparent 0) repeat-y 100% 0px/1px 9px,
#ffffff;
可見(jiàn),使用background非常的靈活,邊框的位置可以任意調(diào)整。
現(xiàn)在我們已經(jīng)掌握這幾方式,但本文的重點(diǎn)是上面這種,我們現(xiàn)在來(lái)動(dòng)手操練下:
background: linear-gradient(90deg, #29bdd9 0%, #276ace 100%) repeat-x 0 0/100% 5px
,
linear-gradient(-90deg, #29bdd9 0%, #276ace 100%) repeat-x 0 100%/100% 4px,
linear-gradient(180deg, #29bdd9 0%, #276ace 100%) repeat-y 0 0/4px 100%,
linear-gradient(0deg, #29bdd9 0%, #276ace 100%) repeat-y 100% 0/4px 100%,
#eee;
.box {
background:
linear-gradient(90deg, #333 50%, transparent 0) repeat-x,
linear-gradient(90deg, #333 50%, transparent 0) repeat-x,
linear-gradient(0deg, #333 50%, transparent 0) repeat-y,
linear-gradient(0deg, #333 50%, transparent 0) repeat-y;
background-size: 4px 1px, 4px 1px, 1px 4px, 1px 4px;
background-position: 0 0, 0 100%, 0 0, 100% 0;
}
.box:hover {
animation: linearGradientMove .3s infinite linear;
}
@keyframes linearGradientMove {
100% {
background-position: 4px 0, -4px 100%, 0 -4px, 100% 4px;
}
}
.box {
background:
linear-gradient(90deg, #FF8235,#30E8BF, #FF8235) repeat-x,
linear-gradient(90deg, #FF8235,#30E8BF, #FF8235) repeat-x,
linear-gradient(0deg, #FF8235,#30E8BF, #FF8235) repeat-y,
linear-gradient(0deg, #FF8235,#30E8BF, #FF8235) repeat-y;
background-size: 100% 8px, 100% 8px, 8px 100%, 8px 100%;
background-position: 0 0, 0 100%, 0 0, 100% 0;
}
.box:hover {
animation: linearGradientMove 1s infinite linear;
}
@keyframes linearGradientMove {
100% {
background-position: 200px 0, -200px 100%, 0 -200px, 100% 100px;
}
}
以上就是設(shè)置邊框的幾個(gè)小技巧。
參考:
https://www.cnblogs.com/coco1s/p/14291567.html
order 盒子邊框
復(fù)合屬性。設(shè)置對(duì)象邊框的特性。
盒子邊框三要素:
① 邊框粗細(xì)
② 邊框樣式
③ 邊框顏色
語(yǔ)法:border: border-width | border-style | border-color ;
邊框四邊的粗細(xì)、樣式、顏色,以及上下左右每個(gè)位置的樣式屬性都是可以單獨(dú)調(diào)整的。
邊框的顏色不是必要的,如果不指定顏色,默認(rèn)顏色為黑色,但必須為盒子指定寬高。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
width: 500px;
height: 50px;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
使用 border-style 可為盒子邊框設(shè)置樣式,以下示例為實(shí)線
/* CSS代碼 */
div{
width: 500px;
height: 50px;
border-style: solid;
}
效果:
示例 CSS 代碼
如果需要設(shè)置不同方向的樣式屬性,可以寫在一句 CSS 代碼里,比如說(shuō)下面這段代碼,上下實(shí)線,左右虛線。
/* CSS代碼 */
div{
width: 500px;
height: 50px;
border-style: solid dashed;
}
效果:
屬性值解釋none無(wú)輪廓。 border-color將被忽略,border-width計(jì)算值為0,除非邊框輪廓為圖像,即border-image。hidden隱藏邊框。IE7及以下尚不支持dotted點(diǎn)狀輪廓。IE6下顯示為dashed效果dashed虛線輪廓solid實(shí)線輪廓double雙線輪廓。兩條單線與其間隔的和等于指定的border-width值groove3D凹槽輪廓ridge3D凸槽輪廓inset3D凹邊輪廓outset3D凸邊輪廓
使用 border-width 可為盒子邊框設(shè)置粗細(xì),以下示例邊框?yàn)?5px 粗細(xì)
/* CSS代碼 */
div{
width: 500px;
height: 50px;
border-style: solid;
border-width: 5px;
}
效果
示例 CSS 代碼
如果需要設(shè)置不同方向的邊框粗細(xì),可以寫在一句 CSS 代碼里。
比如說(shuō)下面這段代碼,上下2px,右2px,左5px。
/* CSS代碼 */
div{
width: 500px;
height: 50px;
border-style: solid;
border-width:2px 2px 2px 5px;
}
效果:
可直接輸入
顏色的英文名稱
rgb值
十六進(jìn)制
使用 border-color 可為盒子邊框設(shè)置顏色,以下示例邊框顏色為紅色。
/* CSS代碼 */
div{
width: 500px;
height: 50px;
border-style: solid;
border-width:2px 2px 2px 5px;
border-color: red;
}
效果:
示例 CSS 代碼
上面有兩個(gè)示例講述如何設(shè)置不同方向的屬性,border-color 也是相同使用方法,此處就不做示例了。
如果你需要同時(shí)設(shè)置盒子的粗細(xì)、樣式、顏色,那么你可以將他們的樣式表寫在同一行代碼里。
例如:
/* CSS代碼 */
div{
border-top: 5px solid red;
}
這段代碼指定了上邊框的三個(gè)屬性:粗細(xì)、樣式、顏色
border-top 包含了:
其他同理
先來(lái)看一個(gè)示例
/* CSS代碼 */
div{
width: 100px;
height: 100px;
border-top: 50px solid red;
border-right: 50px solid blue;
border-bottom: 50px solid green;
border-left: 50px solid pink;
}
效果:
細(xì)心的你,一定發(fā)現(xiàn)了 border 的邊框四條邊交接處是斜角。
此刻我們把盒子的寬高設(shè)置為 0
/* CSS代碼 */
div{
width: 0;
height: 0;
border-top: 50px solid red;
border-right: 50px solid blue;
border-bottom: 50px solid green;
border-left: 50px solid pink;
}
效果:
是不是完完全全像四個(gè)三角形一樣。
我們只需要把上邊和左右兩邊的三角形隱藏起來(lái),它不就是一個(gè)三角形了。
為 border-color 指定 transparent 值,使盒子邊框顏色變透明
/* CSS代碼 */
div{
width: 0;
height: 0;
border-top: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 50px solid green;
border-left: 50px solid transparent;
}
效果:
把另外三條邊透明之后,就只剩一個(gè)三角形了。
完
部分資料引用自:
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。