如何将移动端汉堡菜单图标移至页眉右侧?
解决方案:将汉堡菜单图标移至屏幕右侧
别担心,这个调整其实很简单,只需要修改几处CSS属性就能搞定!下面是修改后的完整代码,我标注了关键的改动点:
修改后的CSS代码
/* Hamburger Menu */ /* Mixin */ /* reset */ * { padding: 0; margin: 0; } nav { background-color: #91cfa1; height: 50px; padding: 0 16px; display: -ms-flexbox; display: -webkit-box; display: -webkit-flex; display: flex; -webkit-align-items: center; align-items: center; /* 新增:让导航栏内元素靠右对齐 */ justify-content: flex-end; -webkit-justify-content: flex-end; -ms-flex-pack: end; /* fade in checked menu */ } nav .m-menu__checkbox { display: none; } nav label.m-menu__toggle { cursor: pointer; } nav .m-menu { position: absolute; top: 0; /* 修改:把菜单从左侧移到右侧 */ right: 0; left: auto; max-width: 450px; width: calc(100vw - 30px); height: 100%; /* 修改:初始状态让菜单在屏幕右侧外 */ -moz-transform: translate3d(450px, 0, 0); -o-transform: translate3d(450px, 0, 0); -ms-transform: translate3d(450px, 0, 0); -webkit-transform: translate3d(450px, 0, 0); transform: translate3d(450px, 0, 0); -moz-transition: transform 0.35s; -o-transition: transform 0.35s; -webkit-transition: transform 0.35s; transition: transform 0.35s; z-index: 1; overflow: hidden; background-color: #fff; } nav .m-menu__overlay { background-color: rgba(103, 103, 103, 0.5); position: absolute; top: 0; width: 100%; bottom: 0; z-index: 1; display: none; } nav .m-menu__header { padding: 0 16px; height: 50px; display: -ms-flexbox; display: -webkit-box; display: -webkit-flex; display: flex; -webkit-justify-content: space-around; justify-content: space-around; -ms-flex-pack: space-around; -webkit-align-items: center; align-items: center; border-bottom: 1px solid #e8e8e8; } nav .m-menu__header span { font-size: 1.2rem; font-weight: bold; text-align: center; width: 100%; } nav .m-menu .m-menu { /* 修改:子菜单改为向左滑入 */ -moz-transform: translate3d(-480px, 0, 0); -o-transform: translate3d(-480px, 0, 0); -ms-transform: translate3d(-480px, 0, 0); -webkit-transform: translate3d(-480px, 0, 0); transform: translate3d(-480px, 0, 0); } nav .m-menu ul { height: 100%; overflow-y: auto; } nav .m-menu ul li a, nav .m-menu ul li label { display: block; text-align: left; padding: 0 15px; line-height: 47px; text-decoration: none; color: #333; cursor: pointer; font-size: 1rem; border-bottom: 1px solid #e8e8e8; position: relative; } nav .m-menu ul li label.a-label__chevron::after { content: ""; position: absolute; display: inline-block; height: 10px; width: 10px; border-color: #333; border-style: solid; border-width: 1px 1px 0 0; -moz-transform: rotate(45deg); -o-transform: rotate(45deg); -ms-transform: rotate(45deg); -webkit-transform: rotate(45deg); transform: rotate(45deg); top: 50%; margin-top: -5px; right: 16px; } nav .m-menu ul li .-invisible { border-bottom: 0; } nav .m-menu .m-menu label.m-menu__toggle { display: -ms-flexbox; display: -webkit-box; display: -webkit-flex; display: flex; border-bottom: 0; padding: 0; -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; } nav .m-menu__checkbox:checked ~ .m-menu__overlay { display: block; } nav .m-menu__checkbox:checked ~ .m-menu { /* 修改:菜单滑入屏幕时回到右侧位置 */ -moz-transform: translate3d(0, 0, 0); -o-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } .wrapper { width: 480px; height: 667px; margin: 0 auto; overflow: hidden; background-color: #fff; position: relative; } body { background-color: #f1f1f1; padding: 0; margin: 0; font-family: sans-serif; }
关键改动说明:
- 导航栏布局:给
nav添加justify-content: flex-end(加上前缀兼容旧浏览器),让汉堡菜单图标直接靠右显示。 - 主菜单位置:把
nav .m-menu的left: 0改成right: 0,同时将初始的transform: translate3d(-450px, 0, 0)改为translate3d(450px, 0, 0),这样菜单默认隐藏在屏幕右侧外面,点击后平滑滑入。 - 子菜单滑动方向:修改
nav .m-menu .m-menu的transform为translate3d(-480px, 0, 0),让子菜单向左滑入,符合右侧菜单的交互逻辑。
HTML部分不需要做任何修改,直接用你原来的代码就可以正常运行啦~
内容的提问来源于stack exchange,提问作者Shoeb Siddique
相关产品推荐
相关产品推荐

