纯css3经典列表式手风琴插件

简介: 这是一款十分经典的纯css3列表手风琴插件。该插件使用css兄弟选择器和:target伪类来实现。

tx000006.png

在线预览 插件下载

这是一款十分经典的纯css3列表手风琴插件。该插件使用css兄弟选择器和:target伪类来实现。

有很多种方法使用纯css来制作手风琴效果,其中使用最多的是使用:target伪类来实现。使用:target伪类的问题是我们不能够再次关闭内容区域或同时显示多个内容区域。但是通过使用checkbox,我们可以控制内容区域的打开和关闭。如果只想在某一时刻只显示一个内容,可以使用radio按钮来实现。

HTML
下面的例子是使用checkbox来实现手风琴的代码,在下面的结构中,其中一个内容区域默认的打开的(通过checked来设置)。整体结构是通过一个class为ac-container的section来包裹所有的手风琴子项。每个子项包含一个checkbox、一个label和内容区域的内容:

<section class="ac-container">
    <div>
        <input id="ac-1" name="accordion-1" type="checkbox" />
        <label for="ac-1">About us</label>
        <article class="ac-small">
            <p>Some content... </p>
        </article>
    </div>
    <div>
        <input id="ac-2" name="accordion-1" type="checkbox" checked />
        <label for="ac-2">How we work</label>
        <article class="ac-medium">
            <p>Some content... </p>
        </article>
    </div>
    <div><!--...--></div>
</section>

需要注意的是给每一个input一个id,以便使其与label通过for联系起来。这样在点击label时就相当于点击了checkbox。

CSS
首先给手风琴定义一个宽度并让它居中:

.ac-container{
   
    width: 400px;
    margin: 10px auto 30px auto;
}

接下来给Label一些渐变,将它们做成按钮的样式。同时给它们一些阴影效果,和设置z-index为20,保证它们在其他元素的上面。

左侧菜单的结构如下:

.ac-container label{
   
    font-family: 'BebasNeueRegular', 'Arial Narrow', Arial, sans-serif;
    padding: 5px 20px;
    position: relative;
    z-index: 20;
    display: block;
    height: 30px;
    cursor: pointer;
    color: #777;
    text-shadow: 1px 1px 1px rgba(255,255,255,0.8);
    line-height: 33px;
    font-size: 19px;
    background: linear-gradient(top, #ffffff 1%,#eaeaea 100%);
    box-shadow: 
        0px 0px 0px 1px rgba(155,155,155,0.3), 
        1px 0px 0px 0px rgba(255,255,255,0.9) inset, 
        0px 2px 2px rgba(0,0,0,0.1);
}

当鼠标滑过的时候,设置Label的背景颜色为白色:

.ac-container label:hover{
   
    background: #fff;
}

当我们点击了label时,实际上是点击了checkbox,这时,我们希望每一个label都有下面的“selected”样式:

.ac-container input:checked + label,
.ac-container input:checked + label:hover{
   
    background: #c6e1ec;
    color: #3d7489;
    text-shadow: 0px 1px 1px rgba(255,255,255, 0.6);
    box-shadow: 
        0px 0px 0px 1px rgba(155,155,155,0.3), 
        0px 2px 2px rgba(0,0,0,0.1);
}

这里可以看到,我们使用兄弟选择器来选择label

为hover状态的label添加一个图标,这里简单的使用after伪元素来制作:

.ac-container label:hover:after,
.ac-container input:checked + label:hover:after{
   
    content: '';
    position: absolute;
    width: 24px;
    height: 24px;
    right: 13px;
    top: 7px;
    background: transparent url(../images/arrow_down.png) no-repeat center center;  
}

对于已经被选择的子项,其图标应该是“向上箭头”。

.ac-container input:checked + label:hover:after{
   
    background-image: url(../images/arrow_up.png);
}

隐藏所有的input表单:

.ac-container input{
   
    display: none;
}

内容区域的高度开始时设置为0,并且设置overflow为hidden。然后为内容区的高度和它的阴影设置一个transition。这个transtion将在关闭内容区域时产生作用。还要为已被选择的子项添加transition。正如demo中的效果,关闭的速度要比打开的速度稍快一些。

.ac-container article{
   
    background: rgba(255, 255, 255, 0.5);
    margin-top: -1px;
    overflow: hidden;
    height: 0px;
    position: relative;
    z-index: 10;
    transition: 
        height 0.3s ease-in-out, 
        box-shadow 0.6s linear;
}
.ac-container input:checked ~ article{
   
    transition: 
        height 0.5s ease-in-out, 
        box-shadow 0.1s linear;
    box-shadow: 0px 0px 0px 1px rgba(155,155,155,0.3);
}

给内容区域添加一些样式:

.ac-container article p{
   
    font-style: italic;
    color: #777;
    line-height: 23px;
    font-size: 14px;
    padding: 20px;
    text-shadow: 1px 1px 1px rgba(255,255,255,0.8);
}

现在为不同的内容区域定义三个不同的class,这些高度将用于产生过渡动画。

.ac-container input:checked + label,
.ac-container input:checked + label:hover{
   
    background: #c6e1ec;
    color: #3d7489;
    text-shadow: 0px 1px 1px rgba(255,255,255, 0.6);
    box-shadow: 
        0px 0px 0px 1px rgba(155,155,155,0.3), 
        0px 2px 2px rgba(0,0,0,0.1);
}

正如前面所说,“auto”高度是最好的选择,但是这里我们不能使用自动高度来产生动画,所以必须为其设置一个高度。

请注意,某些手机浏览器在点击label时可能不能触发checkbox的事件。

相关文章
|
7月前
|
敏捷开发 人工智能 前端开发
让你爽到飞起的【懒人插件AutoScssStruct4Vue】VSCode根据template的标签目录自动一键生成CSS/SCSS/LESS结构,敏捷开发必备插件!!!
让你爽到飞起的【懒人插件AutoScssStruct4Vue】VSCode根据template的标签目录自动一键生成CSS/SCSS/LESS结构,敏捷开发必备插件!!!
|
4天前
|
JavaScript 前端开发
jQuery和CSS3滑动展开菜单按钮插件
这是一款jQuery和CSS3滑动展开菜单按钮插件。该滑动展开菜单按钮在用户点击主菜单按钮之后,子菜单以滑动的方式依次展开
38 21
|
1天前
|
JavaScript 容器
jquery和CSS3图片排序过滤搜索插件
Filterizr是一款jquery和CSS3图片排序过滤插件。它可以对一组图片进行排序,按条件过滤和按关键字搜索。并在显示结果时使用指定的CSS3动画过渡效果。
14 2
|
1天前
|
JavaScript
jquery和CSS3响应式轮播图插件jcSlider
jcSlider是一款jquery和CSS3响应式轮播图插件。jcSlider使用CSS3过渡动画,它可以和animate.css完美结合,生成60多种轮播图过渡动画效果。
|
4月前
|
前端开发 JavaScript 开发者
复制粘贴,动画即成:CSS手风琴效果,快速实现!
复制粘贴,动画即成:CSS手风琴效果,快速实现!
|
4月前
|
前端开发
HTML+CSS基础知识(2)选择器的使用、盒子模型的讲解、列表的使用
该博客文章详细介绍了HTML和CSS的基础知识,包括CSS样式的应用方式、语法规则、选择器的使用、盒子模型、内边距、外边距、元素的显示类型以及overflow属性处理溢出内容的方法,并通过代码示例和测试结果截图展示了这些知识点在网页设计中的应用。
HTML+CSS基础知识(2)选择器的使用、盒子模型的讲解、列表的使用
|
6月前
|
前端开发 开发者
CSS列表属性:list-style系列属性详解
CSS列表属性:list-style系列属性详解
313 40
|
4月前
|
前端开发 JavaScript 容器
巧用CSS实现折叠手风琴效果
巧用CSS实现折叠手风琴效果
42 0
|
6月前
|
前端开发
CSS常用属性之(列表、表格、鼠标)属性,(如果想知道CSS的列表、表格、鼠标相关的属性知识点,那么只看这一篇就足够了!)
CSS常用属性之(列表、表格、鼠标)属性,(如果想知道CSS的列表、表格、鼠标相关的属性知识点,那么只看这一篇就足够了!)
|
5月前
|
前端开发
css实战——清除列表中最后一个元素的下边距
css实战——清除列表中最后一个元素的下边距
94 0