11

我一直在将我的网站迁移到 UIkit 3 而不是 Bootstrap 4。但我已经在导航栏上停留了一段时间。现在,我的导航栏是在 Bootstrap 4 中构建的,看起来像这样:

https://jsfiddle.net/eztwL9p7/1/

<nav class="navbar navbar-toggleable-sm  sticky-top navbar-light bg-faded">
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive">
    <span class="navbar-toggler-icon"></span>
  </button>
  <div class="collapse navbar-collapse" id="navbarResponsive">
    <a class="navbar-brand">brand</a>
    <ul class="navbar-nav mr-auto">
      <li class="nav-item">
        <a class="nav-link">Blog <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Contact</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Projects</a>
      </li>
    </ul>
    <auth-partial>
      <ul class="nav navbar-nav">
        <li class="nav-item float-xs-right">
          <a href="#" class="nav-link">Log in</a>
        </li>
      </ul>
    </auth-partial>
  </div>
</nav>

所以它只是一个普通的导航栏,但是当页面足够小时,会出现一个切换按钮,并且项目变成一个下拉列表。我一直在尝试将其迁移到 UIKit,但在他们的模板中我没有看到任何选项。如果我理解正确,似乎我必须制作 2 个导航栏,一个用于普通视图,然后一个较小的?

Navbar 文档建议像下面这样添加.uk-navbar-toggle类和.uk-navbar-toggle-icon—— 产生一个切换图标——但没有可扩展的菜单,也不能像 Bootstrap 那样隐藏指定的菜单项。

<nav class="uk-navbar uk-navbar-container uk-margin">
    <div class="uk-navbar-left">
        <a class="uk-navbar-toggle" uk-navbar-toggle-icon href="#"></a>
    </div>
</nav>

Navbar 文档建议使用Off -canvas 组件(滑入和滑出页面的侧边栏) - 或Modal 组件- 但这些都不会导致 Bootstrap 样式的切换菜单。

显示响应式导航栏如何在 Bootstrap 的小屏幕上切换/隐藏指定元素的屏幕截图:

正常大小的屏幕 - 显示所有菜单项: 在此处输入图像描述

屏幕更小 - 部分或全部菜单项被隐藏: 在此处输入图像描述

较小尺寸的屏幕 - 按菜单显示菜单项: 在此处输入图像描述

4

3 回答 3

3

很明显,UIkit 期望实现具有重复的导航栏,每个导航栏仅在各自的视口中可见。那是他们自己的网站解决方案。在我看来,这并不总是一个好主意。我强烈反对这种变通方法,因为在我看来,这似乎是一种不必要的方式,使菜单的可维护性、可访问性、结构性、可读性或机器可解析性降低,更容易出错,更不用说重复的内容可能会对搜索引擎优化。这是我在发现这个确实有很大潜力的伟大框架时遇到的最大的失望之一。没有开箱即用的可切换和可堆叠导航栏是一个很大的不,不 - 对不起 UIkit 开发团队。除此之外,UIkit 是一个很棒的工具包。

如果有人想根据他们的建议使用模态或非画布解决方案,请随意这样做。但在这种情况下,我仍然建议不要在您的网站上包含重复的内容。也许可以使用 Javascript 来动态移动内容。

我个人赞成不需要重复内容的类似引导的导航栏解决方案。它目前在周围的许多主要网站上使用。那么为什么不支持呢?

要求:

  • 水平导航栏可在智能手机视图中垂直堆叠
  • 切换到智能手机视图时显示的导航栏“隐藏”和“汉堡图标”
  • 切换图标显示/隐藏智能手机视图中的导航栏
  • 无论是否使用切换图标,导航栏都不会隐藏在桌面视图中

解决方案:

是的,它很丑,我知道...

<nav class="uk-navbar-container uk-flex-column uk-flex-top" data-uk-navbar data-uk-toggle="media: @s; cls: uk-flex-row uk-flex-top; mode: media">
    <button type="button" data-uk-toggle="target: .navbar-collapse; cls: hidden-up-to-s" class="uk-navbar-toggle uk-hidden@s" data-uk-navbar-toggle-icon></button>
    <div class="navbar-collapse hidden-up-to-s">
        <div class="uk-navbar-left">
            <ul data-uk-toggle="media: @s; cls: uk-navbar-nav uk-padding-remove; mode: media" class="uk-nav uk-nav-primary uk-padding-small">
                <li class="uk-active"><a href="#">Active</a></li>
                <li><a href="#">Item</a></li>
            </ul>
        </div>
    </div>
</nav>

以及一些自定义 CSS,以便仅在智能手机视图中隐藏导航栏:

.hidden-up-to-s {
    display: none;
}
@media (min-width: 640px) { /* @breakpoint-small */
    .hidden-up-to-s {
        display: block;
    }
}

