mouseover提示_快速提示:如何构建MouseOver导航幻灯片效果

mouseover提示

您是否曾经在项目中使用过Slider Revolution WordPress插件? 如果答案是“是”,则您可能已经注意到出现在插件配置页面右上角的迷你工具栏。

最初,只有图标可见,从而使整个结构保持美观和紧凑。 然后,每次将鼠标悬停在图标上时,都会通过平滑的滑入动画来显示其关联的文本。

在今天的练习中,让我们从这种效果中汲取灵感并构建类似的东西。 这是我们将努力的方向:


我们将很快完成此过程,首先写出我们的标记,使用CSS对其进行样式设置,然后最后添加一些JavaScript行为。 在开始之前,我们还将介绍仅CSS方法。 让我们开始吧!

关于滑块革命的一切

1.从页面标记开始

我们将从包含标题和无序列表的标题开始。 每个列表项将包含一个按钮。 该元素将用作SVG图标及其对应文本的包装。

这是必需的标记:

<header>
  <h1>Mini Toolbar</h1>
  <ul>
    <li>
      <button>
        <svg>...</svg>
        <span>Pages</span>
      </button>
    </li>
    <li>
      <button>
        <svg>...</svg>
        <span>Collection</span>
      </button>
    </li>
    <li>
      <button>
        <svg>...</svg>
        <span>Appearance</span>
      </button>
    </li>
    <li>
      <button>
        <svg>...</svg>
        <span>Options</span>
      </button>
    </li>
    <li>
      <button>
        <svg>...</svg>
        <span>Search</span>
      </button>
    </li>
  </ul>
</header>

此处使用的图标取自Envato Elements 。 您可能会认识到该图标集,因为我在上一教程中已经将其用作SVG精灵的一部分。

2.使用CSS定义样式

标头将充当flex容器。 它的子项将垂直居中并在主轴上分布。 我们还将为它提供最大宽度并将其水平居中:

/*CUSTOM VARIABLES HERE*/

header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  max-width: 1000px;
  padding-left: 15px;
  margin: 0 auto;
  border-radius: 5px;
  background: var(--blue);
}

列表和按钮都是具有垂直居中内容的flex容器:

header ul,
header button {
  display: flex;
  align-items: center;
}

所有按钮将具有不同的颜色,并且某些颜色值将与Slider Revolution的迷你工具栏的值匹配。 当鼠标悬停在按钮上时,由于CSS的原生filter()函数,其颜色将略微变浅。

我们还将给他们overflow: hidden因为我们想在幻灯片动画期间隐藏它们的溢出内容:

/*CUSTOM VARIABLES HERE*/

header button {
  padding: 15px;
  overflow: hidden;
  transition: filter 0.25s;
}

header li:nth-child(1) button {
  background: var(--green);
}

header li:nth-child(2) button {
  background: var(--lightblue);
}

header li:nth-child(3) button {
  background: var(--gray);
}

header li:nth-child(4) button {
  background: var(--red);
}

header li:nth-child(5) button {
  background: var(--orange);
}

header button:hover {
  filter: brightness(110%);
}

SVG图标

SVG将具有白色。 并且,如前所述,文本最初将被隐藏。 当我们将鼠标悬停在父按钮上时,它将变为可见:

/*CUSTOM VARIABLES HERE*/

header button svg {
  fill: var(--white);
}

header button span {
  opacity: 0;
  visibility: hidden;
  transition: all 0.25s ease-out;
}

header button:hover span {
  margin-left: 15px;
  opacity: 1;
  visibility: visible;
}

3. JavaScript:侦听鼠标事件

DOM准备就绪后,我们将抓住所有标题按钮。 然后,我们将遍历它们并执行以下操作:

  1. 抓取其文本元素并计算其默认宽度。
  2. 然后,将该元素的宽度设置为0。
  3. 每次将鼠标悬停在按钮上时,都会重置其文本元素的默认宽度。
  4. 然后,每当我们停止将鼠标悬停在按钮上时,都会将其宽度设置为0。

这是完成此行为JavaScript:

const buttons = document.querySelectorAll("header button");

buttons.forEach(el => {
  // 1
  const span = el.lastElementChild;
  const width = span.offsetWidth;
  // 2
  span.style.width = 0;
  // 3
  el.addEventListener("mouseenter", () => {
    span.style.width = `${width}px`;
  });
  // 4
  el.addEventListener("mouseleave", () => {
    span.style.width = 0;
  });
});

纯CSS解决方案

是时候讨论最后一件事了。 我最初的尝试是构建仅CSS的演示。 因此,最初,我将所有spanmax-width属性设置为0。接下来,当悬停按钮时,将该值更改为固定的110px。 在这里可以正常工作,但是此解决方案有局限性,因为循环中存在一个硬编码的值。

检查下面CSS解决方案(也许您有一些改进的想法?):

如果我们添加一个包含更多文本的新菜单项,则会遇到问题。 您可能认为可以将max-width值设置为auto ,但是不幸的是,该解决方案根本无法工作!

这些局限性促使我首先考虑一种快速JavaScript解决方案。

结论

结束了另一个简短的教程,伙计们! 感谢您的关注,希望您今天学到了一些新知识。 随意扩展该演示,并使其(例如)使其在单击事件而不是鼠标事件上起作用。 另外,如果您这样做,请确保使其可访问。

再次感谢您的阅读!

翻译自: https://webdesign.tutsplus.com/tutorials/quick-tip-how-to-build-a-mouseover-navigation-slide-effect--cms-34100

mouseover提示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值