一个select元素自定义设计的新思路:appearance: none之后利用符号制造小箭头

最近工作时解决了一个前端小问题(如下图所示):在Safari中,select的控件之上有不和谐的灰色部分。 刚开始时我以为是backgrand或是border设置不当之类产生的问题,在搜索了很久之后终于找到了问题所在:这个灰色部分来自于Safari默认的select设计,所以我需要用 appearance: none 来去除默认设计,但是这样一来,右侧的小箭头就会消失。本文将会详细描述我是如何添加小箭头的,该方法灵感来自于上司,目前没有在网上找到类似答案(当然网上也有不少别的好方法:比如使用background添加一个url的小箭头图片)。

我先直接附上我的方法,采用了一个自己编的例子便于讲解。

 1 <html>
 2 <head>
 3 <style type="text/css">
 4 #selectDiv select {
 5     -webkit-appearance: none;
 6     -moz-appearance: none;
 7     -ms-appearance: none;
 8     width: 100px;
 9     background-color: transparent;
10     font-size: 16px;
11     padding: 3px 15px;
12     margin: 0;}
13 #selectDiv {
14     width: 100px;
15 }
16 #selectDiv:after {
17     content: '<>';
18     font: 13px Consolas,monospace;
19     color: #000;
20     font-weight: 700;
21     -webkit-transform: rotate(90deg);
22     -moz-transform: rotate(90deg);
23     -ms-transform: rotate(90deg);
24     transform: rotate(90deg);
25     position: absolute;
26     left: 85px;
27     top: 14px;
28     pointer-events: none;
29 }
30 </style>
31 </head>
32 <body>
33 <div id="selectDiv">
34   <select>
35     <option value="apple">Apple</option>
36     <option value="banana">Banana</option>
37     <option value="orange">Orange</option>
38     <option value="pear">Pear</option>
39   </select>
40 </div>
41 </body>
42 </html>

Safari (11.1)和Chrome (66.0.3359.139) 中最终的效果如下图:

Firefox (59.0.2) 中最终的效果如下图: 

以上存在差别是由于依然还有默认的border设置,所以只需要再加上自定义的border设置就好了。 

 

(如果你看懂了上面的代码,那你就不需要继续看下面的解释;如果你对其中的css有疑惑,那么你可能可以从下文中找到答案。如果你看完本文后有任何意见,欢迎留言。)

 

基本思路

简而言之,就是将<>符号旋转九十度就能得到一个类似于向上向下的小箭头,很简洁,而且可以根据自己的喜好调整大小粗细和风格。

部分CSS详解及注意事项

1.  ::after (:after) 

这是伪元素,两个冒号是CSS3中的写法,是为了将其与伪类(:hover/:active等)区分。一个冒号是CSS2中的写法,但是为了兼容,很多浏览器依然支持一个冒号的写法。这个能产生一个在原有元素之后的元素,默认是与原有元素在同一行的。我认为用这个伪元素比另建一个div更方便。

2.  -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; 

这个作用就是去除浏览器中默认的格式,-webkit- 作用于Chrome,-moz-作用于Firfox,-ms-作用于IE,相同的道理也适用于之后的transform

3. <>字体需要挑选

这两个符号在某些字体时可能会连接在一起或是形状不合适,所以需要挑选合适的字体以得到满意的图案。效果图中展示的是Consolas字体,另外我还写了另一个字体monospace备选。后者的形状会尖一些。建议大家再尝试看看别的字体,也许有更合适的。另外,符号是否加粗和字体大小就全凭个人感觉了。

4.  pointer-events: none; 

加上这句的效果直接体现在点击符合与点击框中别的地方的效果相同,如果少了这段文字,则会使点击符号时选项不会展开。某官方解释是“元素永远不会成为鼠标事件的target。但是,当其后代元素的pointer-events属性指定其他值时,鼠标事件可以指向后代元素,在这种情况下,鼠标事件将在捕获或冒泡阶段触发父元素的事件侦听器。”大家自行理解一下。

5. 在select之外包裹div

