如何用HTML和CSS制作屏幕<800px时收缩的带图标响应式垂直菜单?
实现带图标的响应式垂直菜单(仅HTML+CSS)
实现思路
- 用CSS
@media媒体查询监听屏幕宽度,当宽度小于800px时触发菜单收缩逻辑 - 借助CSS
transition属性实现菜单宽度变化的平滑过渡效果 - 通过控制菜单项文字的显示/隐藏,配合菜单容器宽度调整,完成"图标+文字"到"仅图标"的切换
完整代码示例
HTML 结构
<div class="vertical-menu"> <a href="#" class="menu-item"> <span class="icon">📊</span> <span class="text">Position1</span> </a> <a href="#" class="menu-item"> <span class="icon">📱</span> <span class="text">Position2</span> </a> <a href="#" class="menu-item"> <span class="icon">⚙️</span> <span class="text">Position3</span> </a> </div>
CSS 样式
/* 基础菜单样式 */ .vertical-menu { width: 200px; background-color: #f1f1f1; transition: width 0.3s ease-in-out; /* 宽度变化的过渡动画 */ overflow: hidden; /* 隐藏超出容器的内容 */ } .menu-item { display: flex; align-items: center; padding: 12px 16px; text-decoration: none; color: #333; transition: background-color 0.2s; } .menu-item:hover { background-color: #ddd; } .icon { font-size: 18px; margin-right: 12px; min-width: 20px; /* 确保图标宽度固定,收缩时不偏移 */ } .text { transition: opacity 0.2s ease-in-out; /* 文字淡入淡出效果 */ } /* 屏幕宽度小于800px时的收缩样式 */ @media (max-width: 800px) { .vertical-menu { width: 60px; /* 收缩后仅容纳图标 */ } .menu-item .text { opacity: 0; width: 0; margin: 0; /* 移除文字的间距 */ overflow: hidden; } }
关键代码说明
- 过渡动画:
.vertical-menu上的transition: width 0.3s ease-in-out实现菜单宽度变化的平滑动画,.text上的opacity过渡实现文字的淡入淡出效果 - 媒体查询:
@media (max-width: 800px)是触发收缩的条件,可根据需求调整阈值 - 图标固定宽度:给
.icon设置min-width,确保菜单收缩时图标位置保持稳定,不会因为文字消失而偏移 - 文字隐藏逻辑:收缩时通过设置
opacity:0和width:0隐藏文字,同时配合overflow:hidden避免文字占用空间
你可以将示例中的 emoji 图标替换为 Font Awesome 或其他图标库的类名(比如 <i class="fa-solid fa-chart-line"></i>),只要确保图标能正常显示即可。
内容的提问来源于stack exchange,提问作者fantomx775
相关产品推荐
相关产品推荐

