- 概述 Overview
-
. inline-block
. 配合 <option> 使用;其子元素只能是 <option> block
. name-value比较特别。name写在 <select>;value 写在 <option>,也可以省略 value,系统会把 <option> 的值自动作为value
. <select>的宽度决定了<option>的宽度
. <option> 很难动态增加或减少
. 使用 <optgroup> 分组;分组标题不能选择,仅仅作为提示
属性
类别 |
说明 |
size |
显示几个option;通常不指定,以免影响页面布局 |
selected |
默认选中当前<option> |
multiple |
多选;使用较少 |
- 1. 单组下拉列表
-
<select name="school" id="school-single">
<option value="guilin">guilin</option>
<option value="xiamen">xiamen</option>
<option value="foshan">foshan</option>
<option value="haikou">haikou</option>
<option value="dongguan" selected>dongguan</option>
</select>
let single = document.querySelector("#school-single")
single.addEventListener('change', function () {
console.log(this.value);
})
- 2. 分组下拉列表 - <optgroup>
-
<select name="school" id="school-mul">
<optgroup label="college">
<option value="guilin">guilin</option>
<option value="xiamen">xiamen</option>
<option value="foshan">foshan</option>
<option value="haikou">haikou</option>
<option value="dongguan" selected>dongguan</option>
</optgroup>
<optgroup label="unit">
<option value="gl">gl</option>
<option value="sh">sh</option>
</optgroup>
</select>
let mul = document.querySelector("#school-mul")
mul.addEventListener('change', function () {
console.log(this.value);
})
- 样式 Style
-
. 可以设置 <select> 和 <option> 的字体颜色、大小、选项选中,其它可以设置的属性比较少
. 很少直接使用。都是指定
MDN
- appearance
以便重新设计 - notoriously difficult to style productively with CSS
它是一个替换元素(replaced element),其内部结构是由浏览器控制的,不允许通过这些伪元素进行自定义
默认样式
定制样式
- [] 初始化样式
-
去除边框、轮廓、背景
字体和颜色继承父级
默认加重;各选项不加重
select {
outline: none;
border: none;
font: inherit;
color: inherit;
background-color: transparent;
font-weight: 600;
padding: 0 10px;
}
select option {
font-weight: normal;
}
- [] 定制样式1 - 不增加元素
-
隐去默认样式
使用边框border
使用背景图片代替小三角,不能使用伪元素
增加hover和focus设计
.select {
appearance: none;
display: block;
width: 100%;
border: 1px solid #aaa;
background-color: #fff;
border-radius: 6px;
padding: 4px 10px;
background-image: url(../imgs/down.png);
background-repeat: no-repeat;
background-position: right 10px top 10px;
}
.select:hover {
border-color: #888;
}
.select:focus {
border-color: var(--main-color-blue);
box-shadow: 0 0 4px rgba(0, 0, 0, .2);
}
- [] 定制样式2 - 额外增加1个容器、1个遮罩和1个标记
-
容器元素:提供小箭头的定位依据
遮罩元素:接收选中的数据,增加更多控制;原有<select>被覆盖
值和显示的数据分别设计;只显示长的备选信息中的关键信息
增加事件,动态修改选择内容
-
<div class="custom-wrap">
<select name="school" id="school-custom">
<option value="桂林">广西壮族自治区桂林市</option>
<option value="厦门">福建省厦门市</option>
<option value="佛山">广东省佛山市</option>
<option value="海口" selected>海南省海口市</option>
</select>
<div class="mask"></div>
<span class="iconfont icon-unfoldmore"></span>
</div>
-
增加一个容器包裹表单元素 <select>;相对定位
增加一个遮罩元素 mask,显示选中的值/城市名;绝对定位到容器前部;取消事件响应
增加一个标记元素,显示上下箭头,提示用户可以操作;绝对定位到容器后部;取消事件响应
设置 <select> 字体颜色透明/不显示
设置 <option> 颜色为黑色
增加 JavaScript;一开始获取 <select> 的值给遮罩元素 mask
为 <select> 增加 change 事件,每次改变时修改遮罩 mask 的文本
增加其它设计,如 :hover
- [] 定制样式3 - 全新定制,自己写一个,详细情况,请访问 下拉列表
-
完全抛弃表单元素,从0开始设计
无法响应表单事件