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

embedded/2024/10/21 23:41:25/

玩转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样式

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。那么,我们看代码:

javascript">/** 模拟网页中所有的下拉列表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库

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

大功告成

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

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

完整代码下载点这里


http://www.ppmy.cn/embedded/86709.html

相关文章

MICA:面向复杂嵌入式系统的混合关键性部署框架

背景 在嵌入式场景中&#xff0c;虽然 Linux 已经得到了广泛应用&#xff0c;但并不能覆盖所有需求&#xff0c;例如高实时、高可靠、高安全的场合。这些场合往往是实时操作系统的用武之地。有些应用场景既需要 Linux 的管理能力、丰富的生态&#xff0c;又需要实时操作系统的高…

Boost搜索引擎:关键词搜索模块的构建

关键词搜索模块是基于索引构建模块编写的。 搜索模块&#xff1a; 搜索模块是在服务器构建索引之后进行的&#xff0c;在构建好的索引的服务器上进行关键词搜索。 首先将用户提供的搜索内容进行&#xff0c;关键词分割&#xff0c;将分割好的关键词存放到一个数组中&#xf…

爬职业热度--兼职cat

免责声明:本文仅做技术交流与学习...请勿不正当使用... 循环页数爬取 import pandas as pd import requests from lxml import etree # 初始化一个空的 DataFrame df pd.DataFrame() data_list []headers {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Wi…

(数据结构)二叉树

1.树型结构 1.1.概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限节点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; 有…

xLua | xLua Framework | 1 打包

0. 热更新做什么 1、资源 热更资源和热更步骤&#xff08;Bundle&#xff09; 2、代码 Lua与C#的交互&#xff08;xLua&#xff09; 3、框架开发流程第一阶段&#xff1a;Bundle处理 构建&#xff1b;加载&#xff1b;更新第二阶段&#xff1a;C#调用Lua Lua加载与管理 Lua绑…

JMeter接口测试:测试中奖概率!

介绍 Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具&#xff0c;用于对软件做压力测试。JMeter 最初被设计用于 Web 应用测试&#xff0c;但后来扩展到了其他测试领域&#xff0c;可用于测试静态和动态资源&#xff0c;如静态文件、Java 小服务程序、CGI 脚本、J…

linux mysql 添加环境变量

要在Linux上添加MySQL的环境变量&#xff0c;可以按照以下步骤进行操作&#xff1a;打开终端窗口。使用文本编辑器&#xff08;如vi或nano&#xff09;打开~/.bashrc文件&#xff1a;vi ~/.bashrc或nano ~/.bashrc在文件的末尾添加以下内容&#xff1a;export PATH$PATH:/path/…

Spring Boot 项目中使用事件发布和监听来实现消息推送和处理

对于在 Spring Boot 项目内部不同函数间或不同线程间的消息推送和处理机制&#xff0c;您可以使用 Spring 内置的事件发布/订阅机制。这种机制允许不同组件之间异步通信&#xff0c;而不需要它们彼此直接依赖。 以下是一个示例&#xff0c;展示了如何在 Spring Boot 项目中使用…