我在select之外加了父元素,因为我发现我无法直接添加select:after。(如果有人知道原因,欢迎留言!)

 

转载于:https://www.cnblogs.com/zhenqichai/p/a-way-to-change-default-design-of-select-component.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

调整HashMap的大小:未来的危险

最近&#xff0c;我偶然发现了一个错误&#xff0c;该错误是由于多个线程对java.util.HashMap的使用不当引起的。 该错误是抽象泄漏的一个很好的例子。 只有了解数据结构的实现级别详细信息&#xff0c;才能帮助我解决当前的问题。 因此&#xff0c;我希望分享我所面临的问题将…

别的程序员是怎么读你的简历的

别的程序员是怎么读你的简历的 2009年11月9日 陈皓 下面这个图片来源国外&#xff0c;是一个关于程序员面试时的简历&#xff0c;被人事部门和程序员本身评审的角度不同的图片。当然&#xff0c;这是一个从国外面试的视角制作的图片&#xff0c;不过&#xff0c;可以看出&#…

Zabbix linux agent 安装

系统&#xff1a;Linux Centos 7.3 x64 服务&#xff1a;Zabbix_agent 3.0.16 一.安装Zabbix_agent 服务 1.安装zabbix 3.0 yum源 rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm 2.安装Zabbix_agent yum install zabbix-agen…

直接在apk中添加资源的研究

原文 http://blog.votzone.com/2018/05/12/apk-merge.html 之前接手过一个sdk的开发工作&#xff0c;在开发过程中有一个很重要的点就是尽量使用代码来创建控件&#xff0c;资源文件最好放到assets目录下&#xff0c;如果必须使用res资源&#xff0c;需要通过 getResources().g…

JavaFX实际应用程序:SkedPal

“真实世界的应用程序”系列中的一个新条目。 这次是SkedPal &#xff0c;这是一个用于智能管理忙人生活的应用程序。 我一直在咨询SkedPal团队有关JavaFX的事宜&#xff0c;并且在他们决定开始使用我的CalendarFX框架来满足他们的日历要求时&#xff0c;我也在咨询他们。 在下…

chromium之histogram.h

histogram不知道是干啥的 // Histogram is an object that aggregates statistics, and can summarize them in // various forms, including ASCII graphical, HTML, and numerically (as a // vector of numbers corresponding to each of the aggregating buckets). google翻…

viewobject_只读ViewObject和声明性SQL模式

viewobject介绍 声明式SQL模式被认为是基于实体的视图对象的最有价值的优点之一。 在这种模式下&#xff0c;根据UI中显示的属性在运行时生成VOSQL。 例如&#xff0c;如果某个页面包含一个只有两列EmployeeId和FirstName的表&#xff0c;则查询将生成为“从Employees中选择Emp…

MyEclipse6.0 安装axis2插件, 调用加密的SAP webservice

MyEclipse6.0 安装axis2插件, 调用加密的SAP webservice 6人收藏此文章, 我要收藏 发表于1个月前(2013-06-06 09:41) , 已有116次阅读 &#xff0c;共0个评论 首先鄙视一下自己&#xff0c;还在用myeclipse,竟然还是6.0版本&#xff0c;没办法&#xff0c;用习惯了&#xff0c…

Eclipse中要导出jar包中引用了第三方jar包怎么办

Eclipse中要导出jar包中引用了第三方jar包怎么办 (2009-07-20 15:28:44) 转载▼标签&#xff1a; it 分类&#xff1a; Eclipse 今天做个小的java程序&#xff0c;想要先将其导出成一个可执行的jar包&#xff01;向往常一样&#xff0c;单击菜单栏中的 File -> export,弹出…

拖动滑块拼图背景图没显示_计划B? 那是计划N…没什么。 拼图于2015年问世

拖动滑块拼图背景图没显示真是一天 当典型的欧洲人逐渐破产时&#xff0c;美国的人们开始喝咖啡。 这就是为什么我在Mark Reinhold最近的新闻中睡个好觉的原因。 他在题为“ Project Jigsaw&#xff1a;火车晚点 ”的帖子中建议将Project Jigsaw推迟到下一个版本Java 9。 在最近…

