html - 可悬停的侧面导航

标签 html css flexbox

我的侧面导航无法按预期工作。

代码应该做什么

  1. 仅在未悬停时显示图标。

  2. 悬停时,一次显示一个字母,直到整个链接可见。

  3. 当悬停状态不再处于事件状态时,链接应一次消失一个字母,不再可见。

不过,我只需添加 overflow-x 属性即可得到我想要的结果,但它不起作用。

发生了什么

链接显示在图标下方,直到导航的宽度足够宽以使链接正确地与图标位于同一行。

当悬停状态不再处于事件状态时,链接立即消失。

nav {
  background-color: #f5f5f5;
}

nav a {
  text-decoration: none;
  color: black;
}

.side-nav {
  position: fixed;
  top: 54px;
  left: 0;
  bottom: 0;
  width: 5%;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  transition: width 2s;
}

.side-nav>.side-nav-top {
  display: flex;
  flex-direction: column;
}

.side-nav>.side-nav-top>a>span:first-child {
  display: inline-block;
  margin: 5px 20px 5px 20px;
  width: 20px;
}

.side-nav i {
  color: #909090;
}

.side-nav:hover {
  width: 40%;
}

.hide {
  overflow-x: hidden;
  display: none;
}

.side-nav:hover .hide {
  display: inline;
}
<!DOCTYPE html>
<html lang="en" dir="ltr">

<head>
  <meta charset="utf-8">
  <title>Home</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.dev.js"></script>
  <link href="https://fonts.googleapis.com/css?family=Dosis" rel="stylesheet">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
  <link rel="stylesheet" href="/css/index.css">
</head>

<body>
  <nav class="side-nav">
    <div class="side-nav-top">
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
    </div>
  </nav>
</body>

</html>

最佳答案

制作 .side-nav > .side-nav-top > a 一个 flexbox (以防止链接文本在图标下方换行)并添加 white -space: nowrap 防止链接文本的文本换行

现在,您可以将 overflow:hidden 添加到 side-nav 本身,而不是切换菜单文本的显示 - 请参阅下面的演示:

nav {
  background-color: #f5f5f5;
}
nav a {
  text-decoration: none;
  color: black;
}
.side-nav {
  position: fixed;
  top: 54px;
  left: 0;
  bottom: 0;
  width: 3.5rem; /* percentage might not be a good idea here */
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  transition: width 2s;
  overflow: hidden; /* added overflow here*/
} 
.side-nav > .side-nav-top > a { /* made a flexbox */
  display: flex;
  align-items: center; /* aligns the icon and link text vertically */
  white-space: nowrap; /* prevent text wrapping */
}
.side-nav>.side-nav-top {
  display: flex;
  flex-direction: column;
}
.side-nav>.side-nav-top>a>span:first-child {
  margin: 5px 20px 5px 20px;
}
.side-nav i {
  color: #909090;
}
.side-nav:hover {
  width: 40%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.dev.js"></script>
  <link href="https://fonts.googleapis.com/css?family=Dosis" rel="stylesheet">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css">
  
  <nav class="side-nav">
    <div class="side-nav-top">
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
    </div>
  </nav>

关于html - 可悬停的侧面导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55320481/

相关文章:

html - Bootstrap 上的边框和排水沟

html - flex 容器的绝对定位子容器不参与 flex 布局,如何使元素居中?

css - 给出最佳的 flexbox 宽度,但当父级没有更多空间时允许收缩

javascript - 限制特定div中的jquery函数

html - 具有多个 <tbody> 元素的 strip 表的纯 CSS3 解决方案?

javascript - 如何拦截 Javascript 函数中的网络服务器响应

html - Flexbox 元素未与 flex-end 对齐

javascript - 如何仅在用户使用 IE 浏览时隐藏按钮

CSS 高度根据屏幕分辨率

jquery - Accordion 中的 Accordion ;如何使可排序只拖动数据而不是 Accordion 本身