HTML&CSS :颜值爆表的导航菜单

这段 HTML 和 CSS 代码实现了一个具有现代感的卡片式界面,展示了多个带有图标的菜单选项。


大家复制代码时,可能会因格式转换出现错乱,导致样式失效。建议先少量复制代码进行测试,若未能解决问题,私信回复源码两字,我会发送完整的压缩包给你。

演示效果

HTML&CSS

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>公众号关注:前端Hardy</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }

        .card {
            width: 200px;
            background-color: rgba(36, 40, 50, 1);
            background-image: linear-gradient(139deg,
                    rgba(36, 40, 50, 1) 0%,
                    rgba(36, 40, 50, 1) 0%,
                    rgba(37, 28, 40, 1) 100%);
            border-radius: 10px;
            padding: 15px 0px;
            display: flex;
            flex-direction: column;
            gap: 10px;
        }

        .card .separator {
            border-top: 1.5px solid #42434a;
        }

        .card .list {
            list-style-type: none;
            display: flex;
            flex-direction: column;
            gap: 8px;
            padding: 0px 10px;
            margin: 0;
        }

        .card .list .element {
            display: flex;
            align-items: center;
            color: #7e8590;
            gap: 10px;
            transition: all 0.3s ease-out;
            padding: 4px 7px;
            border-radius: 6px;
            cursor: pointer;
        }

        .card .list .element svg {
            width: 19px;
            height: 19px;
            transition: all 0.3s ease-out;
        }

        .card .list .element .label {
            font-weight: 600;
            margin: 0;
            padding: 0;
        }

        .card .list .element:hover {
            background-color: #5353ff;
            color: #ffffff;
            transform: translate(1px, -1px);
        }

        .card .list .delete:hover {
            background-color: #8e2a2a;
        }

        .card .list .element:active {
            transform: scale(0.99);
        }

        .card .list:not(:last-child) .element:hover svg {
            stroke: #ffffff;
        }

        .card .list:last-child svg {
            stroke: #bd89ff;
        }

        .card .list:last-child .element {
            color: #bd89ff;
        }

        .card .list:last-child .element:hover {
            background-color: rgba(56, 45, 71, 0.836);
        }
    </style>
</head>

<body>
    <div class="card">
        <ul class="list">
            <li class="element">
                <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 24 24" fill="none"
                    stroke="#7e8590" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
                    class="lucide lucide-pencil">
                    <path
                        d="M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z">
                    </path>
                    <path d="m15 5 4 4"></path>
                </svg>
                <p class="label">Rename</p>
            </li>
            <li class="element">
                <svg class="lucide lucide-user-round-plus" stroke-linejoin="round" stroke-linecap="round"
                    stroke-width="2" stroke="#7e8590" fill="none" viewBox="0 0 24 24" height="24" width="24"
                    xmlns="http://www.w3.org/2000/svg">
                    <path d="M2 21a8 8 0 0 1 13.292-6"></path>
                    <circle r="5" cy="8" cx="10"></circle>
                    <path d="M19 16v6"></path>
                    <path d="M22 19h-6"></path>
                </svg>
                <p class="label">Add Member</p>
            </li>
        </ul>
        <div class="separator"></div>
        <ul class="list">
            <li class="element">
                <svg class="lucide lucide-settings" stroke-linejoin="round" stroke-linecap="round" stroke-width="2"
                    stroke="#7e8590" fill="none" viewBox="0 0 24 24" height="24" width="24"
                    xmlns="http://www.w3.org/2000/svg">
                    <path
                        d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z">
                    </path>
                    <circle r="3" cy="12" cx="12"></circle>
                </svg>
                <p class="label">Settings</p>
            </li>
            <li class="element delete">
                <svg class="lucide lucide-trash-2" stroke-linejoin="round" stroke-linecap="round" stroke-width="2"
                    stroke="#7e8590" fill="none" viewBox="0 0 24 24" height="24" width="24"
                    xmlns="http://www.w3.org/2000/svg">
                    <path d="M3 6h18"></path>
                    <path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"></path>
                    <path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"></path>
                    <line y2="17" y1="11" x2="10" x1="10"></line>
                    <line y2="17" y1="11" x2="14" x1="14"></line>
                </svg>
                <p class="label">Delete</p>
            </li>
        </ul>
        <div class="separator"></div>
        <ul class="list">
            <li class="element">
                <svg class="lucide lucide-users-round" stroke-linejoin="round" stroke-linecap="round" stroke-width="2"
                    stroke="#7e8590" fill="none" viewBox="0 0 24 24" height="24" width="24"
                    xmlns="http://www.w3.org/2000/svg">
                    <path d="M18 21a8 8 0 0 0-16 0"></path>
                    <circle r="5" cy="8" cx="10"></circle>
                    <path d="M22 20c0-3.37-2-6.5-4-8a5 5 0 0 0-.45-8.3"></path>
                </svg>
                <p class="label">Team Access</p>
            </li>
        </ul>
    </div>

