需求

一个select下拉列表,有border, bg, 还有从设计拿来的向下的箭头。当点击的时候能有下拉列表。
大概UI如下

具体思路

需要的dom有三个

  • div ----> 作用:定位置,设置背景样式,包括border

  • select ----> 作用:点击时,弹出的下拉选项

  • span -----> 作用:显示字

dom具体是:

<div><select><span><img>

实际上的思路是这样的:select原来有个固有的下拉箭头,想要让它消失,方法有三种:一种挤出文档流,一种挡住,另一种则是让select变成透明。

挤出文档流做法有点恶心,不考虑

挡住的话,那就无法做到点击的时候出发select的点击事件(除非用js)

所以,让select变成透明。

要实现点击,那么实际上的dom层次由底到上依次是:div => span => select

所以需要设置z-index,给select设置z-index = 2, span 的z-index = 1

然后div设置relative, span和select设置absolute,让两者重合

其中只有div有背景,span和 select都没有背景且select的opacity设为0(即透明)。

现在你知道了,

用户看到背景颜色,border是div的, 看到的字是span的,点击的是select,select透明,置于span之上

Talk is cheap, show me the code

这里用了react的一个包,简洁明了,有兴趣可以去了解下

const Selectsection = styled.div`position:relative;background:linear-gradient(#F8F8F8, #FDFDFD 30%, #E8E8E8);width:300px;height:30px;float:left;border:1px solid #ececec;border-radius:4px;margin:15px 0 0 15px;> select {width:300px;height:30px;padding-left: 15px;position:absolute;font: 14px Arial;z-index:2;opacity:0;}> span {width:300px;height:30px;position:absolute;text-align: left;font: 14px Arial;cursor: pointer;z-index:1;text-indent:20px;padding-top:6px;}> div {background:url(${arrow}) 0 0 no-repeat;width:24px;height:24px;position:absolute;top:7px;right:15px;}
`class App extends Component {render() {return (<Selectsection><select><option>Please select one option...</option><option>...</option><option>...</option></select><span>Please select one option...</span><div></div></Selectsection>);}
}export default App;

巩固知识

背景颜色渐变

