带有垂直子菜单的水平响应菜单 [英] Horizontal Responsive Menu with submenu into vertical

查看:28
本文介绍了带有垂直子菜单的水平响应菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

多年来,我一直使用带有子菜单的简单水平 css 菜单.我尝试修改它以实现响应式转换.

<头><风格>身体 {边距:0;}ul{padding-left: 0;}.容器 {显示:内联块;光标:指针;}.bar1、.bar2、.bar3 {宽度:35px;高度:5px;背景颜色:#BDF1A5;边距:6px 0;过渡:0.4s;}.change .bar1 {-webkit-transform: 旋转 (-45deg) 平移 (-9px, 6px);变换:旋转(-45度)平移(-9px,6px);}.change .bar2 {不透明度:0;}.change .bar3 {-webkit-transform:旋转(45度)平移(-8px,-8px);变换:旋转(45度)平移(-8px,-8px);}.menu_deroulant {填充:0;边距:0;列表样式:无;文本对齐:居中;背景颜色:#534D4D;字体大小:0;}.menu_deroulant li {向左飘浮;显示:内联块;位置:相对;字体大小:12px;}.menu_deroulant {字体系列:Candara;字体大小:中等;字体粗细:粗体;显示:块;宽度:180px;高度:50px;行高:50px;文本对齐:居中;背景颜色:#534D4D;}.menu_deroulant a:visited, .menu_deroulant a:link {颜色:#BDF1A5;文字装饰:无;}.menu_deroulant a:悬停{背景色:#897E7E;}.menu_deroulant li.icon {显示:无;}.menu_deroulant ul {左:-999em;位置:绝对;}.menu_deroulant li:hover >ul{左:0;}@media 屏幕和 (max-width:680px) {ul.menu_deroulant li:not(:first-child) {显示:无;}ul.menu_deroulant li.icon {浮动:对;显示:内联块;}}@media 屏幕和 (max-width:680px) {ul.menu_deroulant.responsive {位置:相对;}ul.menu_deroulant.responsive li.icon {位置:绝对;右:0;顶部:0;}ul.menu_deroulant.responsive li {浮动:无;显示:内联;}ul.menu_deroulant.responsive li a {显示:块;文本对齐:左;}}</风格><身体><ul class="menu_deroulant" id="myTopnav"><li><a class="active" href="#home">Home</a></li><li><a href="#">Réalisations</a><ul><li><a href="/Realisations-Site-Web.aspx" title="Réalisations de Site Web">Réalisations de Site Internet</a></li><li><a href="/Realisations-Intranet.aspx" title="Réalisations d'Intranet et de développement">Réalisations d'Intranet</a></li><li><a href="#contact">联系方式</a></li><li><a href="#about">关于</a></li>
  • <div class="container" onclick="myFunction(this)"><div class="bar1"></div><div class="bar2"></div><div class="bar3"></div>
  • <脚本>函数 myFunction(y) {y.classList.toggle("更改");var x = document.getElementById("myTopnav");if (x.className === "menu_deroulant") {x.className += "响应式";} 别的 {x.className = "menu_deroulant";}}

    但是我的子菜单在垂直模式下有问题.它不是在好地方.我在 w3schools.com 和 Google 上搜索,但没有找到我需要的内容.

    解决方案

    最后我更改了我的基本水平菜单.这是给那个

    <头><风格>身体 {边距:0;}.容器 {显示:内联块;光标:指针;}.bar1、.bar2、.bar3 {宽度:35px;高度:5px;背景颜色:#BDF1A5;边距:6px 0;过渡:0.4s;}.change .bar1 {-webkit-transform: 旋转 (-45deg) 平移 (-9px, 6px);变换:旋转(-45度)平移(-9px,6px);}.change .bar2 {不透明度:0;}.change .bar3 {-webkit-transform:旋转(45度)平移(-8px,-8px);变换:旋转(45度)平移(-8px,-8px);}ul{列表样式类型:无;边距:0;填充:0;溢出:隐藏;背景颜色:#534D4D;}李{向左飘浮;}里阿{显示:内联块;白颜色;文本对齐:居中;填充:14px 16px;文字装饰:无;宽度:180px;}li a:悬停{背景颜色:红色;}li.下拉{显示:内联块;}.下拉内容{显示:无;位置:绝对;背景色:#f9f9f9;最小宽度:160px;box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2);}.dropdown-content a {颜色:黑色;填充:12px 16px;文字装饰:无;显示:块;文本对齐:左;}.dropdown-content a:hover {背景颜色:#f1f1f1;}.dropdown:悬停 .dropdown-content {显示:块;}图标 {显示:无;}/*li:not(:first-child)*/@media 屏幕和 (max-width:680px) {ul.menu_deroulant li {显示:无;}ul.menu_deroulant li.icon {浮动:对;显示:内联块;背景颜色:#534D4D;填充:5px;}ul.menu_deroulant.responsive {位置:相对;}ul.menu_deroulant.responsive li.icon {位置:绝对;右:0;顶部:0;}ul.menu_deroulant.responsive li {浮动:无;显示:内联;}ul.menu_deroulant.responsive li a {显示:块;文本对齐:左;}.下拉内容{位置:绝对;左:208px;顶部:0;底部:0;}}</风格><身体><ul class="menu_deroulant" id="myTopnav"><li><a class="active" href="#home">Home</a></li><li class="下拉菜单"><a href="#">Réalisations</a><div class="dropdown-content"><a href="#">链接 1</a><a href="#">链接 2</a><a href="#">链接 3</a>

    <li><a href="#contact">联系方式</a></li>

  • <div class="container" onclick="myFunction(this)"><div class="bar1"></div><div class="bar2"></div><div class="bar3"></div>
  • <脚本>函数 myFunction(y) {y.classList.toggle("更改");var x = document.getElementById("myTopnav");if (x.className === "menu_deroulant") {x.className += "响应式";} 别的 {x.className = "menu_deroulant";}}

    而且还不错.我让你我的代码来帮助你:-)

    I use since severals years a simple horizontal css menu with submenu. I try to modify it to tranform in responsive.

    <!DOCTYPE html>
    <html>
    <head>
    <style>
        body {
            margin: 0;
        }
     ul{padding-left: 0;}
    
        .container {
            display: inline-block;
            cursor: pointer;
        }
    
        .bar1, .bar2, .bar3 {
            width: 35px;
            height: 5px;
            background-color: #BDF1A5;
            margin: 6px 0;
            transition: 0.4s;
        }
    
        .change .bar1 {
            -webkit-transform: rotate(-45deg) translate(-9px, 6px);
            transform: rotate(-45deg) translate(-9px, 6px);
        }
    
        .change .bar2 {
            opacity: 0;
        }
    
        .change .bar3 {
            -webkit-transform: rotate(45deg) translate(-8px, -8px);
            transform: rotate(45deg) translate(-8px, -8px);
        }
    
        .menu_deroulant {
            padding: 0;
            margin: 0;
            list-style: none;
            text-align: center;
            background-color: #534D4D;
            font-size: 0;
        }
    
            .menu_deroulant li {
                float:left;
                display: inline-block;
                position: relative;
                font-size: 12px;
            }
    
            .menu_deroulant a {
                font-family: Candara;
                font-size: medium;
                font-weight: bold;
                display: block;
                width: 180px;
                height: 50px;
                line-height: 50px;
                text-align: center;
                background-color: #534D4D;
            }
    
                .menu_deroulant a:visited, .menu_deroulant a:link {
                    color: #BDF1A5;
                    text-decoration: none;
                }
    
                .menu_deroulant a:hover {
                    background-color: #897E7E;
                }
    
            .menu_deroulant li.icon {
                display: none;
            }
    
            .menu_deroulant ul {
                left: -999em;
                position: absolute;
            }
    
            .menu_deroulant li:hover > ul {
                left: 0;
            }
    
        @media screen and (max-width:680px) {
            ul.menu_deroulant li:not(:first-child) {
                display: none;
            }
    
            ul.menu_deroulant li.icon {
                float: right;
                display: inline-block;
            }
        }
    
        @media screen and (max-width:680px) {
            ul.menu_deroulant.responsive {
                position: relative;
            }
    
                ul.menu_deroulant.responsive li.icon {
                    position: absolute;
                    right: 0;
                    top: 0;
                }
    
                ul.menu_deroulant.responsive li {
                    float: none;
                    display: inline;
                }
    
                    ul.menu_deroulant.responsive li a {
                        display: block;
                        text-align: left;
                    }
        }
    </style>
    </head>
    <body>
    
    <ul class="menu_deroulant" id="myTopnav">
        <li><a class="active" href="#home">Home</a></li>
        <li>
            <a href="#">Réalisations</a>
            <ul>
                <li><a href="/Realisations-Site-Web.aspx" title="Réalisations de Site Web">Réalisations de Site Internet</a></li>
                <li><a href="/Realisations-Intranet.aspx" title="Réalisations d'Intranet et de développement">Réalisations d'Intranet</a></li>
            </ul>
        </li>
        <li><a href="#contact">Contact</a></li>
        <li><a href="#about">About</a></li>
        <li class="icon">
            <div class="container" onclick="myFunction(this)">
                <div class="bar1"></div>
                <div class="bar2"></div>
                <div class="bar3"></div>
            </div>
        </li>
    </ul>
    
    <script>
        function myFunction(y) {
            y.classList.toggle("change");
            var x = document.getElementById("myTopnav");
            if (x.className === "menu_deroulant") {
                x.className += " responsive";
            } else {
                x.className = "menu_deroulant";
            }
        }
    </script>
    
    </body> 
    </html>
    

    But I've a problem in vertical mode with my submenu. It's not in good place. I search in w3schools.com and Google but don't find what I need.

    解决方案

    Finally I change my basic horizontal Menu. And it's give that

    <!DOCTYPE html>
    <html>
    <head>
    <style>
        body {
            margin: 0;
        }
    
        .container {
            display: inline-block;
            cursor: pointer;
        }
    
        .bar1, .bar2, .bar3 {
            width: 35px;
            height: 5px;
            background-color: #BDF1A5;
            margin: 6px 0;
            transition: 0.4s;
        }
    
        .change .bar1 {
            -webkit-transform: rotate(-45deg) translate(-9px, 6px);
            transform: rotate(-45deg) translate(-9px, 6px);
        }
    
        .change .bar2 {
            opacity: 0;
        }
    
        .change .bar3 {
            -webkit-transform: rotate(45deg) translate(-8px, -8px);
            transform: rotate(45deg) translate(-8px, -8px);
        }
    
        ul {
            list-style-type: none;
            margin: 0;
            padding: 0;
            overflow: hidden;
            background-color: #534D4D;
        }
    
        li {
            float: left;
        }
    
            li a {
                display: inline-block;
                color: white;
                text-align: center;
                padding: 14px 16px;
                text-decoration: none;
                width: 180px;
            }
    
                li a:hover {
                    background-color: red;
                }
    
            li.dropdown {
                display: inline-block;
            }
    
        .dropdown-content {
            display: none;
            position: absolute;
            background-color: #f9f9f9;
            min-width: 160px;
            box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2);
        }
    
            .dropdown-content a {
                color: black;
                padding: 12px 16px;
                text-decoration: none;
                display: block;
                text-align: left;
            }
    
                .dropdown-content a:hover {
                    background-color: #f1f1f1;
                }
    
        .dropdown:hover .dropdown-content {
            display: block;
        }
    
        li.icon {
            display: none;
        }
        /*li:not(:first-child)*/
        @media screen and (max-width:680px) {
            ul.menu_deroulant li {
                display: none;
            }
    
                ul.menu_deroulant li.icon {
                    float: right;
                    display: inline-block;
                    background-color: #534D4D;
                    padding: 5px;
                }
    
            ul.menu_deroulant.responsive {
                position: relative;
            }
    
                ul.menu_deroulant.responsive li.icon {
                    position: absolute;
                    right: 0;
                    top: 0;
                }
    
                ul.menu_deroulant.responsive li {
                    float: none;
                    display: inline;
                }
    
                    ul.menu_deroulant.responsive li a {
                        display: block;
                        text-align: left;
                    }
    
            .dropdown-content {
                position: absolute;
                left: 208px;
                top: 0;
                bottom: 0;
            }
        }
    </style>
    </head>
    <body>
    
    <ul class="menu_deroulant" id="myTopnav">
        <li><a class="active" href="#home">Home</a></li>
        <li class="dropdown">
            <a href="#">Réalisations</a>
            <div class="dropdown-content">
                <a href="#">Link 1</a>
                <a href="#">Link 2</a>
                <a href="#">Link 3</a>
            </div>
        </li>
        <li><a href="#contact">Contact</a></li>
        <li class="icon">
            <div class="container" onclick="myFunction(this)">
                <div class="bar1"></div>
                <div class="bar2"></div>
                <div class="bar3"></div>
            </div>
        </li>
    </ul>
    
    <script>
        function myFunction(y) {
            y.classList.toggle("change");
            var x = document.getElementById("myTopnav");
            if (x.className === "menu_deroulant") {
                x.className += " responsive";
            } else {
                x.className = "menu_deroulant";
            }
        }
    </script>
    
    </body>
    </html>
    

    And it's good. I let you my code to help you :-)

    这篇关于带有垂直子菜单的水平响应菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    相关文章
    前端开发最新文章
    热门教程
    热门工具
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