h5+css3实现手风琴菜单效果

h5+css3实现手风琴菜单效果

实现效果图

h5+css3实现手风琴菜单效果_第1张图片

实现原理

通过控制二级菜单的高度过渡属性,实现菜单展开和收起。

过渡动画知识

  • 简写语法:transition:property duration timing-function delay;或按以下属性单独设置
    • transition-property:规定设置过渡效果的css属性名称
    • transition-duration:规定完成过度效果需要多少秒
    • transition-timing-function:规定速度效果的速度曲线
      • linear:规定以相同速度开始至结束的过渡效果,等同cubic-bezier(0,0,1,1)
      • ease:规定慢速开始,然后变快,然后慢速结束的过渡效果,等同cubice-bezier(0.25,0.1,0.25,1)
      • ease-in:规定以慢速开始的过渡效果,等同cubic-bezier(0.42,0,1,1)
      • ease-out:规定以慢速结束的过渡效果,等同cubice-bezier(0,0,0.58,1)
      • ease-in-out:规定以慢速开始和结束的过渡效果,等同cubic-bezier(0.42,0,0.58,1)
      • cubic-bezier(n,n,n,n):在cubic-bezier函数中自定义自,可取范围0-1
    • transition-delay:定义过渡效果何时开始,单位秒
    • transition:all 2s steps(4); steps(n)指定过渡效果分几步完成
  • 过渡效果兼容性问题:不同浏览器需要增加不同前缀处理
    • -moz-transition:all 2s steps(4);
    • -webkit-transition:all 2s steps(4);
    • -o-transition:all 2s steps(4);
    • transition:all 2s steps(4);
  • 过渡效果只能应用在具体值的变化,不能应用状体值中,如:display

代码实现


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
    <style>
        * {
            padding: 0;
            margin: 0
        }

        main {
            width: 120px;
            margin: 30px auto;
        }

        li {
            list-style: none;
        }

        h3 {
            background-color: #cccccc;
            padding: 0 10px;
            line-height: 30px;
            border-bottom: 2px solid #bbbbbb
        }

        .sub_item_box>ul{
            background-color: #ececec;
            padding: 10px;
        }

        .sub_item_box{
            overflow:hidden;
            height: 0px;
            transition-property: height;
            transition-duration: 0.5s;

        }

        .item_box>li:hover .sub_item_box{
            height: 100px;
        }

        .sub_item_box li {
            line-height: 20px;
            border-bottom: 1px solid #cecece;
        }
    style>
head>
<body>
<main>
    <ul class="item_box">
        <li>
            <h3>主菜单一h3>
            <div class="sub_item_box">
                <ul>
                    <li>子菜单1li>
                    <li>子菜单2li>
                    <li>子菜单3li>
                    <li>子菜单4li>
                ul>
            div>
        li>
        <li>
            <h3>主菜单二h3>
            <div class="sub_item_box">
                <ul>
                    <li>子菜单1li>
                    <li>子菜单2li>
                    <li>子菜单3li>
                    <li>子菜单4li>
                ul>
            div>
        li>
        <li>
            <h3>主菜单三h3>
            <div class="sub_item_box">
                <ul>
                    <li>子菜单1li>
                    <li>子菜单2li>
                    <li>子菜单3li>
                    <li>子菜单4li>
                ul>
            div>
        li>
        <li>
            <h3>主菜单四h3>
            <div class="sub_item_box">
                <ul>
                    <li>子菜单1li>
                    <li>子菜单2li>
                    <li>子菜单3li>
                    <li>子菜单4li>
                ul>
            div>
        li>
    ul>

main>
body>
html>



你可能感兴趣的:(前端小案例)