更多示例: https ://codepen.io/Hrvoje-Go/pen/LKWojr

于 2019-06-22T16:13:50.180 回答
1

迟到的答案...使用一些 CSS,您可以修改 UiKit 的导航栏,使其像 Bootstrap 的响应式导航栏一样工作。请注意,这个示例的样式看起来并不漂亮——我试图让 CSS 尽可能短。

在移动设备(触摸)上,下拉菜单将在触摸事件时打开/关闭(这是 UiKit 的开箱即用功能)。

.uk-navbar {
  min-height: 50px;
}
.uk-navbar button.navbar-toggle {
  position: absolute;
  right: 0;
  top: 0;
  padding: 9px 10px;
  margin-top: 8px;
  margin-right: 15px;
  margin-bottom: 8px;
  background-color: transparent;
  background-image: none;
  border: 1px solid #ddd;
  border-radius: 4px;
}
.uk-navbar button.navbar-toggle .icon-bar {
  display: block;
  width: 22px;
  height: 2px;
  border-radius: 1px;
  background-color: #888;
}
.uk-navbar button.navbar-toggle .icon-bar + .icon-bar {
  margin-top: 4px;
}
.uk-navbar .uk-navbar-nav {
  flex-wrap: wrap-reverse;
  align-self: flex-end;
}
.uk-navbar .uk-navbar-nav > li > a {
  min-height: auto;
  line-height: 3em;
}
@media (max-width: 959px) {
  .uk-navbar .toggle-target.collapsed {
    display: none;
  }
  .uk-navbar .toggle-target .uk-navbar-nav {
    display: block;
    top: 50px;
    position: absolute;
    left: 0;
    right: 0;
    width: 100%;
    background: #f8f8f8;
  }
  .uk-navbar .toggle-target .uk-navbar-nav li a {
    display: block;
    min-height: 0;
    line-height: 2em;
    padding: 0 15px !important;
  }
  .uk-navbar .toggle-target .uk-navbar-dropdown {
    width: 90%;
    min-width: 200px;
  }
  .uk-navbar .toggle-target .uk-navbar-dropdown[class*='uk-navbar-dropdown-bottom'] {
    margin-top: 0;
  }
}
.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0,0,0,0);
    border: 0;
}
a#logo {
  align-items:baseline
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.3/js/uikit-core.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.3/css/uikit-core.min.css" rel="stylesheet"/>

    <section id="mainnav">
        <nav class="uk-container" uk-navbar>
            <button type="button" class="navbar-toggle uk-hidden@m" uk-toggle="target:.toggle-target; cls:collapsed">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <div class="uk-navbar-brand">
                <a href="/" id="logo" class="uk-navbar-item uk-logo">LOGO</a>
            </div>
            <div class="uk-navbar-right toggle-target collapsed">
                <ul class="uk-navbar-nav">
                    <li class="active"><a href="#">Company</a>
                        <div class="uk-navbar-dropdown">
                            <ul class="uk-nav uk-navbar-dropdown-nav">
                                <li><a href="#">About Us </a></li>
                                <li><a href="#">Quality & Environment</a></li>
                                <li><a href="#">Tools</a></li>
                                <li><a href="#">History</a></li>
                            </ul>
                        </div>
                    </li>
                    <li><a href="#">Services</a>
                        <div class="uk-navbar-dropdown">
                            <ul class="uk-nav uk-navbar-dropdown-nav">
                                <li><a href="#">Programming</a></li>
                                <li><a href="#">Design</a></li>
                                <li><a href="#">Consultancy</a></li>
                            </ul>
                        </div>
                    </li>
                    <li><a href="#">News</a></li>
                    <li><a href="#">Carriere</a></li>
                    <li><a href="#">Contact</a></li>
                    
                </ul>
            </div>
        </nav>
    </section>

于 2019-03-09T19:17:50.700 回答
0
  <nav class="uk-navbar uk-navbar-container uk-margin  uk-hidden@m">
        <div class="uk-navbar-left">
            <a class="uk-navbar-toggle" uk-navbar-toggle-icon href="#" uk-toggle="target: #offcanvas-nav"></a>
        </div>
    </nav>

    <div id="offcanvas-nav" uk-offcanvas="overlay: false">
        <div class="uk-offcanvas-bar   uk-hidden@m">

            <ul class="uk-nav uk-nav-default">
                <li class="uk-active"><a href="#">Active</a></li>
                <li class="uk-parent">
                    <a href="#">Parent</a>
                    <ul class="uk-nav-sub">
                        <li><a href="#">Sub item</a></li>
                        <li><a href="#">Sub item</a></li>
                    </ul>
                </li>
                <li class="uk-nav-header">Header</li>
                <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li>
                <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li>
                <li class="uk-nav-divider"></li>
                <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li>
            </ul>

        </div>
    </div>
于 2021-05-10T17:38:59.400 回答