


Pure CSS alternative to drop-down selection box select_html/css_WEB-ITnose
这篇教程中,我将给大家展示表单元素下拉选择框select的CSS替代方案。该方法采用css来实现,看上去非常简单。我们用radio标签列表来模拟下拉列表,选择一个radio可以很好的模拟出select中选择一个元素的效果。
一:HTML
下面是我们在form表单里面用到的html代码:
.代码
2: Logic sketch
For the explanation It seems more intuitive. I tried to draw the following sketch to describe it. I hope it can be expressed clearly. Front-end UI sharing
3: CSS code
In order to make the tutorial look more concise, I have omitted some CSS code for visual effects. (For example, the CSS for drawing the arrow part) - You can view the full version of the code in the attachment. For the same reason I've also omitted prefixes that can be specific to different browsers.
css of radio-container:
.code
- radio-container {
- position: relative;
- height: 4em; /* 3em (being the max-height of the inner container) 1em ("margin") */
- }
- .radio-container:hover {
- z-index: 9999; }
CSS of elements contained in radio-container: Front-end UI sharing
.code
- .radio-options {
- position: absolute;
- max -height: 3em;
- width: 100%;
- overflow: hidden;
- transition: 0.7s;
- }
- .radio-options:hover {
- max-height: 100em;
- }
then
.code
- .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; }
In order to hide the input, we can use display: none to achieve the goal, but this method will not focus on the relevant input when clicking the label in some browsers (such as some mobile browsers). Front-end UI sharing
.code
- .radio-options input {
- position: absolute;
- top: 0;
- left: 0;
- width: 300px;
- height: 3em;
- opacity: 0;
- z-index:1;
- cursor: pointer;
- }
Four: Move the mouse up css code
According to the above code, let’s take a closer look at what happens when the hover goes up. The z-index of .radio-container is a very large value, and at the same time, the z-index of .radio-options The max-height attribute has also become larger (to 100em), we continue:
. Code
- /* 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取决于你自己,这部分并不是本教程的重点
.代码
css
.code
- .radio-options .checked label {
- position: absolute;
- top: 0 ;
- left: 0;
- right: 0;
- padding: 0.75em;
- background: #1b9e4d;
- visibility : visible;
- z-index: 2; }
- .... That helps, thank you.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Using Bootstrap in Vue.js is divided into five steps: Install Bootstrap. Import Bootstrap in main.js. Use the Bootstrap component directly in the template. Optional: Custom style. Optional: Use plug-ins.

HTML defines the web structure, CSS is responsible for style and layout, and JavaScript gives dynamic interaction. The three perform their duties in web development and jointly build a colorful website.

There are two ways to create a Bootstrap split line: using the tag, which creates a horizontal split line. Use the CSS border property to create custom style split lines.

WebdevelopmentreliesonHTML,CSS,andJavaScript:1)HTMLstructurescontent,2)CSSstylesit,and3)JavaScriptaddsinteractivity,formingthebasisofmodernwebexperiences.

To adjust the size of elements in Bootstrap, you can use the dimension class, which includes: adjusting width: .col-, .w-, .mw-adjust height: .h-, .min-h-, .max-h-

How to use the Bootstrap button? Introduce Bootstrap CSS to create button elements and add Bootstrap button class to add button text

To set up the Bootstrap framework, you need to follow these steps: 1. Reference the Bootstrap file via CDN; 2. Download and host the file on your own server; 3. Include the Bootstrap file in HTML; 4. Compile Sass/Less as needed; 5. Import a custom file (optional). Once setup is complete, you can use Bootstrap's grid systems, components, and styles to create responsive websites and applications.

There are several ways to insert images in Bootstrap: insert images directly, using the HTML img tag. With the Bootstrap image component, you can provide responsive images and more styles. Set the image size, use the img-fluid class to make the image adaptable. Set the border, using the img-bordered class. Set the rounded corners and use the img-rounded class. Set the shadow, use the shadow class. Resize and position the image, using CSS style. Using the background image, use the background-image CSS property.
