自定义html下拉选择框,CSS自定义select下拉选择框的样式(不用其他标签模拟)

自定义html下拉选择框,CSS自定义select下拉选择框的样式(不用其他标签模拟)今天群里有人问到怎么自定义 select 下拉选择框的样式 于是群里就展开了激烈的讨论 刚开始一直就是考虑怎样使用纯 CSS 实现 把浏览器默认的样式覆盖掉 但最后均因兼容问题处理不好而失败告终 最后的解决方案就是用其他的元素 如 ul li 模拟下拉菜单 或者是使用网上一些现成的插件 其实 select 这个东西只靠纯 CSS 是不能解决这个自定义样式问题的 但既然折腾了这么久 还是说一下 CSS 实现的思路吧 首

d5ffd5617a49d75157f06ed2c5169490.png

今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方案就是用其他的元素(如ul,li)模拟下拉菜单,或者是使用网上一些现成的插件。

其实select这个东西只靠纯CSS是不能解决这个自定义样式问题的,但既然折腾了这么久,还是说一下CSS实现的思路吧。

首先对于默认的样式:

4de1e2a59f08073bf5f3e720dae4bf08.png

刚开始想到使用背景,但经试验对select设置背景是无效的,于是后来就想到了覆盖,用其它元素把那个向下的箭头盖住,然后给这个元素设置背景,写了个demo发现可行,于是就有了下面的这些。

首先用一个a标签套住select:

选项一

选项二

选项三

选项四

选项五

在css里让select“隐藏”,但不能display:none;,不然select元素不存在了,在这里我们可以把select的透明度改为0,这样就看不见了,但并不影响下拉框,点击时下拉框还会出现;这样貌似是可行了,但这是会发现每次选择选项后,选项并未显示,这就是select隐藏的原因了,连着文字也隐藏了,因此我们需要一个额外的标签储存每次选择的选项,下面是完整的HTML代码:

请选择

选项一

选项二

选项三

选项四

选项五

CSS代码:

* {

margin: 0;

padding: 0;

}

body {

padding: 50px 50px;

}

.btn-select {

position: relative;

display: inline-block;

width: 150px;

height: 25px;

background-color: #f80;

font: 14px/20px “Microsoft YaHei”;

color: #fff;

}

.btn-select .cur-select {

position: absolute;

display: block;

width: 150px;

height: 25px;

line-height: 25px;

background: #f80 url(ico-arrow.png) no-repeat 125px center;

text-indent: 10px;

}

.btn-select:hover .cur-select {

background-color: #f90;

}

.btn-select select {

position: absolute;

top: 0;

left: 0;

width: 150px;

height: 25px;

opacity: 0;

filter: alpha(opacity: 0;);

font: 14px/20px “Microsoft YaHei”;

color: #f80;

}

.btn-select select option {

text-indent: 10px;

}

.btn-select select option:hover {

background-color: #f80;

color: #fff;

}

最后效果是这样的(Chrome上的截图):

a1f3b5b0a6e067598ab30c34c01f0766.png

8f04fa1d45f70478cde0bb19eb25a71a.png

但这样做并不能完全覆盖浏览器的默认样式,如图中下拉框的边框处理不掉,另外,在ie上就更难看了,所以真正项目中使用的话,还是用插件吧,或者用其他元素代替。

到这里,本文并没有完,还要用到一段js,需要把选中的内容放到span标签里显示出来,下面是js代码:

var $$ = function (id) {

return document.getElementById(id);

}

window.onload = function () {

var btnSelect = $$(“btn_select”);

var curSelect = btnSelect.getElementsByTagName(“span”)[0];

var oSelect = btnSelect.getElementsByTagName(“select”)[0];

var aOption = btnSelect.getElementsByTagName(“option”);

oSelect.onchange = function () {

var text=oSelect.options[oSelect.selectedIndex].text;

curSelect.innerHTML = text;

}

}

ok,终于完了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212624.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午7:38
下一篇 2026年3月18日 下午7:38


相关推荐

  • JavaScript和Java的区别[通俗易懂]

    JavaScript和Java的区别[通俗易懂]  虽然JavaScript中有Java,但他们之间的关系就如同印度和印度尼西亚一样——没有什么关系。只是JavaScript中的某些语法和Java类似而已。出身不同  Java和JavaScript是由不同公司发布的不同的产品,Java是由Sun公司发布编程语言,而JavaScript是由Netscape公司发布的脚本语言。变量不同1.变量定义时的区别  定义变量时Java和JavaScript有区别。Java是强类型的语言,它要求每个变量必须在定义时明确指出这个变量是什么类型的;而JavaS

    2022年7月9日
    28
  • pub格式的文件打开报错:Publisher无法打开文件 解决办法[通俗易懂]

    pub格式的文件打开报错:Publisher无法打开文件 解决办法[通俗易懂]最近搞Git上传文件到Github仓库遇到了点问题:id_rsa.pub这个文件打不开,但是我需要复制内容生成ssh密钥文件格式类型为:MicrosoftPublisherDocument(.pub)解决方法:1、在当前文件目录输入cmd【直接定位到当前目录下】2、dos下查看文件内容的命令:type文件名3、复制内容就可以去粘贴使用啦,希望可以帮到你们!!!…

    2022年10月14日
    4
  • 关于string,stringbuffer_toString

    关于string,stringbuffer_toString本文主要针对面试中经常被问到的String的热点、难点进行深入分析,祝你备战秋招,直通BAT

    2025年11月29日
    7
  • Linux操作系统shell脚本for循环示例

    Linux操作系统shell脚本for循环示例Linux操作系统shell脚本for循环示例示例01forain{1..3};dosshroot@192.168.11.$acat/root/.ssh/id_rsa.pub>>/root/.ssh/authorized_keys;done示例02forain{2..3};doscp/root/.ssh/authorized_keysroot@192.168.11$a:/root/.ssh/authorized_keys;done示

    2025年7月12日
    4
  • 计算机的发展历史和发展趋势_对未来计算机展望

    计算机的发展历史和发展趋势_对未来计算机展望论计算机发展史及展望(3页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.9积分论计算机发展史及展望杨露斯黎炼四川大学,成都双流610207摘要:自从1945年世界上第一台电子计算机诞生以来,计算机技术迅猛发展,CPU的速度越来越快,体积越来越小,价格越来越低。未来光子、一轮趨级计算技术革命。关键词:计算机;发展史;前景展望中图分类号:G4文…

    2022年10月19日
    8
  • kettle工具使用简明手册[通俗易懂]

    kettle工具使用简明手册[通俗易懂]kettle工具使用简明手册运行启动脚本spoon.bat快捷方式如果正确启动,则出现的主界面应该是下面这样的。初次进入需右键新建作业新建数据库连接也可以想下面一样,新建数据库连接向导填完参数测试一下连接通过向导分步来我已经建立了转换任务和数据库连接,可以直接应用。 建立多表复制点击开始即可,多表的…

    2022年10月9日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号