background:linear-gradient(#F8F8F8, #FDFDFD 30%, #E8E8E8);

设置背景颜色渐变---再也不用切背景图啦!mb当年bg_*.png这种图真的切多了

雪碧图

这里没有例子,但是做项目的时候遇到,具体是有一张图,包含了“黑,灰,红”三色的箭头
具体长宽是(12+12+12 )*12,靠你们自己脑补了。

雪碧图的运用在第四象限,即如上例,应用第一个箭头,则创建一个div,长宽为12*12,运用的样式为:

background:url(${arrow}) 0 0 no-repeat;

如要运用第二个箭头,那么运用的样式为:

background:url(${arrow}) 0 -24px no-repeat;

自行类推

另一套方案

holy shit差点忘了俺自己的土村方法,不过挺有意思的。

dom仍旧是:

<div><select><span><img>

不同在于,div没有bg, border的功能,仅有作为定位的功能,bg, border移到span中去,即

  • div ----> 作用:定位置

  • select ----> 作用:点击时,弹出的下拉选项

  • span -----> 作用:显示字,设置bg, border样式

那么会问了,span在前,你点击的时候,点的是span而不是selet,那么如何在不适用js的情况下,出发用户click select的效果呢?

这里有个样式:

pointer-events:none;

将这个样式apply给span,同时span与select完全贴合覆盖(width, height, 字体大小, indent),当点击span的时候,就会穿透点击select

UI 积累之select section相关推荐

  1. element UI中的select选择器的change方法需要传递多个值

    如上图是element UI的一个基本的select选择器 根据element UI的官网事件调用,有一下几种: 如果直接调用上述事件,不传任何参数,则可以获取到当前选中的值(因为默认会将event参 ...

  2. elementui下拉框选择图片_Element UI系列:Select下拉框实现默认选择

    [编程题目]一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值★★ (自己没有做出来!!) 45.雅虎(运算.矩阵): 2.一个整数数组,长度为 n,将其分为 m 份,使各份 ...

  3. html表单ui图片,semantic-ui 表单(示例代码)

    1.定义表单 先看一个基础的表单,再讲解一下: Submit semantic中的表单,其实就是在form标签中加一个ui form的class即可 下面的使用div将input包含主要是为了好理解, ...

  4. JQUERY插件学习之jQuery UI

    jQuery UI:http://jqueryui.com/ jQuery UI介绍: jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互 ...

  5. HTML怎么在li中加select标签,自定义UL LI选择框似乎在其他HTML元素后面

    我似乎无法弄清楚为什么我的自定义UL LI选择框出现在其他HTML元素后面.你如何解决这个问题,当用户点击选择框时,它会出现在其他页面元素的顶部? 这里是手头的问题的一个画面: 下面是一个描绘所期望的 ...

  6. jquery ui tabs详解(中文) 【转载】

    1 属性 1.11 ajaxOptions,当选项卡加载内容时,添加一个ajax选项.只有ajax时,添加的ajax选项才起作用.默认值为null.上面的例子中,添加了beforeSend和succe ...

  7. next.js_Next.js手册

    next.js I wrote this tutorial to help you quickly learn Next.js and get familiar with how it works. ...

  8. ssms .net3.5_SSMS 18.4中SQL Server查询存储选项

    ssms .net3.5 In this article, we will run through the new options added in the Query Store with SSMS ...

  9. jqueryui时间插件_jQueryUI AutoComplete插件

    jqueryui时间插件 In this post, we will discuss about one of the useful plugins provided by jQuery to spe ...

最新文章

  1. CBAC(基于内容的访问控制)
  2. Nagios 配置文件介绍
  3. Ian Thiel:靠这 3 点,实现 30 倍增长,从不盈利到营收 5.5 亿
  4. c语言四字节转浮点数_C语言浮点书于字节互相转换
  5. Google 拼音会导致卡 Ctrl 键?
  6. ubuntu16.4下用jexus部署asp.net core rtm
  7. JQuery.autocomplete扩展功能:实现多列自动提示
  8. java websphere mq_如何在java中使用WebSphere MQ?
  9. 基于非递归算法的汉诺塔游戏之Python实现
  10. Mysql删除数据时出现执行很慢并且删除失败--线程堵塞
  11. 对自己深度学习方向的论文有idea,可是工程实践能力跟不上,实验搞不定怎么办?...
  12. Spring.net(一)----Spring.NET框架简介及模块说明
  13. 【VMware混合云】掀起你的盖头来
  14. 实验四------实验十二
  15. 鸿蒙汽车电动尾门工厂,汽车智能电动尾门为什么能成为汽车电子行业“新宠”?...
  16. 看不出svp补帧_专业补帧软件SVP4 实现PotPlayer视频补帧教程
  17. 设置android模拟器的ip地址,安卓模拟器怎么改IP地址和分辨率,怎么改机型
  18. MACBOOK快捷键输入
  19. vue中实现动画效果--三种方式
  20. ubuntu20.04下载安装有道词典

热门文章

  1. LeetCode 1108. Defanging an IP Address--C++,Python解法
  2. keras和tensorflow使用 keras.callbacks.TensorBoard 可视化数据
  3. java 字符串xml,解析java中的xml字符串?
  4. windows AD/DNS服务器搭建
  5. 人形图案c语言程序_做游戏,学编程(C语言) 7 学习EasyX图形交互功能----flappy bird源代码...
  6. python if语句能否判断中文,Python之判断语句(if语句)
  7. 自建mysql和华为云mysql_自建数据库和云数据库区别和使用(以MySQL为例)
  8. java简体(繁体)转换器
  9. Redis最佳实践:业务层面和运维层面优化
  10. mysql日志文件名称_MySQL 日志文件 说明