</body>

</html>

HTML 结构

  • card:定义一个卡片容器,用于包裹所有的菜单项和分隔线。
  • list:定义一组菜单项,每个 ul 包含若干个 li 元素。
  • element:定义一个菜单项,包含一个 SVG 图标和一个文本标签 label。
  • separator:定义分隔线,用于分隔不同的菜单组。

CSS 样式

  • body:设置页面的整体布局,使卡片居中显示。
  • .card:定义卡片的样式,包括宽度、背景颜色、渐变效果、圆角、内边距和子元素的排列方式。
  • .card .separator:定义分隔线的样式,使用 border-top 创建一条细线。
  • .card .list:定义菜单项组的样式,包括移除默认列表样式、垂直排列列表项、设置内边距和间距。
  • .card .list .element:定义菜单项的样式,包括布局、颜色、间距、过渡效果、内边距和圆角。
  • .card .list .element svg:定义 SVG 图标的样式,包括宽度、高度和过渡效果。
  • .card .list .element .label:定义文本标签的样式,包括加粗字体和移除外边距。
  • .card .list .element:hover:定义菜单项鼠标悬停时的样式,包括背景颜色、文字颜色和位移效果。
  • .card .list .delete:hover:定义"删除"按钮鼠标悬停时的样式,背景颜色为红色。
  • .card .list .element:active:定义菜单项鼠标点击时的样式,轻微缩放效果。
  • .card .list:not(:last-child) .element:hover svg:定义非最后一组菜单项的 SVG 图标在鼠标悬停时的颜色。
  • .card .list:last-child svg:定义最后一组菜单项的 SVG 图标颜色。
  • .card .list:last-child .element:定义最后一组菜单项的文字颜色。
  • .card .list:last-child .element:hover:定义最后一组菜单项鼠标悬停时的背景颜色。

各位互联网搭子,要是这篇文章成功引起了你的注意,别犹豫,关注、点赞、评论、分享走一波,让我们把这份默契延续下去,一起在知识的海洋里乘风破浪!

相关推荐
雪芽蓝域zzs7 分钟前
JavaScript splice() 方法
开发语言·javascript·ecmascript
Maỿbe43 分钟前
利用html制作简历网页和求职信息网页
前端·html
森叶1 小时前
Electron 主进程中使用Worker来创建不同间隔的定时器实现过程
前端·javascript·electron
霸王蟹1 小时前
React 19 中的useRef得到了进一步加强。
前端·javascript·笔记·学习·react.js·ts
霸王蟹1 小时前
React 19版本refs也支持清理函数了。
前端·javascript·笔记·react.js·前端框架·ts
codelxy1 小时前
vue引用cesium,解决“Not allowed to load local resource”报错
javascript·vue.js
程序猿阿伟2 小时前
《社交应用动态表情:RN与Flutter实战解码》
javascript·flutter·react native
明似水2 小时前
Flutter 开发入门:从一个简单的计数器应用开始
前端·javascript·flutter
沐土Arvin2 小时前
前端图片上传组件实战:从动态销毁Input到全屏预览的全功能实现
开发语言·前端·javascript
Zww08913 小时前
el-dialog鼠标在遮罩层松开会意外关闭,教程图文并茂
javascript·vue.js·计算机外设