当前位置: 首页 > news >正文

玩转CSS:用ul li +JS 模拟select,避坑浏览器不兼容。

玩转CSS:用ul li +JS 模拟select,避坑浏览器不兼容。

在前端的工作中,经常会遇到 selcet控件,但我们用css来写它的样式时候,总是不那么令人满意,各种浏览器不兼容啊有没有?

那么,我本篇文章就给大家提供一个思路:用UL 和li 模拟 select 控件,让我们用起来可以避免令人心烦的调整样式问题。好了,接下来,我们看图:

本例图片

文档结构

<div class="model-select-box"><div id="model-select-text" class="model-select-text" value="" class="">请选择</div><b class="bg1"></b><ul class="model-select-option"><li data-option="red" class="red">红色</li><li data-option="orange" class="orange">橙色</li><li data-option="yellow" class="yellow">黄色</li><li data-option="green" class="green">绿色</li><li data-option="cyan" class="cyan">青色</li><li data-option="blue" class="blue">蓝色</li><li data-option="purple" class="purple">紫色</li></ul></div>

CSS样式

*{margin:0;padding: 0;
}ul {list-style: none;}.model-select-box {  float: left;width: auto;min-width: 90px;height: auto;  line-height: 22px;margin-right: 10px;  position: relative;font-size: 0.8rem;box-sizing: border-box; z-index: 99;transform: translateY(-5px);user-select: none;background: #ccc;border-radius: 5px;
}.model-select-box:hover .model-select-option{  display: block;
}.model-select-option {display: none;position: absolute;background: #fff;width: calc(100% - 2px);top:28px;  border-radius: 0 0 5px 5px;  border: 1px solid #ccc;
}.model-select-option li {padding: 4px 10px;  text-align: center;   
}
.model-select-option li a{ color: #666;display: block;width: 100%;height: 30px;line-height: 30px;}.model-select-option li+li{border-top:1px solid #ccc;
}.model-select-option li:hover{color: #000;font-weight: 700;}/* 小三角 */
.bg1{position: absolute;top:12px;right:10px;border-width: 6px;border-style: solid;border-color: #666 transparent transparent transparent;  
}
.model-select-text{display: block;padding: 4px 10px;  padding-right: 20px;
}.red,
.orange,
.yellow,
.green,
.cyan,
.blue,
.purple{display: block;padding: 4px 10px;  padding-right: 20px;cursor: pointer; color: #666;   
}
.model-select-text{color: #666;
}.red{  background: red;  }
.orange{ background:orange;  }
.yellow{ background:yellow;  }
.green{ background:green;  }
.cyan{ background:cyan;  }
.blue{ background:blue;   }
.purple{ background:purple;  }

在这里,我们预先隐层了UL,然后使用hover 显示了隐藏起来的ul。原理很简单,大家分析一下上面CSS样式表即可。

JQ代码

接下来,我们就要实现li 点击后,将li设置为选中状态,并且,将 被选中的li的value传递给 目标div。这里,必然需要用到js。那么,我们看代码:

/** 模拟网页中所有的下拉列表select*/function selectModel() {var $box = $('div.model-select-box');var $option = $('ul.model-select-option', $box);var $txt = $('div.model-select-text', $box);var speed = 10;var $bg = $('b.bg1',$box)// 点击小三角$bg.click(function(){$option.not($(this).siblings('ul.model-select-option')).slideUp(speed, function () {});$(this).siblings('ul.model-select-option').slideToggle(speed, function () {// int($(this));});return false;})/** 单击某个下拉列表时,显示当前下拉列表的下拉列表框* 并隐藏页面中其他下拉列表*/$txt.click(function (e) {$option.not($(this).siblings('ul.model-select-option')).slideUp(speed, function () {});$(this).siblings('ul.model-select-option').slideToggle(speed, function () {// int($(this));});return false;});//点击选择,关闭其他下拉/** 为每个下拉列表框中的选项设置默认选中标识 data-selected* 点击下拉列表框中的选项时,将选项的 data-option 属性的属性值赋给下拉列表的 data-value 属性,并改变默认选中标识 data-selected* 为选项添加 mouseover 事件*/$option.find('li').each(function(index,element){// console.log($(this) + '1');if($(this).hasClass('selected')){$(this).parent('.model-select-option').siblings('.model-select-text').text($(this).text())}$(this).mousedown(function(){$(this).parent().siblings('#model-select-text').text($(this).text()).attr('class', $(this).attr('data-option'));$option.slideUp(speed, function () {});$(this).addClass('selected').siblings('li').removeClass('selected');return false;})$(this).on('mouseover',function(){$(this).addClass('selected').siblings('li').removeClass('selected');})})//点击文档,隐藏所有下拉$(document).click(function (e) {$option.slideUp(speed, function () {});});      }selectModel();})

还有,别忘了引用 JQ库

<script src="jquery-3.6.3.min.js"></script>

大功告成

好了,至此,这个用ul li模拟select的功能代码就算完成了,具体表现可以通过修改样式表来实现。

看完了的同学,请帮忙点赞+关注+评论!谢谢!

完整代码下载点这里

相关文章:

玩转CSS:用ul li +JS 模拟select,避坑浏览器不兼容。

玩转CSS&#xff1a;用ul li JS 模拟select&#xff0c;避坑浏览器不兼容。 在前端的工作中&#xff0c;经常会遇到 selcet控件&#xff0c;但我们用css来写它的样式时候&#xff0c;总是不那么令人满意&#xff0c;各种浏览器不兼容啊有没有&#xff1f; 那么&#xff0c;我…...

介绍下PolarDB

业务中用的是阿里云自研的PolarDB&#xff0c;分析下PolarDB的架构。 认识PolarDB 介绍 PolarDB是阿里云自研的&#xff0c;兼容MySQL、PostageSQL以及支持MPP的PolarDB-X的高可用、高扩展性的数据库。 架构 部署 云起实验室 - 阿里云开发者社区 - 阿里云 (aliyun.com) 数…...

基于微信小程序+SpringBoot+Vue的儿童预防接种预约系统(带1w+文档)

基于微信小程序SpringBootVue的儿童预防接种预约系统(带1w文档) 基于微信小程序SpringBootVue的儿童预防接种预约系统(带1w文档) 开发合适的儿童预防接种预约微信小程序&#xff0c;可以方便管理人员对儿童预防接种预约微信小程序的管理&#xff0c;提高信息管理工作效率及查询…...

go语言day15 goroutine

Golang-100-Days/Day16-20(Go语言基础进阶)/day17_Go语言并发Goroutine.md at master rubyhan1314/Golang-100-Days GitHub 第2讲-调度器的由来和分析_哔哩哔哩_bilibili 一个进程最多可以创建多少个线程&#xff1f;-CSDN博客 引入协程 go语言中内置了协程goroutine&#…...

Mindspore框架循环神经网络RNN模型实现情感分类|(六)模型加载和推理(情感分类模型资源下载)

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;预训练词向量 Mindspore框架循环神经网络RNN模型实现…...

System类

System类常见方法 ① exit 退出当前程序 public static void main(String[] args) {System.out.println("ok1");//0表示状态&#xff0c;即正常退出System.exit(0);System.out.println("ok2");} ② arraycopy 复制数组元素 复制的数组元素个数必须<原数…...

【前端 02】新浪新闻项目-初步使用CSS来排版

在今天的博文中&#xff0c;我们将围绕“新浪新闻”项目&#xff0c;深入探讨HTML和CSS在网页制作中的基础应用。通过具体实例&#xff0c;我们将学习如何设置图片、标题、超链接以及文本排版&#xff0c;同时了解CSS的引入方式和选择器优先级&#xff0c;以及视频和音频标签的…...

HarmonyOS和OpenHarmony区别联系

前言 相信我们在刚开始接触鸿蒙开发的时候经常看到HarmonyOS和OpenHarmony频繁的出现在文章和文档之中&#xff0c;那么这两个名词分别是什么意思&#xff0c;他们之间又有什么联系呢&#xff1f;本文将通过现有的文章和网站内容并与Google的AOSP和Android做对比&#xff0c;带…...

llama模型,nano

目录 llama模型 Llama模型性能评测 nano模型是什么 Gemini Nano模型 参数量 MMLU、GPQA、HumanEval 1. MMLU(Massive Multi-task Language Understanding) 2. GPQA(Grade School Physics Question Answering) 3. HumanEval llama模型 Large Language Model AI Ll…...

ElasticSearch的应用场景和优势

ElasticSearch是一个开源的分布式搜索和分析引擎&#xff0c;它以其高性能、可扩展性和实时性在多个领域得到了广泛应用。以下是ElasticSearch的主要应用场景和优势&#xff1a; 应用场景 实时搜索&#xff1a; ElasticSearch以其快速、可扩展和实时的特性&#xff0c;成为实…...

git 、shell脚本

git 文件版本控制 安装git yum -y install git 创建仓库 将文件提交到暂存 git add . #将暂存区域的文件提交仓库 git commit -m "说明" #推送到远程仓库 git push #获取远程仓库的更新 git pull #克隆远程仓库 git clone #分支&#xff0c;提高代码的灵活性 #检查分…...

阿里云服务器 篇六:GitHub镜像网站

文章目录 系列文章搭建镜像网站的2种方式使用 Web 抓取工具 (Spider 技术)使用 Web 代理服务器使用 nginx 搭建GitHub镜像网站基础环境搭建添加对 github.com 的转发配置添加对 raw.githubusercontent.com 的转发配置配置更改注意事项(可选)缓存优化为新增设的二级域名配置DN…...

强化学习学习(三)收敛性证明与DDPG

文章目录 证明收敛&#xff1f; Deep RL with Q-FunctionsDouble Q-Learning理论上的解法实际上的解法 DDPG: Q-Learning with continuous actionsAdvanced tips for Q-Learning 证明收敛&#xff1f; 对于Value迭代&#xff1a;不动点证明的思路 首先定义一个算子 B : B V ma…...

培养前端工程化思维,不要让一行代码毁了整个程序

看《阿丽亚娜 5 号&#xff08;Ariane 5&#xff09;火箭爆炸》有感。 1、动手写项目之前&#xff0c;先进行全局性代码逻辑思考&#xff0c;将该做的事情&#xff0c;一些细节&#xff0c;统一建立标准&#xff0c;避免为以后埋雷。 2、避免使用不必要或无意义的代码、注释。…...

电子文件怎么盖章?

电子文件怎么盖章&#xff1f;电子文件盖章是数字化办公中常见的操作&#xff0c;包括盖电子公章和电子骑缝章。以下是针对这两种情况的详细步骤&#xff1a; 一、盖电子公章 方法一&#xff1a;使用专业软件 选择软件&#xff1a;选择一款专业的电子签名或PDF编辑软件&…...

IDEA在编译的时候报Error: java: 找不到符号符号: 变量 log lombok失效问题

错误描述 idea因为lombok的报错: java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled.Your processor is: com.sun.proxy.$Proxy8Lombok supports: sun/apple javac 1.6, ECJ 原因&#xff1a;这是由于Lombok的版本过低的…...

【Python】如何修改元组的值?

一、题目 We have seen that lists are mutable (they can be changed), and tuples are immutable (they cannot be changed). Lets try to understand this with an example. You are given an immutable string, and you want to make chaneges to it. Example >>…...

【安卓】Android Studio简易计算器(实现加减乘除,整数小数运算,正数负数运算)

目录 前言 运算效果 一、创建一个新的项目 二、编写xml文件&#xff08;计算器显示页面&#xff09; 三、实现Java运算逻辑 ​编辑 完整代码 xml文件代码&#xff1a; Java文件代码&#xff1a; 注&#xff1a; 前言 随着移动互联网的普及&#xff0c;手机应用程序已…...

一个vue mixin 小案例,实现等比例缩放

mixin.js /** Author: jinjianwei* Date: 2024-07-24 16:17:16* Description: 等比例缩放&#xff0c;屏幕适配 mixin 函数*/// * 默认缩放值 const scale {width: 1,height: 1, } // * 设计稿尺寸&#xff08;px&#xff09; const baseWidth 1920 const baseHeight 1080 …...

【数据结构初阶】单链表经典算法题十二道——得道飞升(中篇)

hi&#xff0c;bro—— 目录 5、 链表分割 6、 链表的回文结构 7、 相交链表 8、 环形链表 【思考】 —————————————— DEAD POOL —————————————— 5、 链表分割 /* struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), …...

CTF ssrf 基础入门 (一)

0x01 引言 我发现我其实并不是很明白这个东西&#xff0c;有些微妙&#xff0c;而且记忆中也就记得Gopherus这个工具了&#xff0c;所以重新学习了一下&#xff0c;顺便记录一下吧 0x02 辨别 我们拿到一个题目&#xff0c;他的名字可能就是题目类型&#xff0c;但是也有可能…...

IP地址在后端怎么存才好?

目录 一、地址的区别 二、字符串存取 2.1 IPV4空间大小 2.2 IPV6空间大小 三、整数存取 四、总结 4.1 字符串存取优缺点 4.2 整数存取的优缺点 一、地址的区别 在网络中&#xff0c;IP地址分为IPV4和IPV6&#xff0c;IPV4是一共占32位的&#xff0c;每8位小数点分隔&…...

《通讯世界》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《通讯世界》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定学术期刊。 问&#xff1a;《通讯世界》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;科学技术部 主办单位&#xff1a;中国科学技…...

go get的原理

1、GOPROXY 可以写在os的环境变量中&#xff0c;也可以写在go的环境变量中 GOPROXYhttps://goproxy.cn,direct 表示先去第一个网址下载&#xff0c;下载不到&#xff0c;就直接下载 也可以配置GOPRIVATE私有仓库&#xff0c;遇到私有仓库中的包&#xff0c;就直接下载 2、go…...

jenkins替换配置文件

1.点击首页的【Manage Jenkins】-【Manage Plugins】&#xff0c;在选项【Available plugins】安装 Config File Provider Plugin &#xff0c;安装后重启jenkins 2.安装完成后会有这个图标&#xff0c;点进去 3.点击新建&#xff0c;选择自定义&#xff0c;填入要替换的文件…...

C# Web控件与数据感应之 填充 HtmlTable

C# Web控件与数据感应之 填充 HtmlTable 在C#中&#xff0c;特别是在ASP.NET Web Forms应用中&#xff0c;你可能会遇到需要将数据动态填充到HTML表格&#xff08;HtmlTable&#xff09;中的场景。这通常涉及到遍历数据源&#xff08;如数据库查询结果、集合等&#xff09;&am…...

HAL库源码移植与使用之SPI驱动VS1053音频解码

你可以理解为带着dac adc芯片功能的集成芯片&#xff0c;声音的高低音形成由频率决定&#xff0c;大小声由波峰决定&#xff0c;所以采集时记录时间和电压值就可以确定高低音色和大小声&#xff0c;形成声音波形&#xff0c;再把波形用dac输出给喇叭&#xff0c;让喇叭在对应时…...

RK3568 Linux 平台开发系列讲解(内核入门篇):从内核的角度看外设芯片的驱动

在嵌入式 Linux 开发中,外设芯片的驱动是实现操作系统与硬件之间交互的关键环节。对于 RK3568 这样的处理器平台,理解如何从内核的角度构建和管理外设芯片的驱动程序至关重要。 1. 外设驱动的基础概念 外设驱动(Device Driver)是操作系统与硬件设备之间的桥梁。它负责控…...

初识C++ · AVL树(2)

目录 前言&#xff1a; 1 左右旋 2 右左旋 3 部分细节补充 3.1 单旋和插入 3.2 部分小函数 前言&#xff1a; AVL树作为一种结构&#xff0c;理解树的本身是不大难的&#xff0c;难的在于&#xff0c;树旋转之后的连接问题&#xff0c;写AVL树的代码大部分都是在旋转部分…...

LLM:归一化 总结

一、Batch Normalization 原理 Batch Normalization 是一种用于加速神经网络训练并提高稳定性的技术。它通过在每一层网络的激活值上进行归一化处理&#xff0c;使得每一层的输入分布更加稳定&#xff0c;从而加速训练过程&#xff0c;并且减轻了对参数初始化的依赖。 公式 …...