【问题标题】:Element to be visible only for particular height元素仅在特定高度可见
【发布时间】:2018-03-10 23:54:41
【问题描述】:

我是 HTML、CSS 和 Javascript 的新手。 我有一个元素(导航点),应该只对我页面的特定部分可见。其余的时间我宁愿把它隐藏起来。我尝试使用媒体查询:

@media screen and (min-height:200vh) and (max-height: 600vh)
{
.invisible{
    visibility: visible;
  }
}

段在一个 div 中。那么是否有可能在悬停在另一个 div 上时使这个 div 可见?

【问题讨论】:

  • 请同时包含 HTML 和 javscript。

标签: html css visibility


【解决方案1】:

首先,在您的媒体查询中使用vhvw 是行不通的。根据定义,100vh 是查看您网站的设备视口高度的 100%。这意味着min-height: 200vh 媒体查询仅适用于视口比设备视口本身高 2 倍的设备。没有什么可以比自己高两倍,除非它是 0,所以这个媒体查询永远不会生效。

也就是说,我希望你能澄清你所说的segment究竟是什么意思,以及你想要完成什么。你想...

  1. 当客户端的视口 height 不满足特定值时隐藏 nav-dots
  2. 在特定的 DOM 元素上隐藏 nav-dots,例如 <p><div>?
  3. 当用户滚动超过某个阈值时隐藏导航点

为了回答第二种情况以及您稍后关于在悬停在另一个 div 上时隐藏 div 的问题,我提出了以下解决方案。但是,如果这不是您想要的,我很乐意更新我的答案。


HTML:

<div class="container" id="my_segment">
  <div class="nav-dots">
    Navigation dots go here
  </div>
</div>

在这里,我们将my_segment id 分配给了我们想要隐藏nav-dots 的元素。请注意,每个页面只能使用一次唯一的 id

CSS:

.container {
  display: inline-block;
  background-color: #FFCCAA;
}

.invisible {
  visibility: hidden;
}

JavaScript:

// Find our element
let seg = document.getElementById('my_segment');

// Add a mouseover event handler to our element
seg.addEventListener('mouseover', function() {
  // Find nav-dots inside our element
  let nav_dot_elements = seg.getElementsByClassName('nav-dots');
  // Remove the 'invisible' class
  nav_dot_elements[0].classList.remove('invisible');
});

// Add a mouseout event handler
seg.addEventListener('mouseout', function() {
  // Find nav-dots inside our element
  let nav_dot_elements = seg.getElementsByClassName('nav-dots');
  // Add the 'invisible' class
  nav_dot_elements[0].classList.add('invisible');
});

Codepen demo

由于您是 JS 新手,所以我尽量让这个示例保持简单。这仅适用于您在一个元素上使用“悬停显示”行为并且您仅在此容器内使用一个“导航点”元素。自己尝试一下,然后告诉我它是如何工作的!

【讨论】:

  • Misacorp,这对我不起作用。段我的意思是另一个div。基本上我希望我的导航点只显示在那个 div 中。我写了一个 jquery 代码,虽然不是很完美,但是有点效果。
  • $(document).ready(function() { $(".container1").hide(); //最初隐藏你的div var topOfOthDiv = $(".fourth").offset( ).top; var bottomOfOthDiv = $("#fifth").offset().top; $(window).scroll(function() { if($(window).scrollTop() > topOfOthDiv && $(window). scrollTop()
  • 根据您的代码判断,您希望 .container1 在用户滚动到 .fourth 时显示并在任何其他情况下隐藏 .container1。您的代码看起来不错,但如果您的页面上有多个 .fourth.container1 实例,您会遇到问题。如果您想要对此或其他改进的解决方案,您能否提供其余代码,例如作为工作的 Codepen 演示。
  • 是的,这正是我想要的。现在,我正在尝试通过查看是否可以自己构建其他网站来学习这些语言。 (这是原网站:gettothegame.com.aucodepen.io/nightshade235/pen/KXqmJg我还没有让代码响应,所以请尽可能全屏打开。
  • 感谢您的代码和参考站点。我相信我了解您想要实现的目标。看看这个Codepen。如果它按您希望的方式工作,请尝试执行以下操作: 1) 成功添加新部分及其各自的进度跟踪器图标。 2) 通读 JavaScript 代码。它被评论以解释正在发生的事情。 3) 确定您网站的哪些部分在 Codepen 上。只有在这些之后,您才应该尝试在您的网站上实施它。
猜你喜欢
  • 1970-01-01
  • 2021-10-09
  • 2022-10-15
  • 1970-01-01
  • 2017-08-03
  • 2011-10-16
  • 2013-08-03
  • 2020-12-10
  • 1970-01-01
相关资源
最近更新 更多