html - 导航栏中的响应性
问题描述
所以我有一个看起来像这样的导航栏。
<nav class="navbar navbar-expand-lg border-bottom bg-white">
<div class="collapse navbar-collapse d-flex justify-content-between" id="myNav">
<div class="navbar-header navbar-left">
<a href="https://placeholder.com"><img src="https://via.placeholder.com/200x100"></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#cdm_nav" aria-controls="myNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<ul class="navbar-nav">
<li class="nav-item">
<a href="#" class="nav-link">Link</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Link</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Link</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Link</a>
</li>
</ul>
<form class="form-inline">
<div class="input-group">
<div class="input-group-prepend dropdown">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span>All</span>
</button>
<ul class="dropdown-menu" role="menu">
<li class="dropdown-item">Category 1</li>
<li class="dropdown-item">Category 1</li>
<li class="dropdown-item">Category 1</li>
</ul>
</div>
<div class="dropdown">
<input type="text" class="form-control" data-toggle="dropdown">
<ul id="suggestions" class="dropdown-menu" role="menu">
<li class="dropdown-item">Keyword...</li>
</ul>
</div>
<div class="input-group-append">
<button class="btn btn-primary" type="submit"><i class="fa fa-search"></i>
</button>
</div>
</div>
</form>
<ul class="nav nav-pills nav-fill nav-right">
<li>Link</li>
<li>Link</li>
</ul>
</div>
</nav>
https://codepen.io/arc-ranges/pen/RYqQrG
现在,这就是目前大屏幕应该有的样子。但是,在较小的屏幕上,例如 1280 像素,它应该具有:
- 左侧的导航品牌(浮动)
- 新行上有四个链接和搜索栏(底部)
- 右侧的两个链接(浮动)
问题:实现这一目标的最佳方法是什么?
我正在考虑使用引导网格系统或隐藏整个导航并使用媒体查询显示不同的导航栏。
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.2/css/bootstrap.min.css" rel="stylesheet"/>
<nav class="navbar navbar-expand-lg border-bottom bg-white">
<div class="collapse navbar-collapse d-flex justify-content-between" id="myNav">
<div class="navbar-header navbar-left">
<a href="https://placeholder.com"><img src="https://via.placeholder.com/200x100"></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#cdm_nav" aria-controls="myNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<ul class="navbar-nav">
<li class="nav-item">
<a href="#" class="nav-link">Link</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Link</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Link</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Link</a>
</li>
</ul>
<form class="form-inline">
<div class="input-group">
<div class="input-group-prepend dropdown">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span>All</span>
</button>
<ul class="dropdown-menu" role="menu">
<li class="dropdown-item">Category 1</li>
<li class="dropdown-item">Category 1</li>
<li class="dropdown-item">Category 1</li>
</ul>
</div>
<div class="dropdown">
<input type="text" class="form-control" data-toggle="dropdown">
<ul id="suggestions" class="dropdown-menu" role="menu">
<li class="dropdown-item">Keyword...</li>
</ul>
</div>
<div class="input-group-append">
<button class="btn btn-primary" type="submit"><i class="fa fa-search"></i>
</button>
</div>
</div>
</form>
<ul class="nav nav-pills nav-fill nav-right">
<li>Link</li>
<li>Link</li>
</ul>
</div>
</nav>
任何帮助将不胜感激。祝你今天过得愉快!
解决方案
这是一个尝试。
<nav class="navbar navbar-expand-lg border-bottom bg-white">
<div class="collapse navbar-collapse d-flex flex-wrap" id="myNav">
<div class="navbar-header navbar-left order-0 col-6 col-xl-2">
<a href="https://placeholder.com"><img src="https://via.placeholder.com/200x100"></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#cdm_nav" aria-controls="myNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class="d-flex justify-content-between order-2 order-xl-1 flex-nowrap col-12 col-xl-8">
<ul class="navbar-nav d-flex flex-row justify-content-around justify-content-xl-center col-4 offset-2 offset-xl-0 col-xl-6">
<li class="nav-item">
<a href="#" class="nav-link">Link</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Link</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Link</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Link</a>
</li>
</ul>
<form class="form-inline col-5 col-xl-6 justify-content-xl-center">
<div class="input-group">
<div class="input-group-prepend dropdown">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span>All</span>
</button>
<ul class="dropdown-menu" role="menu">
<li class="dropdown-item">Category 1</li>
<li class="dropdown-item">Category 1</li>
<li class="dropdown-item">Category 1</li>
</ul>
</div>
<div class="dropdown">
<input type="text" class="form-control" data-toggle="dropdown">
<ul id="suggestions" class="dropdown-menu" role="menu">
<li class="dropdown-item">Keyword...</li>
</ul>
</div>
<div class="input-group-append">
<button class="btn btn-primary" type="submit"><i class="fa fa-search"></i>
</button>
</div>
</div>
</form>
</div>
<ul class="nav nav-pills nav-fill nav-right order-1 order-xl-2 col-6 col-xl-2 d-flex justify-content-end">
<li>Link</li>
<li>Link</li>
</ul>
</div>
</nav>
您可能想尝试为较小的视口添加类以及您想要修饰外观的任何其他方式,您可以在此处找到它们https://getbootstrap.com/docs/4.1/utilities/ flex/,但基本上这是一般的想法。对于不同的视口,不必有两个不同的版本,这样做通常是不受欢迎的。在我的版本中,您可以只使用 Bootstrap 类而不需要额外的 CSS 来完成它
推荐阅读
- jquery - 如何从 ASP.NET Core 的动态列表中删除一行?
- javascript - v-on 处理程序中的错误(Promise/async):“TypeError:无法读取属性 * of null”
- swift - 从“子视图”更新 API 数据
- python - 有没有办法同时使用@njit 和 np.object 类型的二维数组,以提高效率?
- javascript - 为什么我的代码在每个元素后都返回一个逗号?
- c# - 如何在 ASP.NET MVC 中创建一个接收字符串列表的 POST 方法?
- python - 如何将一个国家/地区的名称转换为具有当前和过时国家/地区单独列表的大陆
- bash - ITerm:有没有办法在不运行的情况下重新打印先前命令的输出?
- reactjs - componentDidUpdate 在第一次渲染时被调用,尽管没有任何改变
- mysql - 显示不包括最小值和最大值的列数