这篇教程中,我将给大家展示表单元素下拉选择框select的CSS替代方案。该方法采用css来实现,看上去非常简单。我们用radio标签列表来模拟下拉列表,选择一个radio可以很好的模拟出select中选择一个元素的效果。
一:HTML
下面是我们在form表单里面用到的html代码:
- <fieldset class="radio-container">
- <div class="radio-options">
- <div class="toggle">Choose your beer</div>
- <ul>
- <li>
- <input type="radio" name="my-beer" id="choice1" value="choice1">
- <label for="choice1">Cul Dorcha</label>
- </li>
- <li>
- <input type="radio" name="my-beer" id="choice2" value="choice2">
- <label for="choice2">Rowers Red Ale</label>
- </li>
- <li>
- <input type="radio" name="my-beer" id="choice3" value="choice3">
- <label for="choice3">Belfast Ale</label>
- </li>
- <li>
- <input type="radio" name="my-beer" id="choice4" value="choice4">
- <label for="choice4">O'Hara Irish Stout</label>
- </li>
- </ul>
- </div>
- </fieldset>
二 : 逻辑草图
为了让讲解看起来更直观,我试着画了如下的草图来描述,希望表达清楚了。前端UI分享
三:CSS代码
为了让教程看起来更简洁,我省略了一部分视觉效果方面的CSS代码,(比如绘制箭头部分的CSS)-你可以在附件中查看完整版本的代码。基于同样的原因我还省略可针对不同浏览器的前缀。
radio-container的css:
- radio-container {
- position: relative;
- height: 4em; /* 3em (being the max-height of the inner container) + 1em ("margin") */
- }
- .radio-container:hover {
- z-index: 9999; }
包含在radio-container里面的元素的css: 前端UI分享
- .radio-options {
- position: absolute;
- max-height: 3em;
- width: 100%;
- overflow: hidden;
- transition: 0.7s;
- }
- .radio-options:hover {
- max-height: 100em;
- }
然后
- .radio-options .toggle {
- position: relative;
- cursor: pointer;
- padding: 0.75em;
- background: darkgreen;
- border-radius: 10px;
- z-index: 1; }
- * li are stacked at the same position as .toggle, only .toggle is visible */
- .radio-options li {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- }
- .radio-options label {
- display: block;
- opacity: 0;
- transition: 0s; }
为了隐藏了input,我们可以用display : none达到目的,但是这种方法在某些浏览器(比如一些移动浏览器)下点击label起不到聚焦相关input的作用。 前端UI分享
- .radio-options input {
- position: absolute;
- top: 0;
- left: 0;
- width: 300px;
- height: 3em;
- opacity: 0;
- z-index:1;
- cursor: pointer;
- }
四 :鼠标移上去的css代码
根据上面的代码,我们来仔细看看hover上去时发生了什么,.radio-container的z-index为一个很大的值,同时.radio-options的max-height属性也变大了(为100em),我们继续:
- /* li elements have a normal flow within the .radio-options container */
- .radio-options:hover li {
- position: relative; }
- .radio-options:hover label {
- opacity: 1;
- transition: 0.5s; }
五:选中状态
To style the checked option we will use the general sibling selector. It uses a tilde character combinator (E ~ F) and matches elements that are siblings of a given element. The first element (E) has to occur before the second (F) one and they have to share the same parent (li items in our case).前端UI分享
If one of the radio is checked, we’ll see its label instead of the toggle :
- .radio-options input:checked ~ label {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- opacity: 1;
- /* is above the .toggle so is visible */
- z-index: 2;
- /* has tha same styles as .toggle */
- padding: 0.75em;
- background: darkgreen;
- border-radius: 10px; }
On hover it returns to the normal flow
- .radio-options:hover input:checked ~ label {
- position: static;
- border-radius: 0; }
六:移动设备上所需的修正
因为我们响应的是鼠标的hover事件,所以必须针对移动设备做响应(移动设备没有鼠标)。一种解决办法是将radio 的label始终可见。我先用用自定义的modernizr build来检测触摸设备,然后添加如下的脚本:
- $(document).ready(function(){
- if (Modernizr.touch) {
- $(".radio-options").bind("click", function(event) {
- if (!($(this).parent('.radio-container').hasClass("active"))) {
- $(this).parent('.radio-container').addClass("active");
- event.stopPropagation();
- }
- });
- $(".toggle").bind("click", function(){
- $(this).parents('.radio-container').removeClass("active");
- return false;
- });
- }
- })
在css中我如下修改每一个:hover的定义: 前端UI分享
- .no-touch .radio-container:hover, .active.radio-container {
- z-index: 9999; }
- .no-touch .radio-options:hover, .active .radio-options {
- max-height: 100em;
- }
- .no-touch .radio-options:hover li, .active .radio-options li {
- position: relative; }
- .no-touch .radio-options:hover label, .active .radio-options label {
- opacity: 1;
- transition: 0.5s; }
- ....
七:IE8下如何处理
是否兼容IE8取决于你自己,这部分并不是本教程的重点
- <!--[if (IE 8)]>
- <script>
- $(document).ready(function(){
- $(".radio-options li").bind("click", function() {
- $(this).siblings(".checked").removeClass("checked");
- $(this).addClass("checked");
- });
- });
- </script>
- <![endif]-->
css
- .radio-options .checked label {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- padding: 0.75em;
- background: #1b9e4d;
- visibility: visible;
- z-index: 2; }
- ....
教程结束,希望对你有所帮助,谢谢。
相关推荐
在本主题中,我们将探讨如何使用CSS实现三种不同的下拉选择框(select)风格:苹果风格、描边风格和凹凸风格。 1. 苹果风格的下拉选择框: 苹果风格的下拉选择框通常以其简洁、优雅的设计而著称。要实现这一风格,...
在网页设计中,"jquery+css3美化select下拉列表框特效"是一个常见的需求,它旨在提升用户体验,使传统的HTML `<select>` 元素看起来更加现代和吸引人。本项目结合了JavaScript库jQuery和CSS3的新特性,为下拉列表框...
综上所述,通过结合JavaScript和CSS,我们可以对`select`下拉列表选择框进行深度美化,包括调整基本样式、添加自定义图片,甚至实现复杂的交互效果。在`select美化选择框.htm`这个示例文件中,我们可以看到一个完整...
纯Css更改Select下拉框样式,显示框的样式更改,下拉列表的样式更改!纯干货,肯定是你需要的 纯Css更改Select下拉框样式,显示框的样式更改,下拉列表的样式更改!纯干货,肯定是你需要的 纯Css更改Select下拉框...
通过以上步骤,你就成功地创建了一个使用 `jQuery` 和 CSS 的带模糊搜索功能的下拉选择框。这种实现方式使得用户能够更高效地找到所需的选项,提高了网页的可用性。记得在实际项目中,根据具体需求进行调整和优化。
**jQuery和CSS3超赞Select下拉列表框美化插件详解** 在网页设计中,Select元素通常是用来创建下拉选择菜单的,但其默认样式在许多浏览器中并不统一,有时显得较为简陋。为了提升用户体验和界面美观度,开发者经常...
在移动设备上,原生的下拉选择框可能不易使用,可以考虑使用触控友好的替代方案,如滑动面板或可展开的列表。 9. **响应式设计**: 在响应式设计中,根据屏幕尺寸和设备类型,下拉选择框的显示和交互可能需要调整...
我们可以利用CSS来创建一个模拟的下拉选择框,通过JavaScript进行事件绑定,使其功能与原生`<select>`相似。 下面是一种常见的实现思路: 1. **隐藏原生** `<select>` **元素**:使用CSS的`display:none`属性隐藏...
`div模拟select自定义下拉列表框`是一种常见做法,它利用JavaScript(如jQuery)和CSS来实现,可以提供比原生`<select>`元素更丰富的样式控制和交互体验。本篇将详细介绍这种技术及其应用。 一、为什么使用div模拟...
在网页设计中,`<select>`元素通常用于创建下拉列表,它允许用户从一组预定义的选项中进行选择。然而,传统的`<select>`标签并不支持直接在选项中显示图片,只支持纯文本内容。但随着现代Web技术的发展,我们可以...
Select下拉列表框CssJavascriptCssJavascriptCssJavascript
《XM-SELECT下拉选择框:深度解析与应用》 XM-SELECT下拉选择框是一款在Web开发中广泛使用的组件,特别适用于需要提供多选、筛选功能的场景。其v1.2.4版本的发布,带来了更稳定、更高效的操作体验。这款组件以其...
"手动样式仿select下拉列表框"就是一个这样的实践,它通过CSS和JavaScript等技术,使得原本样式单一的SELECT元素变得更为美观、交互性强。 在传统的HTML中,SELECT元素用于创建下拉列表,但其默认样式受到浏览器的...
本主题聚焦于“jquery搜索栏select下拉选择框”,这是一个常见的交互元素,用于提供用户友好的搜索体验。在网页的搜索功能中,用户通常需要指定搜索范围,如按类别、日期或其他特定条件进行筛选。这种情况下,一个...
青蛙实战之用JS+CSS和图片美化下拉列表选择框(select) 青蛙实战之用JS+CSS和图片美化下拉列表选择框(select)
本话题主要关注的是如何在Layui中实现下拉选择框的多选功能。在实际项目中,这种功能常用于让用户能够一次性选择多个选项,如在用户资料编辑、商品属性筛选等场景。 首先,Layui自身提供的`layui-form`组件中并未...
**下拉框与下拉控件:Select2详解** 在网页设计中,下拉框(Dropdown)是一种常见的用户界面元素,用于提供多个选项供用户选择。然而,原生的HTML `<select>` 标签功能相对有限,样式单一,无法满足现代网页设计的...
根据给定的信息,本文将详细...具体来说,它实现了从一个下拉列表框中选择某些项后,自动填充另一个下拉列表框的功能。这种交互式的设计可以极大地提高用户体验,特别是在需要处理复杂数据关系的应用场景中尤为重要。
当涉及到交互式的表单元素时,如下拉列表`<select>`,CSS的运用就显得尤为重要,因为它可以帮助我们定制默认样式,提升用户体验。本文将详细探讨如何使用CSS设置下拉列表`<select>`及其选项`<option>`的样式。 首先...