• 基于CSS两种菜单创建方式


    作者:私语茶馆

    1.前言

            HTML多种场景下需要菜单的实现,这里提供两种方式:

    (1)基于CSS的POPUP式菜单

    特征:按需显示POPUP菜单,但布局是浮动的。

    (2)覆盖式弹出菜单。

    特征:按需显示菜单,菜单以弹出窗口模式显示,会覆盖下面的内容

    2.基于CSS的POPUP式菜单

            先来看一下效果,这个是挤压式弹出菜单,默认隐藏,如果点击后,会显示菜单,界面上其他元素会根据弹出菜单来重新布局。

    2.1. 效果

    2.1.1. 初始效果

    2.1.2. 点击按钮显示菜单:

    点击图形化按钮后,会把背景字幕往后挤压,

    2.1.3. 点击按钮隐藏菜单:

    效果同步骤1,初始化的情况。背景字幕会往左边排序

    这种样式的菜单可以用于界面比较简洁的首页。

    2.2. 代码

    2.2.1. HTML

    1. <td style="width: 40%; text-align: right">
    2. <div class="topnav">
    3. <div id="myLinks">
    4. <a href="#安全管理">用户管理</a>
    5. <a href="#许可证管理">许可证</a>
    6. <a href="#关于">关于</a>
    7. </div>
    8. <p style="float: left">beginning test字幕</p>
    9. <a href="javascript:void(0);" class="icon" onclick="myFunction()">
    10. <img class="iconImg" src="/HomeCloudsy/Images/setting.png" alt="setting"/>
    11. </a>
    12. </div>
    13. </td>
    说明:
    1. Div myLinks是显示菜单内容,会通过CSS控制其默认不显示。
    2. Test字幕:用来测试布局关系的,这个模式是浮动方式,会把这几个字往后推
    3. : 是图形化按钮,
    4. Javascript:void(0):空的JS函数,没有输入,也没有返回,控制没有超级链接。 Onclick=myFunction控制菜单显示

    2.2.2.JavaScript代码

    1. <script>
    2. function myFunction() {
    3. var x = document.getElementById("myLinks");
    4. if (x.style.display === "block") {
    5. x.style.display = "none";
    6. } else {
    7. x.style.display = "block";
    8. }
    9. }
    10. </script>

    说明:Dislay常用的有四种取值,取值如下:

    1)none:不显示

    2)block:按照block模式显示本元素,block会换行显示一个块,类似

    3) inline:元素在一行类显示,类似

    4)inline-block:元素在一行内按照块显示

    效果如下图的hello world

    2.2.3.CSS控制

    1. .topnav {
    2. overflow: hidden; --溢出后不显示
    3. background-color: #acb3b9;
    4. position: relative; --采用相对布局
    5. }
    6. .topnav #myLinks {
    7. display: none; ---不显示菜单内容
    8. }
    9. .topnav a {
    10. float: left; -浮动模式
    11. color: white;
    12. padding: 14px 16px;
    13. text-decoration: none;
    14. font-size: 17px;
    15. }
    16. .topnav .iconImg {
    17. width: 100%;
    18. }
    19. .topnav a:hover {
    20. background-color: #ddd;
    21. color: black;
    22. }
    23. .topnav a.icon {
    24. float: right;
    25. width: 80px;
    26. height: 80px;
    27. }
    28. .HomeLogo{
    29. width: 90px;
    30. height: 90px;
    31. }
    32. .HomeLogo img {
    33. width: 100%;
    34. align-content: left;
    35. padding-top: 10px;
    36. padding-left: 5px
    37. }

    说明:

        overflow: hidden;    --溢出后不显示
        background-color: #acb3b9;
        position: relative;  --采用相对布局

     display: none;    ---不显示菜单内容

    3. 覆盖式弹出菜单

            关键点:Position取值为Absolute(针对最近父节点排序,这个不受其他元素的影响),采用z-index布局图层,获得覆盖效果。

    3.1. 效果

    3.1.1. 初始化test.html

    1. 图形化菜单
    2. 是背景对象,用于测试菜单覆盖效果用

    3.1.2. 鼠标移动到图形按钮显示:

    这个菜单是按照hoverable模式显示菜单。

    3.1.3. 点击关于我们

    点击关于我们后,跳到aboute.html。

    3.2. 代码

    3.2.1.HTML

    1. <p>测试下拉菜单</p>
    2. <div class="dropMainMenuArea">
    3. <input class="dropBtn" type="image" src="/HomeCloudsy/Images/menu.png" alt="Menu" />
    4. <div class="dropMenu">
    5. <a href="/HomeCloudsy/FuncEntries/ComingSoon.html">用户管理</a>
    6. <a href="/HomeCloudsy/FuncEntries/About.html">证书导入</a>
    7. <a href="/HomeCloudsy/FuncEntries/About.html">关于我们</a>
    8. </div>
    9. </div>
    10. <table style="border: black solid">
    11. <tr>
    12. <th>测试体1</th>
    13. <th>测试体2</th>
    14. </tr>
    15. <tr>
    16. <td>112324e34</td>
    17. <td>112324e34</td>
    18. </tr>
    19. </table>

    3.2.2. CSS

    1. <style>
    2. .dropBtn {
    3. background-color: #2196F3;
    4. color: white;
    5. padding: 0px;
    6. font-size: 16px;
    7. width: 20px;
    8. height: 30px;
    9. border: none;
    10. }
    11. .dropBtn img{
    12. padding-top: 0px;
    13. padding-left: 0px;
    14. }
    15. .dropMainMenuArea{
    16. position: relative;
    17. display: inline-block;
    18. }
    19. .dropMenu{
    20. display: none; ---不显示菜单
    21. position: absolute;---让菜单内容显示位置只和dropMainuArea有关
    22. background-color: #f1f1f1;
    23. min-width:160px;
    24. box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.5);---弹出盒子的阴影效果
    25. z-index: 1;
    26. }
    27. .dropMenu a{
    28. color:black;
    29. padding:12px 16px;
    30. text-decoration: none;
    31. display:block;
    32. }
    33. .dropMenu a:hover{
    34. background-color: #ddd; -菜单鼠标移动的效果,凸显
    35. }
    36. .dropMainMenuArea:hover .dropMenu { --鼠标移动到dropMainMenuArea显示dropMenu
    37. display: block;
    38. }
    39. .dropMainMenuArea:hover .dropBtn {
    40. background-color: #3e8e41;
    41. }
    42. style>

    关键点:

            display: none;  ---不显示菜单
            position: absolute;---让菜单内容显示位置只和dropMainuArea有关

    .dropMenu a:hover{
           
    background-color: #ddd;   -菜单鼠标移动的效果,凸显
        }
        .
    dropMainMenuArea:hover .dropMenu {  --鼠标移动到dropMainMenuArea显示dropMenu
            display: block;
        }


     

  • 相关阅读:
    如何理解受控和非受控件组件?
    Redis持久化
    LeetCode刷题笔记-749. 隔离病毒-模拟+搜索
    【Struts2】二_Struts2参数映射、核心配置文件struts.xml中的标签与属性的使用
    全国医疗发票OCR识别,一个接口即满足
    SpringBoot集成Mybatis-Plus
    2021 CCPC 哈尔滨 J. Local Minimum (思维题)
    简单对比一下 C 与 Go 两种语言
    Java实现就医保险管理系统 JAVA+Vue+SpringBoot+MySQL
    数据结构与算法编程题11
  • 原文地址:https://blog.csdn.net/sunbeacher/article/details/140253229