html - 带定位的 CSS 悬停列表

标签 html css sass hover flexbox

我的列表元素悬停时遇到一些 CSS 问题。

当我悬停时,似乎发生了两件事。

1)当我将鼠标悬停在列表上时,元素的宽度会像应有的那样扩展,但其中一个元素被插入其位置,我猜是因为我将其设置为绝对,但我不确定其他元素是什么绕过这个。

2)当我把鼠标拿开时,似乎所有元素都变得不合适了。

我想要的是能够将鼠标悬停在每个列表上,并使其随文本展开,并且不会移动任何其他元素。

代码如下:

.menu-right {
  right: 0
}
.icon-steeringWheel {
  background-color: red;
  width: 40px;
  height: 40px;
}
.visualiser-menu {
  display: flex;
  position: absolute;
}
.visualiser-menu ul {
  display: flex;
  flex-direction: column;
  width: 100%;
}
.visualiser-menu ul li {
  display: flex;
  flex-direction: row;
  margin-bottom: 20px;
}
.visualiser-menu ul li .visualiser-menu-btn {
  background-color: #333333;
  color: white;
  width: 45px;
  height: 44px;
  padding: 11px;
  transition: all 0.3s ease 0s;
  font-size: 1.5rem;
  text-align: center;
  padding: 11px;
  display: inline-flex;
}
.visualiser-menu ul li .visualiser-menu-btn span {
  margin-right: 10px;
}
.visualiser-menu ul li .visualiser-menu-btn:hover {
  background-color: blue;
  position: absolute;
  right: 0;
  width: 230px;
}
<div class="visualiser-menu menu-right">
  <ul>
    <li><a class="visualiser-menu-btn" id="selectModel" href="#"><span class="icon-steeringWheel ui-"></span> this is some text</a>
    </li>
    <li><a class="visualiser-menu-btn" href="#"><span class="icon-steeringWheel"></span> this is some text</a>
    </li>
    <li><a class="visualiser-menu-btn" href="#"><span class="icon-steeringWheel"></span> this is some text</a>
    </li>
    <li><a class="visualiser-menu-btn" href="#"><span class="icon-steeringWheel"></span> this is some text</a>
    </li>
  </ul>
</div>

最佳答案

当您将列表项悬停在 position:absolute 上时,您会将其从文档流中删除。这意味着其他列表项甚至不知道它存在,因此它们占据了悬停项的原始空间。这就是你要转变的原因。

无需对代码进行大量重构,您需要补偿列表项悬停时丢失的空间。

一种方法是在悬停发生的同时定义列表项的高度。

这是一个示例(仅针对第一个列表项)。

.menu-right {
  right: 0;
}
.icon-steeringWheel {
  background-color: red;
  width: 40px;
  height: 40px;
}
.visualiser-menu {
  display: flex;
  position: absolute;
}
.visualiser-menu ul {
  display: flex;
  flex-direction: column;
  padding-left: 0;
}
.visualiser-menu ul li {
  display: flex;
  flex-direction: row;
  justify-content: flex-end;
  /* NEW */
  margin-bottom: 20px;
}
.visualiser-menu ul li .visualiser-menu-btn {
  background-color: #333333;
  color: white;
  width: 45px;
  height: 44px;
  padding: 11px;
  transition: all 0.3s ease 0s;
  font-size: 1.5rem;
  text-align: center;
  display: inline-flex;
}
.visualiser-menu ul li .visualiser-menu-btn span {
  margin-right: 10px;
}
.visualiser-menu ul li:first-child:hover {
  height: 65px;
}
/* NEW */

.visualiser-menu ul li:first-child .visualiser-menu-btn:hover {
  background-color: blue;
  position: absolute;
  right: 0;
  width: 230px;
}
<div class="visualiser-menu menu-right">
  <ul>
    <li><a class="visualiser-menu-btn" id="selectModel" href="#"><span class="icon-steeringWheel ui-"></span> this is some text</a>
    </li>
    <li><a class="visualiser-menu-btn" href="#"><span class="icon-steeringWheel"></span> this is some text</a>
    </li>
    <li><a class="visualiser-menu-btn" href="#"><span class="icon-steeringWheel"></span> this is some text</a>
    </li>
    <li><a class="visualiser-menu-btn" href="#"><span class="icon-steeringWheel"></span> this is some text</a>
    </li>
  </ul>
</div>

关于html - 带定位的 CSS 悬停列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41910256/

相关文章:

jquery - 如何查找另一个范围内包含文本的范围

javascript - 制作 :before not clickable in Firefox

css - SASS:使用@extend 时为 'Undefined variable'

css - SCSS 在从不同文件夹导入时未正确传递相对图像引用

html - CSS 下拉菜单

Android - 通过 Intent 将 html 文件发送到打印应用程序,不会显示为 html

html - 在不知道图像方向的情况下,将图像以其较小的一侧适合容器

html - 增加div的宽度

html - CSS Image Sprites 在 IE7 中不工作

Mixin、函数和变量名称的 Sass 插值