响应式菜单栏在下级目录下搜索、汉堡等图标不显示问题排查
问题原因排查及解决方案
核心问题:Font Awesome 样式资源加载失败
图标不显示的根本原因是不同层级页面引用Font Awesome资源的相对路径不匹配:
- 位于
/airlines/malaysia/index.htm层级页面时,你使用的相对路径可以正常命中Font Awesome样式文件 - 进入更深一级的
/airlines/malaysia/airasia/index.htm页面时,原相对路径会向上多跳转一层,找不到对应的样式文件,无法渲染fa-search、fa-bars、fa-times这类图标。
次要问题:现有代码存在语法报错
你提供的JS代码中,console.log(barIcon)执行时barIcon还未定义,会在控制台抛出引用错误,虽不直接导致图标消失,但会影响后续JS逻辑的稳定性。
修复方案
修改Font Awesome资源引用为绝对路径
把页面head中引入Font Awesome的代码从相对路径(例如../../css/font-awesome.min.css)改为根路径开头的绝对路径,示例:<link rel="stylesheet" href="/css/font-awesome.min.css">
根路径开头的地址会固定从站点根目录查找资源,不受当前页面层级影响。修正JS代码的未定义变量问题
删除无用的console.log(barIcon)代码,或者将其移动到barIcon变量定义之后的位置,修改后的JS代码参考:
<script> function myFunction() { var x = document.getElementById("nav"); if (x.className === "navbar") { x.className += " responsive"; var barIcon = document.getElementsByClassName('fa-bars')[0]; barIcon.classList.add("fa-times"); barIcon.classList.remove("fa-bars"); } else { var closeIcon = document.getElementsByClassName('fa-times')[0]; closeIcon.classList.remove("fa-times"); closeIcon.classList.add("fa-bars"); x.className = "navbar"; } } </script>
- 可选优化:统一导航链接、搜索提交地址为绝对路径
你当前导航栏的跳转链接、搜索form的action都使用了相对路径,在深层级页面也可能出现404问题,建议统一修改为根路径开头的绝对路径,例如:
- 把
../../../passenger_guides/index.htm改为/passenger_guides/index.htm - 把
action="search.htm"改为action="/search.htm"
内容的提问来源于stack exchange,提问作者sexy18
相关产品推荐
相关产品推荐

