Bootstrap导航栏未正常显示求助(Drupal主题开发)
排查Bootstrap导航栏不显示的问题
首先直接回应你的疑问:jQuery确实是影响Bootstrap导航栏功能的关键因素,但你的代码里还有几个更优先的问题需要解决,我们一步步来理清楚:
1. CSS文件加载顺序错误
你把Bootstrap的CSS引用放在了<body>里的脚本之后,这会导致页面渲染时先加载HTML结构,再加载样式,不仅会出现闪屏,还可能导致导航栏样式无法正常应用。正确的做法是把所有CSS文件都放在<head>标签内:
<head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Pauvre mais ravi theme</title> <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta/css/bootstrap.min.css" rel="stylesheet" /> <link rel="stylesheet" type="text/css" href="css/app.css"> </head>
2. Bootstrap 4已废弃navbar-default类
你用的是Bootstrap 4.0.0-beta,这个版本已经移除了Bootstrap 3里的navbar-default类,取而代之的是navbar-light(搭配浅色背景)或navbar-dark(搭配深色背景),再加上bg-*类来设置背景色。比如改成:
<nav class="navbar navbar-expand-lg navbar-light bg-light">
这里的navbar-expand-lg是用来控制响应式折叠的断点,确保在大屏上导航栏展开,小屏上显示折叠按钮。
3. jQuery版本与Bootstrap的兼容性
你用的jQuery 2.1.1虽然满足Bootstrap 4的最低要求(1.9.1+),但要注意Drupal本身可能已经加载了jQuery,容易出现版本冲突。建议你:
- 检查Drupal的jQuery版本,如果自带的版本符合Bootstrap要求,就不要再重复引入外部jQuery,避免冲突
- 如果必须引入,确保它是第一个加载的脚本(你现在的顺序是对的:jQuery → Popper → Bootstrap,这个顺序不能乱)
修正后的完整导航栏代码示例
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Pauvre mais ravi theme</title> <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta/css/bootstrap.min.css" rel="stylesheet" /> <link rel="stylesheet" type="text/css" href="css/app.css"> </head> <body> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <a class="navbar-brand" href="#">Navbar</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarsExampleDefault"> <ul class="navbar-nav mr-auto"> <li class="nav-item active"> <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a> </li> <li class="nav-item"> <a class="nav-link" href="#">Link</a> </li> <li class="nav-item"> <a class="nav-link disabled" href="#">Disabled</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a> <div class="dropdown-menu" aria-labelledby="dropdown01"> <a class="dropdown-item" href="#">Action</a> <a class="dropdown-item" href="#">Another action</a> <a class="dropdown-item" href="#">Something else here</a> </div> </li> </ul> <form class="form-inline my-2 my-lg-0"> <input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search"> <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button> </form> </div> </nav> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta/js/bootstrap.min.js"></script> </body> </html>
另外,在Drupal环境中开发主题时,建议通过Drupal的库(Libraries)系统来加载Bootstrap和jQuery,而不是直接在模板里写外链,这样能更好地管理依赖和避免版本冲突。
内容的提问来源于stack exchange,提问作者Jules Perrelet
相关产品推荐
相关产品推荐