java keytool证书工具使用小结

Keytool 是一个Java数据证书的管理工具 ,Keytool将密钥&#xff08;key&#xff09;和证书&#xff08;certificates&#xff09;存在一个称为keystore的文件中在keystore里&#xff0c;包含两种数据:密钥实体&#xff08;Key entity&#xff09;-密钥&#xff08;secret key&a…

在Kafka中发布订阅模型

这是第四个柱中的一系列关于同步客户端集成与异步系统&#xff08; 1&#xff0c; 2&#xff0c; 3 &#xff09;。 在这里&#xff0c;我们将尝试了解Kafka的工作方式&#xff0c;以便正确利用其发布-订阅实现。 卡夫卡概念 根据官方文件 &#xff1a; Kafka是一种分布式的&…

深入理解C++中的mutable关键字

2006-12-16 05:00 来源&#xff1a;BLOG 作者&#xff1a;寒星轩 责任编辑&#xff1a;方舟yesky 评论(32)推荐&#xff1a;经典教程专区mutalbe的中文意思是“可变的&#xff0c;易变的”&#xff0c;跟constant&#xff08;既C中的const&#xff09;是反义词。在C中&…

使用Boxfuse为您的REST API设置https

在我的上 一篇 文章中&#xff0c;我展示了在Boxfuse的帮助下&#xff0c;基于Spring Boot框架建立REST API并在AWS上运行非常容易 。 下一步是利用SSL与API进行通信。 通过使用SSL&#xff0c;我们确保在REST API服务器和API客户端之间的传输过程中保存了数据 。 要为Spring B…

Python类与对象实验

一、任务描述 本实验任务主要对Python类与对象进行一些基本操作&#xff0c;通过完成本实验任务&#xff0c;要求学生熟练掌握Python类与对象的关系&#xff0c;并对Python类与对象的基本操作进行整理并填写工作任务报告。 二、任务目标 1、掌握Python类的创建 2、掌握类对象 三…

matlab 五点三次平滑算法

(2012-04-23 21:01:31) 转载▼标签&#xff1a; 杂谈 分类&#xff1a; matlab http://www.ilovematlab.cn/thread-71818-1-1.html 这里提供一个函数mean5_3(五点三次平滑算法)对数据进行平滑处理&#xff1a; load V1.mat subplot 211; plot(V1); ylim([2000 7000]); grid; y…

您在2016年OpenStack峰会上错过的事情

今年我第一次参加了4月25日至29日在德克萨斯州奥斯汀举行的OpenStack峰会。 今天结束了&#xff0c;我要回家了&#xff0c;我想回顾一下&#xff0c;从我的角度分享你错过的事情。 作为以应用程序开发人员为重点的技术传播者&#xff0c;转移到包含Red Hat产品组合的基础架构…

C/C++中的常量指针与指针常量

常量指针 常量指针是指向常量的指针&#xff0c;指针指向的内存地址的内容是不可修改的。 常量指针定义“const int *p&a;”告诉编译器&#xff0c;*p是常量&#xff0c;不能将*p作为左值进行操作。但这里的指针p还是一个变量&#xff0c;它的内容存放常量的地址&#xff0…

基于javafx的五子棋_JavaFX中基于表达式的PathTransitions

基于javafx的五子棋在JavaFX中&#xff0c;您可以使用PathTransition对象为路径上的节点设置动画。 PathTransitions使用Shape对象来描述它们需要沿其动画的路径。 JavaFX提供了各种类型的形状&#xff08;例如&#xff0c;多边形&#xff0c;圆形&#xff0c;多边形&#xff0…

Drools 6.4.0.Final提供

最新和最出色的Drools 6.4.0.Final版本现已可供下载。 这是我们先前构建的增量版本&#xff0c;对核心引擎和Web工作台进行了一些改进。 您可以在此处找到更多详细信息&#xff0c;下载和文档&#xff1a; Drools网站 资料下载 文献资料 发行说明 请阅读下面的一些发行要…